【问题标题】:Protractor sendkeys not working: an x display is required for keycode conversions量角器发送键不起作用:键码转换需要 x 显示
【发布时间】:2014-11-02 02:36:48
【问题描述】:

我正在尝试使用无头 Chrome 在 Vagrant VM 内运行 Protractor e2e 测试。 我设法通过使用 Xvfb 使其工作,但是当我运行测试以填写表格时出现错误:unknown error: an X display is required for keycode conversions, 请考虑使用 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 &

导出 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 变量,但我不确定也不知道如何修复它。

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

【问题讨论】:

    标签: node.js angularjs testing selenium protractor


    【解决方案1】:

    确保 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

    【讨论】:

    • 感谢您的快速回复,Leo。我对此进行了测试,但仍然无法正常工作。我也在我的 Mac 上运行它,它是 64 位,但发生了同样的错误。
    • 你的意思是你运行一个 VM 来宾操作系统 Ubuntu 14.04 64 位?并且使用xvfb-run 与之前的 sendKeys 错误相同?
    • 在家里我运行 32 位 Ubuntu 14.04 作为主机和来宾操作系统,在工作 OSX 主机和 64 位 Ubuntu 14.04 来宾操作系统。两者都给出完全相同的错误。可能是我需要安装的一些依赖项吗?我检查了几个博客和 SO,它们为我提供了相同的信息以使一切正常运行。如果您需要更多信息,请告诉我,再次感谢您的努力!
    • 我设法取得了一些进展!在 protractor.conf.js 中,我必须将“chromeOnly”设置为 false,以便它使用位于 127.0.0.1:4444/wd/hub 的 Selenium 服务器,而不是仅使用 chromedriver。我还没有弄清楚为什么它不能仅与 chromedriver 一起使用。我会做更多的研究,然后接受你的答案并编辑它以添加它。再次感谢!
    • 真棒丹尼!是的,chromeOnly 将有效地避免使用无头 selenium 服务器:github.com/angular/protractor/blob/… 抱歉,我没有看到这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2015-09-23
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多