我的nightwatch.js测试在CentOS的Chrome headless中无法运行

4

我使用Nightwatch版本1.0.18运行nightwatch.js测试,它在Windows环境下工作正常,但是当我在CentOS上运行时,在安装了Xvfb后出现以下错误。

 Error while running .navigateTo() protocol action: invalid session id

 Error while running .locateMultipleElements() protocol action: invalid session id

 Error while running .locateMultipleElements() protocol action: invalid session id

以下是我的nightwatch.json文件代码:

{
  "src_folders": [
    "./tests"
  ],
  "output_folder": "./reports",
  "custom_commands_path": "./custom_commands",
  "custom_assertions_path": "",
  "test_workers": false,
  "webdriver": {
    "start_process": true
  },
  "test_settings": {
    "default": {
      "webdriver": {
        "port": 9515,
        "server_path": "./node_modules/chromedriver/lib/chromedriver/chromedriver",
        "cli_args": [
          "--log",
          "debug"
        ]
      },
      "skip_testcases_on_fail": true,
      "desiredCapabilities": {
        "browserName": "chrome",
        "javascriptEnabled": true,
        "acceptSslCerts": true,
        "chromeOptions": {
          "args": [
            "headless",
            "no-sandbox",
            "disable-gpu"
          ]
        }
      }
    }
  }
}

我在CentOS环境下运行测试时是否遗漏了某些内容,因为它是在Windows环境下运行的?


一样的问题,不同的配置,但是同样的错误,特别是 Error while running .navigateTo() protocol action: invalid session id - axel
我在将chromedriver作为独立运行而非节点模块时更加顺利,如果您想让我逐步发布步骤,请告诉我。 - Alex Andrei
3个回答

7
我在使用Nightwatchjs和npm chomedriver安装时遇到了同样的问题。
背景: 一切都很正常,直到最近我更新了系统上的Chromium。除了原帖中提到的错误外,详细日志还显示:
{ 
  message: 'unknown error: Chrome failed to start: exited abnormally',
  error: [ 
    "(unknown error: DevToolsActivePort file doesn't exist)",
    '(The process started from chrome location /usr/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)',
    '(Driver info: chromedriver=2.46.628388 (4a34a70827ac54148e092aafb70504c4ea7ae926),platform=Linux 4.9.0-8-amd64 x86_64)'
  ],
}

下载了独立的chromedriver(2.46.628388)以匹配我的Chromium版本(72.0.3626.69)之后,它仍然显示相同的错误。

解决方法: 最终我下载了一个较旧版本的Chromium(71.0.3578.127),并将chromeOptions.binary设置为Chromium 71二进制文件的新路径。我还必须在chromeOptions.args中包含“no-sandbox”。

这是来自上述网站的片段:

下载 Chrome / Chromium 的旧版本

假设您想要一个 Chrome 44 版本来进行调试。由于 Google 没有最新的安全修复程序,因此他们不提供旧版本的构建。

但是,您可以获取一个 Chromium 44.x 版本,它应该与稳定版本大致相同。以下是查找方法:


1
我也遇到了同样的问题,尽管我只是下载了 Google Chrome(v.73)和 Chromedriver 2.46。即使它们应该是兼容的,我仍然遇到了问题。 解决方案是在 chromeOptions 参数中添加 no-sandbox - SuperMarco

1

0

在我的情况下,当发生那个错误时:

Error while running .navigateTo() protocol action: invalid session id

我将以下代码添加到.travis.yml文件中:

addons:
  chrome: stable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接