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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nightwatch测试在Headless chrome模式下找不到元素相关的知识,希望对你有一定的参考价值。

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

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

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

答案

我想你应该在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

另一答案

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

事实证明,“普通”镀铬有英文主页,而“无头”镀铬有法语主页,出于某种原因。

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

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

我仍然很难用英语(很奇怪)设置它,但我希望将来能节省几个小时

以上是关于Nightwatch测试在Headless chrome模式下找不到元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素

nightwatch 基于Webdriver的端到端自动化测试框架

VUE Nightwatch 测试环境问题

使用Nightwatch进行测试时未获得预期的像素高度

使用 Nightwatch 进行演示 - 通过配置减慢断言

使用Nightwatch.js做基于浏览器的web应用自动测试