【问题标题】:WebdriverJS : driver.manage().logs().get('browser') returns empty arrayWebdriverJS:driver.manage().logs().get('browser') 返回空数组
【发布时间】:2018-12-04 02:14:35
【问题描述】:

我有以下 mocha 测试用例,我试图最后打印 webdriver 日志,但它返回一个空数组。即使我将“浏览器”作为参数传递给 logs().get(),结果也是一样的。谁能告诉我为什么日志是空的?

it('should open a url', function(done){
    var By = nemo.wd.By;
    driver.manage().logs();
    driver.get("http://www.google.com");
    driver.findElement(By.name('q')).sendKeys("webdriver");
    driver.findElement(By.name('btnG')).click()
    driver.manage().logs().get('driver').then(function(logs){
        console.log(logs);
        done();
    });
});

【问题讨论】:

  • 也许可以试试 driver.logs()。看起来 webdriverjs 有一个更直接的方法:selenium.googlecode.com/git/docs/api/javascript/…
  • 这是因为我在创建驱动程序实例时没有启用功能列表中的日志记录选项。现在解决了。 var pref = new webdriver.logging.Preferences(); pref.setLevel('浏览器',webdriver.logging.Level.ALL); pref.setLevel('driver',webdriver.logging.Level.ALL); var driver = new webdriver.Builder()。 withCapabilities(webdriver.Capabilities.firefox()).setLoggingPrefs(pref)。构建();
  • 您应该回答自己的问题并将其标记为已解决

标签: javascript selenium-webdriver webdriverjs


【解决方案1】:

这是因为我在创建驱动程序实例时没有启用功能列表中的日志记录选项。现已通过这些更改解决。

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

【讨论】:

  • 不错的 FF 解决方案,但您有 IE11 的解决方案吗?
  • 工作于"chromedriver": "91.0.0", nodejs >=
【解决方案2】:

这也取决于所使用的浏览器驱动程序 - 例如使用 chromedriver >= 2.29 时,日志有时会“延迟” - logs().get('performance') 承诺会使用空数组解析,但在等待后会使用数据解析。这与奥斯卡的能力调整相同。所以,这里有一个解决方法:

function getPerfLogs(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))

【讨论】:

    【解决方案3】:

    @Artem 的回答验证了我看到的行为,但我为我的情况找到了一个不同的解决方案,使用量角器:在访问日志之前显式调用 browser.waitForAngular()

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2019-06-17
      相关资源
      最近更新 更多