我有问题运行硒测试无头与铬



我使用的是"selenium-webdriver"; "4.0.0-alpha.7"使用javascript。当我尝试无头运行测试用例时,传入. withcapabilities。该测试仅在chrome浏览器下运行,而不是无头运行。

我有一个config.js文件,看起来像这样

// filename: lib/config.js
 
module.exports = {
   baseUrl: process.env.BASE_URL || 'https://www.mycompanyURL.com',
   host: process.env.HOST || 'headless',
    headless: {
      "browserName": process.env.BROWSER_NAME || 'chrome'
      "chromeOptions": {
        "args": ['--headless'],
           },
      },
     localhost: {
          "browserName": process.env.BROWSER_NAME || 'chrome'
          }
      }
    

我有一个drivefactory。js看起来像这样

// filename: DriverFactory.js
const path = require('path')
const { Builder } = require('selenium-webdriver')

class DriverFactory {
constructor(config) {
this.config = config
}

_configure() {
let builder = new Builder()
switch (this.config.host) {

case 'localhost':
builder.withCapabilities(this.config.localhost)
break

case 'headless':
builder.withCapabilities(this.config.headless).
break
}
return builder
}
}
module.exports = DriverFactory 



有人知道为什么没有在功能中设置headless参数吗?

根据WebDriver规范,从Selenium 4(以及IIRC, Selenium 3系列的一些后续版本)开始,特定于供应商的参数已经有了命名空间。

参数现在需要在goog命名空间下提供给驱动程序,例如goog:chromeOptions

<标题>

选择您可以用以下内容替换您的配置:

headless: {
"browserName": process.env.BROWSER_NAME || 'chrome'
"goog:chromeOptions": {
"args": ['--headless'],
},
},

一个更好的主意

selenium-webdriver库有内置的选项设置Chrome(和铬,就此而言)进入无头模式。这样做意味着你不必跟踪所需的参数值,而且在我看来更简洁一些。

更新你的driverFactory:

case "headless":
builder.withCapabilities(this.config.headless)
.setChromeOptions(new chrome.Options().headless());
break;

最新更新