我有问题 运行 selenium tests headless with chrome

I am having issues running selenium tests headless with chrome

我在 javascript 中使用“selenium-webdriver”:“4.0.0-alpha.7”。当我尝试 运行 我的测试用例无头地传入 .withCapabilities 时。使用 chrome 浏览器进行的测试仅 运行s 而不是无头。

我有一个 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 




 

有谁知道为什么没有在功能中设置无头参数?

自 Selenium 4(以及 IIRC,Selenium 3 系列的一些较新版本)起,vendor-specific 参数已命名空间,in accordance with the WebDriver Spec

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

一个选项

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

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

一个更好的主意

selenium-webdriver 库有 built-in 选项,用于将 Chrome(和 Chromium,就此而言)设置为无头模式。以这种方式做事意味着您不必跟踪所需的参数值,并且 IMO 更简洁。

只需更新您的 driverFactory:

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