Capybara-webkit、rspec 集成规范和 xvfb:webkit_server:致命 IO 错误:客户端被杀死

Posted

技术标签:

【中文标题】Capybara-webkit、rspec 集成规范和 xvfb:webkit_server:致命 IO 错误:客户端被杀死【英文标题】:Capybara-webkit, rspec integration specs, and xvfb: webkit_server: Fatal IO error: client killed 【发布时间】:2011-08-19 03:29:04 【问题描述】:

我正在尝试使用无头 gem、xvfb 和 capybara-webkit 在 ubuntu 服务器 CI 盒上运行一套集成规范,以进行无头测试。一切都在本地开发盒上运行良好,但一旦转移到 CI 服务器,事情就会变得有趣。

在规范助手中有一些代码包装:js 在无头块中启用了集成规范,如下所示:

  config.around(:each, :js => true) do |example|
    Headless.ly &example 
  end

就像我说的,这一切都在本地开发盒上运行良好。在 CI 上,它使用 headless gem 和 xvfb 作为同一用户对不同项目进行测试,当规范需要实例化浏览器实例时,尝试运行集成规范会导致以下错误:

webkit_server:致命的 IO 错误:客户端被杀死

我一直试图找出可能导致该错误的原因,但甚至找不到可能来自何处的痕迹,或任何其他有助于调试问题的信息。

到目前为止,我已经检查/尝试了以下内容:

CI 用户肯定有权限运行 xvfb 以 CI 用户身份运行“Xvfb :99 -ac”会给出一个关于未找到字体的警告,没有其他问题

有没有人知道可能是什么原因造成的,或者我可以在哪里寻找更多信息?我对此感到很困惑。

谢谢!

【问题讨论】:

【参考方案1】:

我不确定这是否完全是正确的解决方案,但它似乎对我有用。而不是这样做:

bundle exec spec

像这样使用 Xvfb 运行命令,并删除无头 gem 的使用:

xvfb-run bundle exec spec

似乎有点不对劲,但确实有效。

【讨论】:

【参考方案2】:

对我来说,以下工作。我不确定为什么缺少“-a”无法运行 xvfb。我的构建现在正在 ubuntu+jenkins CI 上运行 @javascript 测试

DISPLAY=localhost:0.0 xvfb-run -a bundle exec cucumber

【讨论】:

【参考方案3】:

不确定这是否相关(我使用的是 capybara-webkit 而不是 Headless gem)但在我的 ubuntu 实例上(ec2 上的 ubuntu lucid)我还需要运行:

sudo xhost +local:jenkins

授予 jenkins 帐户与 xvfb 交谈的权限。见:Cannot connect to X server :0.0 with a Qt application

【讨论】:

以上是关于Capybara-webkit、rspec 集成规范和 xvfb:webkit_server:致命 IO 错误:客户端被杀死的主要内容,如果未能解决你的问题,请参考以下文章

重定向导致 Capybara-webkit 失败

如何使用 capybara-webkit 获取响应头和时间

Capybara-Webkit CSS 支持

使用 Quilljs 和 capybara-webkit 进行 Capybara 测试

ruby 持续集成,parallel_tests,黄瓜,无头,capybara-webkit,chrome。对于mac和linux。有条件的@show chrome浏览器(:

ruby 持续集成,parallel_tests,黄瓜,无头,capybara-webkit,chrome。对于mac和linux。有条件的@show chrome浏览器(: