2013-08-15 26 views
17

Voglio costruire un test di automazione, quindi devo conoscere gli errori che appaiono nella console di chrome.Ottieni il log della console di chrome

c'è un'opzione per ottenere le righe di errore che appaiono nella console?

Per visualizzare la console: fare clic con il pulsante destro del mouse in qualche punto della pagina, fare clic su "inspect element" e quindi su "console".

+2

Questo aiuto? http://stackoverflow.com/questions/5056737/getting-data-from-the-browsers-console-using-javascript –

risposta

26

Non so C#, ma qui è 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 configurazione in codice di cui sopra. Utilizziamo l'oggetto LoggingPreferences per abilitare la registrazione. Esistono alcuni tipi di registri, ma se si desidera tenere traccia degli errori della console, LogType.BROWSER è quello che è necessario utilizzare. Quindi passiamo quell'oggetto a DesiredCapabilities e oltre al costruttore di ChromeDriver e voila - abbiamo un'istanza di ChromeDriver con la registrazione abilitata.

Dopo aver eseguito alcune azioni sulla pagina, si chiama metodo analyzeLog(). Qui semplicemente estraiamo il log e iteriamo attraverso le sue voci. Qui puoi mettere le asserzioni o fare qualsiasi altro rapporto che desideri.

L'ispirazione è stata this code by Michael Klepikov che spiega come estrarre i registri delle prestazioni da ChromeDriver.

+7

Mentre questa è la risposta corretta per Java, come si fa notare, non è C# e non funzionerebbe per C# una volta "tradotto" perché l'API .NET di Selenium * non supporta i registri. Come in, quando si esegue 'Driver.Manage()', '.log()' non sarà disponibile. +1 in ogni caso, poiché mostra la soluzione. – Arran

+0

Non c'è ancora modo di ottenere i registri del browser in C#? –

+0

Non sono sicuro del motivo per cui [numero 6832] (https://code.google.com/p/selenium/issues/detail?id=6832) è ancora aperto, ma per ora '.Logs' funziona. Abbiamo WebDriver versione 2.21, probabilmente – mazharenko

1

Al momento il logging issue 6832 non è ancora implementato per le associazioni C#. Quindi potrebbe non esserci un modo semplice per farlo funzionare fin d'ora.

12

È possibile ottenere i registri in questo modo:

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

Specificando ciò registro che si interessa si può ottenere il registro del browser, vale a dire:

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

Ricorda inoltre di impostare il driver di conseguenza :

ChromeOptions options = new ChromeOptions(); 
options.SetLoggingPreference(LogType.Browser, LogLevel.All); 
driver = new ChromeDriver("path to driver", options); 
+0

Ciao! Non funziona per me, puoi per favore [controllare il mio problema] (http://stackoverflow.com/questions/37027989/cant-get-proper-console-logs-from-webdriver-chrome-c)? Grazie! –

+0

@BlackHat Ci scusiamo per la risposta tardiva! Ho aggiornato la mia risposta con le informazioni della tua discussione. –

+0

Non ho dovuto impostare il meccanismo di registrazione quando si avvia il driver e 'Driver(). Manage(). Logs.GetLog (LogType.Browser); mi ha ottenuto LogEntries contenente l'errore – Tarun

2

Questo è il codice C# per la registrazione del registro brower da 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 registro attuale:

 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)); 
    } 
0
driver.manage().logs().get("browser") 

Gets tutti i registri stampati sulla console. Sono stato in grado di ottenere tutti i registri tranne le violazioni. Si prega di dare un'occhiata qui Chrome Console logs not printing Violations

Problemi correlati