我试图在我的 selenium 测试中捕获控制台错误(具有 selenium-webdriver 4.0.0-alpha.5 和最新的 geckodriver 和 chromedriver 的 Node 环境)。我已经为 Firefox 设置了一个驱动程序,为 Chrome 设置了另一个驱动程序,如下所示:
const chrome = require('selenium-webdriver/chrome');
const firefox = require('selenium-webdriver/firefox');
const webdriver = require('selenium-webdriver');
const { Builder, By, Capabilities, until } = webdriver;
let loggingPref = new webdriver.logging.Preferences();
loggingPref.setLevel( 'browser', webdriver.logging.Level.SEVERE );
let driver_fx = await new Builder()
.withCapabilities(
Capabilities.firefox()
.set("acceptInsecureCerts", true)
)
.setLoggingPrefs( loggingPref )
.build();
let driver_chr = await new Builder()
.forBrowser('chrome')
.setLoggingPrefs( loggingPref )
.build();
这是应该获取错误日志的函数:
const getConsoleErrors = (driver) => {
return driver.manage().logs().get('browser').then((logs) => {
return logs.map(( log ) => log.message );
});
}
使用 Chrome 驱动程序,这可以按预期工作:
await driver.get(devUrl);
let errors = await getConsoleErrors(driver_chr);
console.log(errors);
// output:
// [ 'https://mylocaldevserver/with/path 465:61 Uncaught TypeError: Cannot read property \'textContent\' of null' ]
但是,当将 driver_fx
传递给函数时,会导致以下异常:
WebDriverError: HTTP method not allowed
at parseHttpResponse (***\node_modules\selenium-webdriver\lib\http.js:580:11)
at Executor.execute (***\node_modules\selenium-webdriver\lib\http.js:489:26)
at process._tickCallback (internal/process/next_tick.js:68:7)
这是 selenium 或 geckodriver 中的错误,还是我构建 Firefox 驱动程序的方式不同(我需要这样做才能忽略本地开发服务器的证书)?
最佳答案
对于 future 的 Google 员工来说,不幸的是 log('browser')
不在 W3C 规范中,因此 geckodriver
团队似乎正在拖延它。截至今天(2020 年 2 月 17 日),还没有官方“修复”该问题。
您很可能必须使用类似的解决方法:https://github.com/mozilla/geckodriver/issues/284#issuecomment-477677764
关于node.js - Selenium:尝试获取 Firefox 控制台日志结果为 "WebDriverError: HTTP method not allowed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59192232/