node.js - Selenium:尝试获取 Firefox 控制台日志结果为 "WebDriverError: HTTP method not allowed"

标签 node.js selenium selenium-webdriver firefox geckodriver

我试图在我的 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

在此处查找更多信息:https://github.com/mozilla/geckodriver/issues/284

关于node.js - Selenium:尝试获取 Firefox 控制台日志结果为 "WebDriverError: HTTP method not allowed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59192232/

相关文章:

javascript - node.js 将二进制字符串转换为数字

xml - 使用 nodejs 中的 xmlbuilder 在 xml 中添加 namspace

node.js - 微服务:如何处理有界上下文之间需要数据的场景

c# - Selenium geckodriver 执行 findElement 比 chromedriver (.Net) 慢 10 倍

javascript - 从 Node 中的公共(public)脚本访问 .env 变量

java - JAVA 和 JUnit 中都存在断言吗?

java - XPATH:排除具有特定子元素的元素

Selenium WebDriver 或 Selenium RC 的 xpath 和 cssSelector

java - WebDriver 无法对具有 onclick=function1() 作为属性的输入元素执行单击

java - 如何使用 javascript 在 selenium webdriver 中执行鼠标悬停功能