Ottenere chrome log della console

Voglio costruire una automazione di test, quindi devo sapere gli errori che vengono visualizzati nella console di chrome.

c’è un opzione per ottenere l’errore di righe visualizzate nella console?

Per vedere la console: fare clic su qualsiasi punto della pagina, fare clic su “ispeziona elemento” e poi “console”.

 

6 Replies
  1. 31

    Non so C# ma ecco il codice Java che fa il lavoro, spero che si può tradurre in C#,

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.logging.LogEntries;
    import org.openqa.selenium.logging.LogEntry;
    import org.openqa.selenium.logging.LogType;
    import org.openqa.selenium.logging.LoggingPreferences;
    import org.openqa.selenium.remote.CapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Test;
    
    public class ChromeConsoleLogging {
        private WebDriver driver;
    
    
        @BeforeMethod
        public void setUp() {
            System.setProperty("webdriver.chrome.driver", "c:\\path\\to\\chromedriver.exe");        
            DesiredCapabilities caps = DesiredCapabilities.chrome();
            LoggingPreferences logPrefs = new LoggingPreferences();
            logPrefs.enable(LogType.BROWSER, Level.ALL);
            caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
            driver = new ChromeDriver(caps);
        }
    
        @AfterMethod
        public void tearDown() {
            driver.quit();
        }
    
        public void analyzeLog() {
            LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
            for (LogEntry entry : logEntries) {
                System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
                //do something useful with the data
            }
        }
    
        @Test
        public void testMethod() {
            driver.get("http://mypage.com");
            //do something on page
            analyzeLog();
        }
    }

    Prestare attenzione al metodo di installazione nel codice di cui sopra. Usiamo LoggingPreferences oggetto per attivare la registrazione. Ci sono alcuni tipi di registri, ma se si desidera tenere traccia di errori di console quindi LogType.Il BROWSER è quello che si dovrebbe usare. Poi si passa all’oggetto DesiredCapabilities e in seguito alla ChromeDriver costruttore e voilà, abbiamo un esempio di ChromeDriver con la registrazione è attivata.

    Dopo l’esecuzione di alcune azioni sulla pagina chiamiamo analyzeLog() metodo. Qui abbiamo semplicemente estrarre i log e scorrere le voci. Qui si può mettere di affermazioni o di fare qualsiasi altra segnalazione che si desidera.

    La mia ispirazione era questo codice da parte di Michael Klepikov che spiega come estrarre registri di prestazioni ChromeDriver.

    • Mentre questa è la risposta corretta per Java, come hai sottolineato, non è C# e non lavoro per C# una volta “tradotto” perché il .NET API di Selenio non supporto registri. Come, quando si Driver.Manage(), .Logs() non sarà disponibile. +1 comunque, in quanto mostra la soluzione.
    • C’è ancora nessun modo per avere un Browser registra in C#?
    • Non so perché, problema 6832 è ancora aperto, ma per ora .Logs opere. Abbiamo WebDriver versione 2.21, probabilmente
    • Così con la tua idea e un codice come questo: var logs = driver.Manage().Logs.GetLog(LogType.Browser); ancora non riesco a ottenere i registri. Vi preghiamo di controllare questo problema qui? Grazie in anticipo!
  2. 21

    È possibile ottenere i log in questo modo:

    Driver().Manage().Logs.GetLog();

    Specificando che il log si è interessati si può ottenere il log browser, che è:

    Driver().Manage().Logs.GetLog(LogType.Browser);

    Anche ricordarsi di configurare il driver di conseguenza:

    ChromeOptions options = new ChromeOptions();
    options.SetLoggingPreference(LogType.Browser, LogLevel.All);
    driver = new ChromeDriver("path to driver", options);
    • Ciao! Questo non funziona per me, per favore controllare il mio problema? Grazie!
    • Scusa per il ritardo della risposta! Ho aggiornato la mia risposta con le informazioni dal tuo thread.
    • Non ho dovuto impostare la registrazione meccanismo di quando in quando si avvia il driver e Driver().Manage().Logs.GetLog(LogType.Browser); mi LogEntries contenenti errori
    • Non è esattamente ciò che è inteso qui? @Tarun
  3. 3

    Questo è il codice c# per la registrazione il visualizzatore di log da google chrome.

    private void CheckLogs()
        {
            List<LogEntry> logs = Driver.Manage().Logs.GetLog(LogType.Browser).ToList();
            foreach (LogEntry log in logs)
            {
                Log(log.Message);
            }
        }

    ecco il mio codice per il log effettivo:

            public void Log(string value, params object[] values)
        {
            //allow indenting
            if (!String.IsNullOrEmpty(value) && value.Length > 0 && value.Substring(0, 1) != "*")
            {
                value = "      " + value;
            }
    
            //write the log
            Console.WriteLine(String.Format(value, values));
        }
  4. 2

    Come per problema 6832 la registrazione non è ancora implementato per C# associazioni. Quindi non ci sarebbe un modo semplice per ottenere questo lavoro, per ora.

    • Per quanto ne so questa dovrebbe essere la risposta. Non c’è (a mia conoscenza) per ottenere il browser registra in modo nativo in Selenio con il linguaggio C#. Alcuni dei commenti citati può essere rimosso modulo altra lingua associazioni pure. Sarò molto felice di cucire le informazioni più recenti su questo, ma penso che l’ultimo è – non si sta andando a avete.
  5. -1
    public void Test_DetectMissingFilesToLoadWebpage()
        {
            try
            {
                List<LogEntry> logs = driver.Manage().Logs.GetLog(LogType.Browser).ToList();
                foreach (LogEntry log in logs)
                {
                    while(logs.Count > 0)
                    {
                        String logInfo = log.ToString();
                        if (log.Message.Contains("Failed to load resource: the server responded with a status of 404 (Not Found)"))
                        {
                            Assert.Fail();
                        }
                        else
                        {
                            Assert.Pass();
                        }
                    }
                }
            }
            catch (NoSuchElementException e)
            {
                test.Fail(e.StackTrace);
            }
        }

    Si potrebbe fare qualcosa di simile a questo in C#. Si tratta di un completo test case. Quindi stampare l’output della console come Stringa io.e logInfo nel report. Per qualche ragione, Log(log.Messaggio) dalla soluzione sopra questo mi ha dato errori di compilazione.Così, l’ho sostituito.

Lascia un commento