2013-08-15 18 views
17

Ich möchte eine Automatisierungsprüfung erstellen, so muss ich die Fehler kennen, die in der Konsole von Chrome angezeigt werden.Holen Sie sich die Konsolenprotokoll von chrome

gibt es eine Option, um die Fehlerzeilen zu erhalten, die in der Konsole erscheinen?

Um die Konsole zu sehen: Klicken Sie mit der rechten Maustaste irgendwo auf die Seite, klicken Sie auf "inspect element" und dann auf "console".

+2

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

Antwort

26

ich nicht C# wissen, aber hier ist Java-Code, der die Arbeit erledigt, ich hoffe, Sie es zu 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(); 
    } 
} 

Achten Sie auf setUp Verfahren in obigem Code übersetzen. Wir verwenden das LoggingPreferences-Objekt, um die Protokollierung zu aktivieren. Es gibt einige Arten von Protokollen, aber wenn Sie Konsolenfehler verfolgen möchten, sollten Sie LogType.BROWSER verwenden. Dann übergeben wir dieses Objekt an DesiredCapabilities und weiter an den ChromeDriver-Konstruktor und voila - wir haben eine Instanz von ChromeDriver mit aktivierter Protokollierung.

Nach einigen Aktionen auf der Seite rufen wir analyzeLog() -Methode. Hier extrahieren wir einfach das Protokoll und durchlaufen seine Einträge. Hier können Sie Aussagen machen oder andere Berichte erstellen, die Sie möchten.

Meine Inspiration war this code by Michael Klepikov, die erklärt, wie Leistungsprotokolle von ChromeDriver extrahiert werden.

+7

Während dies die richtige Antwort für Java ist, wie Sie darauf hinweisen, ist es nicht C# und würde nicht funktionieren für C# einmal "übersetzt", weil die .NET API von Selen * Logs nicht unterstützt. Wie bei 'Driver.Manage()' ist '.Logs()' nicht verfügbar. +1 sowieso, da es die Lösung zeigt. – Arran

+0

Gibt es immer noch keine Möglichkeit, Browser in C# einzuloggen? –

+0

Ich bin mir nicht sicher, warum [Problem 6832] (https://code.google.com/p/selenium/issues/detail?id=6832) noch offen ist, aber für den Moment funktioniert '.Logs'. Wir haben WebDriver Version 2.21, wahrscheinlich – mazharenko

1

Gemäß issue 6832 ist die Protokollierung für C# -Bindungen noch nicht implementiert. Es könnte also kein einfacher Weg sein, dies ab sofort zum Laufen zu bringen.

12

Sie Protokolle auf diese Weise erhalten können:

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

Durch die Angabe, was lügen Sie interessiert sind in den Browser-Log bekommen, das heißt:

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

Fahrer Denken Sie auch daran zu Setup entsprechend :

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

Hallo! Es funktioniert nicht für mich, können Sie bitte [überprüfen Sie mein Problem] (http://stackoverflow.com/questions/37027989/cant-get-proper-console-logs-from-webdriver-chrome-c)? Vielen Dank! –

+0

@BlackHat Entschuldigung für die späte Antwort! Ich habe meine Antwort mit den Informationen aus deinem Thread aktualisiert. –

+0

Ich habe nicht eingerichtet Mechanismus Protokollierung, wenn wenn der Fahrer und 'Treiber Start() Verwalten() Logs.GetLog (LogType.Browser)..' Hat mich LogEntries Fehler enthält – Tarun

2

Dies ist der C# -Code für die Protokollierung des Browserprotokolls von Chrome.

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

hier ist mein Code für das eigentliche Protokoll:

 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)); 
    }