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

时间:2014-09-08 19:25:26

标签: node.js angularjs testing selenium 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一起安装
  • Vagrant 1.6.3
  • VirtualBox 4.3.14
  • 主机操作系统Ubuntu 14.04 32位
  • 访客操作系统Ubuntu 14.04 32位
  • chrome 37.0.2062.94
  • chromedriver 2.10.267517

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

  

#!/ bin / sh的

     

webdriver-manager start&

     

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行)没有获得显示对象时触发它。我怀疑它可能只是我在/ opt / google / chrome / google-chrome中导出的DISPLAY变量,但我不确定并且不知道如何修复它。

我想知道如何在Vagrant VM中使用无头Chrome的sendfkeys()。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

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

此外,Xvfb需要在webdriver-manager之前运行,并且您似乎缺少xvfb-run,因为您似乎需要它为您执行X authority dance

#!/bin/sh

export DISPLAY=:1

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

xvfb-run webdriver-manager start &

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