WebdriverJS: driver.manage().logs().get('browser')返回

WebdriverJS : driver.manage().logs().get('browser') returns empty array

本文关键字:返回 browser logs driver manage WebdriverJS get      更新时间:2023-09-26

我有以下mocha测试用例,我试图在最后打印webdriver日志,但它返回一个空数组。即使我将'browser'作为参数传递给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();
    });
});

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

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

这也取决于正在使用的浏览器驱动程序-例如,在chromedriver>= 2.29中,日志有时是'迟到' - logs().get('performance')承诺解析为空数组,但在等待之后,它解析为数据。Oscar的功能调整也是如此。这里有一个变通方法:

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

@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 ?视图= ProtractorBrowser.prototype.waitForAngular