Nightwatch测试在Headless chrome模式中找不到元素

时间:2017-09-27 16:01:18

标签: selenium automated-tests nightwatch.js headless-browser google-chrome-headless

我试图让我的测试(用Nightwatch.js编写)在无头镀铬本地运行。 但是,测试失败,因为它们无法在无头模式下找到元素(尽管它们在没有无头模式的情况下工作)。

如果我查看失败的屏幕截图,我只会看到一个白屏。 但如果测试检查“body”元素,它实际上是通过。所以我认为页面已加载,但也许无头的chrome,由于某种原因,无法加载javascript?后来我等待div和按钮等几秒钟可见,但它找不到它们。

你有什么想法可能有什么不对吗? 我在nightwatch配置文件中的desiredCapabilities中添加了--headless和--disable-gpu标志。

2 个答案:

答案 0 :(得分:0)

我认为你应该在Nightwatch.js中声明二进制路径

如果您使用的是linux,请尝试使用它,它对我来说非常适合:

            "desiredCapabilities": {
            "browserName": "chrome",
            "javascriptEnabled": true,
            "acceptSslCerts": true,
            "chromeOptions": {
                "args": [
                    "headless", "disable-gpu"
                 ],
                 "binary": "/usr/bin/google-chrome"
              }
        }

如果您使用的是Mac,请替换二进制路径,例如/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

答案 1 :(得分:0)

所以,正如我在回复中所说,我昨天遇到了同样的问题,我只是想在谷歌主页上进行虚拟测试。今天早上有一个新鲜的大脑,我试图解决这个问题。我有一个绝妙的主意,就是在守夜人未能找到元素之前拍摄截图。

事实证明"正常" chrome有英文主页,"无头"由于某种原因,chrome有法语主页。

我发现了这一点:https://bugs.chromium.org/p/chromedriver/issues/detail?id=1925可能正在解释原因。 我发现始终使用正确语言的解决方法是:

"chromeOptions" : {
  "args" : ["--lang=fr", "--headless"]
}

我仍然很难用英语设置它(很奇怪),但我希望将来可以节省一些时间