我有以下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();
});
});
答案 0 :(得分:4)
这是因为我在创建驱动程序实例时没有在功能列表中启用日志记录选项。现在已经解决了这些变化。
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();
答案 1 :(得分:1)
这还取决于所使用的浏览器驱动程序 - 例如chromedriver> = 2.29,日志有时候会迟到' - logs().get('performance')
promise使用空数组解析,但在等待之后它会解析数据。这与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))
答案 2 :(得分:0)
@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