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.
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).
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With