量角器sendkeys不工作:键码转换需要x显示

Dan*_*rke 5 testing selenium node.js angularjs protractor

我正在尝试使用无头Chrome在Vagrant VM中运行Protractor e2e测试.我设法通过使用Xvfb使其工作但是当我运行测试来填充表单时出现错误:未知错误:键代码转换需要X显示,请考虑使用Xvfb

所有测试运行正常,但是一旦我使用getKeys()(例如element(by.model('user.email')).sendKeys('admin');)即使我已经在使用Xvfb,我也会收到此错误.

我在跑:

  • 使用Yeoman angular-fullstack生成器生成的AngularJS示例应用程序
  • Nodejs版本0.10.30,与nvm一起安装
  • 流浪汉1.6.3
  • VirtualBox 4.3.14
  • 主机操作系统Ubuntu 14.04 32位
  • 客户操作系统Ubuntu 14.04 32位
  • 铬37.0.2062.94
  • chromedriver 2.10.267517

我使用以下shell脚本启动Selenium和Xvfb:

#!/ bin/sh的

webdriver-manager开始&

Xvfb:1 -ac -screen 0 1280x1024x8&

export DISPLAY =:1

我还在/ opt/google/chrome/google-chrome中添加了"export DISPLAY =:1".同样,没有sendKeys()的测试运行正常.

到目前为止我做了什么:

  • 我正在运行32位Ubuntu所以我下载了chromedriver 2.10 32位,但这没有帮助
  • 我用--verbose运行chromedriver并检查日志,但只显示相同的错误
  • 我摆弄了Xvfb屏幕尺寸设置,也没有帮助
  • 我在这里检查了一些源代码:https://github.com/bayandin/chromedriver/blob/master/keycode_text_conversion_x.cc并在第196行找到了错误消息.当命令gfx :: GetXDisplay()(第193行)时触发它没有获得显示对象.我怀疑这可能只是DISPLAY变量我在/ opt /谷歌/铬/谷歌Chrome汇出,但我不知道和不知道如何解决它.

我想知道如何在Vagrant VM中使用无头Chrome的sendfkeys().任何帮助是极大的赞赏.

Leo*_*cci 3

确保seleniumAddress: 'http://localhost:4444/wd/hub'与您的 selenium 服务器匹配并避免设置,chromeOnly因为这将有效避免使用无头 selenium 服务器。

另外, Xvfb 需要先运行webdriver-manager,而您错过了,因为您似乎需要它为您xvfb-run执行X 权限舞蹈:

#!/bin/sh

export DISPLAY=:1

Xvfb $DISPLAY -ac -screen 0 1280x1024x8 &
sleep 1

xvfb-run webdriver-manager start &
Run Code Online (Sandbox Code Playgroud)

如果您感兴趣,我已经设置了一个基于无头 docker 的解决方案,具有可选的 VNC 访问和视频录制: https: //github.com/elgalu/docker-selenium

  • 我设法取得了一些进步!在 protractor.conf.js 中,我必须将“chromeOnly”设置为 false,以便它使用位于 http://127.0.0.1:4444/wd/hub 的 Selenium 服务器,而不是仅使用 chromedriver。我还没有弄清楚为什么它不能仅与 chromedriver 一起使用。我会做更多研究,然后接受您的答案并编辑它以添加此内容。再次感谢! (2认同)