3

我有以下 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();
    });
});
4

3 回答 3

5

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

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();
于 2016-03-15T06:13:12.293 回答
1

这也取决于正在使用的浏览器驱动程序——例如,当 chromedriver >= 2.29 时,日志有时会“延迟”——promiselogs().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))
于 2017-08-16T20:56:25.393 回答
0

@Artem 的回答验证了我所看到的行为,但我为我的案例找到了一个不同的解决方案,使用 Protractor: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

于 2018-12-03T18:14:35.120 回答