Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capturing browser logs with Selenium WebDriver using Java

Is there a way to capture browser logs while running automated test cases with Selenium? I found an article on how to capture JavaScript errors in Selenium. But that is just for Firefox and only for errors. I would like to get all the console logs.

like image 743
user3246489 Avatar asked Aug 21 '14 16:08

user3246489


People also ask

What is pageLoadStrategy Selenium?

As of this writing, pageLoadStrategy supports the following values : normal. This stategy causes Selenium to wait for the full page loading (html content and subresources downloaded and parsed). eager. This stategy causes Selenium to wait for the DOMContentLoaded event (html content downloaded and parsed only).


2 Answers

I assume it is something in the lines of:

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

Source : Get chrome's console log

like image 58
Margus Avatar answered Sep 25 '22 00:09

Margus


In a more concise way, you can do:

LogEntries logs = driver.manage().logs().get(LogType.BROWSER); 

For me it worked wonderfully for catching JS errors in console. Then you can add some verification for its size. For example, if it is > 0, add some error output.

like image 39
Johnny Avatar answered Sep 26 '22 00:09

Johnny