Skip to content Skip to sidebar Skip to footer

Webdriverjs : Driver.manage().logs().get('browser') Returns Empty Array

I have the following mocha test case, I'm trying to print the webdriver logs in the end, but its returning an empty array. The result is the same even when I pass 'browser' as argu

Solution 1:

It was because I didn't enable the logging option in the list of capabilities while creating the driver instance. Resolved now with these changes.

var pref = new webdriver.logging.Preferences();
pref.setLevel('browser', webdriver.logging.Level.ALL); 
pref.setLevel('driver', webdriver.logging.Level.ALL); 

var driver = new webdriver.Builder()
    .withCapabilities(webdriver.Capabilities.firefox())
    .setLoggingPrefs(pref).build();

Solution 2:

This also depends on browser driver being used - e.g. with chromedriver >= 2.29 the logs are sometimes 'late' - the logs().get('performance') promise resolves with empty array, but after waiting it resolves with data. This is the same with Oscar's capabilities tweaks. So, here's a workaround:

functiongetPerfLogs(driver) {
  let performanceLogs;

  return driver.wait(() => {
    return driver.manage().logs().get('performance')
      .then(v => {
        let nonEmpty = v.length > 0;
        if (nonEmpty) {
          performanceLogs = v;
        }
        return nonEmpty;
      })
  }, 1000)
  .then(() => {
    return performanceLogs;
  });
}

getPerfLogs(driver)
  .then(v =>console.log('performance logs', v))

Solution 3:

@Artem's answer validated the behavior I was seeing, but I found a different solution for my case, using Protractor: explicitly call browser.waitForAngular() before accessing logs:

return item.click()
    .then(function() {
        // "Protractor automatically applies this command before every WebDriver action",// but apparently browser.manage().logs() is not an action. Without this line// here, logs are sometimes not picked up until some time later.return browser.waitForAngular()
    })
    .then(function() { return browser.manage().logs().get('browser') })
    .then(function(logs) { ... });

https://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngular

Post a Comment for "Webdriverjs : Driver.manage().logs().get('browser') Returns Empty Array"