我使用的是"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;
标题>