it-swarm.com.de

Holen Sie sich das Konsolenprotokoll von chrome

Ich möchte einen Automatisierungstest erstellen, daher muss ich die Fehler kennen, die in der Chrome-Konsole angezeigt werden.

gibt es eine Option, um die Fehlerzeilen abzurufen, die in der Konsole angezeigt werden?

Um die Konsole zu sehen: Klicken Sie irgendwo auf der Seite mit der rechten Maustaste, klicken Sie auf "Element inspizieren" und gehen Sie dann zu "Konsole".

20
Alon Shmiel

Ich kenne C # nicht, aber hier ist Java-Code, der die Aufgabe erfüllt. Ich hoffe, Sie können ihn in C # übersetzen.

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

Beachten Sie die SetUp-Methode im obigen Code. Wir verwenden das LoggingPreferences-Objekt, um die Protokollierung zu aktivieren. Es gibt einige Protokolltypen. Wenn Sie jedoch Konsolenfehler protokollieren möchten, sollten Sie LogType.BROWSER verwenden. Dann übergeben wir dieses Objekt an DesiredCapabilities und weiter an ChromeDriver-Konstruktor und voila - wir haben eine Instanz von ChromeDriver mit aktivierter Protokollierung.

Nachdem wir einige Aktionen auf der Seite ausgeführt haben, rufen wir die analysisLog () -Methode auf. Hier extrahieren wir einfach das Protokoll und iterieren durch seine Einträge. Hier können Sie Zusicherungen abgeben oder andere Berichte erstellen, die Sie möchten.

Meine Inspiration war dieser Code von Michael Klepikov , der erklärt, wie Leistungsprotokolle aus ChromeDriver extrahiert werden.

29
JacekM

Sie können Protokolle auf diese Weise erhalten:

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

Indem Sie angeben, für welches Protokoll Sie sich interessieren, können Sie das Browserprotokoll erhalten.

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

Denken Sie auch daran, Ihren Treiber entsprechend einzurichten:

ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference(LogType.Browser, LogLevel.All);
driver = new ChromeDriver("path to driver", options);
17
Agent Shoulder

Dies ist der C # -Code für die Protokollierung des Protokolls 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 Log:

        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));
    }
3
Beau Bridges

Gemäß issue 6832 ist die Protokollierung für C # -Bindungen noch nicht implementiert. Es kann also nicht leicht sein, dies ab sofort zum Laufen zu bringen.

1
Shouvik Roy
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);
        }
    }

Sie könnten so etwas in C # machen. Es ist ein kompletter Testfall. Drucken Sie dann die Konsolenausgabe als String, dh logInfo, in Ihrem Bericht. Aus irgendeinem Grund gab mir Log (log.Message) aus der obigen Lösung Build-Fehler. Daher ersetzte ich es. 

0
Raj K Lama
driver.manage().logs().get("browser")

Ruft alle auf der Konsole gedruckten Protokolle ab. Ich konnte alle Protokolle mit Ausnahme von Verletzungen erhalten. Bitte schauen Sie hier Chrome Console-Protokolle drucken keine Verletzungen

0
Sangam Shankar