Net::ReadTimeout: Net::ReadTimeout 和 Selenium::WebDriver::Error::UnknownError: 未知错误:Chrome 无法在 Rails 5.1.beta 系统测试上启动

2024-02-27

热衷于将 Capybara 烘焙到新版 Rails (5.1) cfhttp://weblog.rubyonrails.org/2017/2/23/Rails-5-1-beta1/ http://weblog.rubyonrails.org/2017/2/23/Rails-5-1-beta1/

不过我遇到了问题。这是我的步骤。欢迎任何线索。

全新安装:

  • Linux Ubuntu Desktop 16.10(Hyper-V 上的虚拟机),安装了 Chrome 并运行良好;
  • 红宝石 2.4;
  • Rails 5.1.beta。

1.- 创建一个简单的应用程序:

    ~$ ruby -v
    ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
    ~$ rails -v
    Rails 5.1.0.beta1
    ~$ mkdir railsapps
    ~$ cd railsapps
    ~/railsapps$ rails new smoketestapp
    ~/railsapps$ cd smoketestapp
    ~/railsapps/smoketestapp$ rails generate scaffold post title:string body:text
    ~/railsapps/smoketestapp$ rails db:migrate

2.- 运行测试

    ~/railsapps/smoketestapp$ cat test/system/posts_test.rb
    require "application_system_test_case"

    class PostsTest < ApplicationSystemTestCase
      test "visiting the index" do
        visit posts_url

        assert_selector "h1", text: "Post"
      end
    end

     ~/railsapps/smoketestapp$ rake test TEST=test/system/posts_test.rb
    Run options: --seed 55778

    # Running:
    ...
    Error:
    PostsTest#test_visiting_the_index:
    Selenium::WebDriver::Error::WebDriverError: Unable to find chromedriver. Please download the server from http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH. More info at https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
    ...
    1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
     ~/railsapps/smoketestapp$

3.- 好的,让我们按照错误消息中的建议进行操作(安装chromedriver) :

     ~/railsapps/smoketestapp$ ls /usr/bin/google-chrome
    lrwxrwxrwx 1 root root 31 Mar 18 15:31 /usr/bin/google-chrome -> /etc/alternatives/google-chrome*
     ~/railsapps/smoketestapp$ echo $PATH 
    ...:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:...
     ~/railsapps/smoketestapp$ wget https://chromedriver.storage.googleapis.com/2.28/chromedriver_linux64.zip
     ~/railsapps/smoketestapp$ unzip chromedriver_linux64.zip
     ~/railsapps/smoketestapp$ sudo cp chromedriver /usr/local/bin
     ~/railsapps/smoketestapp$ ls /usr/local/bin
    total 7504
    drwxr-xr-x  2 root root    4096 Mar 19 19:05 ./
    drwxr-xr-x 10 root root    4096 Okt 12 22:42 ../
    -rwxr-xr-x  1 root root 7673176 Mar 19 19:05 chromedriver*
     ~/railsapps/smoketestapp$

4.- 好的。重试测试...

     ~/railsapps/smoketestapp$ rake test TEST=test/system/posts_test.rb
    Run options: --seed 51574

    # Running:
    ...
    Error:
    PostsTest#test_visiting_the_index:
    Net::ReadTimeout: Net::ReadTimeout test/system/posts _test.rb:5:in `block in '
    ...
    bin/rails test test/system/posts_test.rb:4
    ...
    1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
     ~/railsapps/smoketestapp$

Not OK!

关于根本原因的线索'Net::ReadTimeout: Net::ReadTimeout'运行时给出错误信息rails -v在应用程序目录中,给出Selenium::WebDriver::Error::UnknownError: 未知错误:Chrome 无法启动:

    ~/railsapps/smoketestapp$ rails -v
    Run options: --seed 39896
    # Running:
    .......E
    Error:
    PostsTest#test_visiting_the_index:
    Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: exited abnormally
      (Driver info: chromedriver=2.28.455506  (18f6627e265f442aeec9b6661a49fe819aeeea1f),platform=Linux 4.8.0-41-generic x86_64)
        test/system/posts_test.rb:5:in `block in <class:PostsTest>'
    Error:
    PostsTest#test_visiting_the_index:
    Net::ReadTimeout: Net::ReadTimeout

    bin/rails test test/system/posts_test.rb:4
    ...
    ~/railsapps/smoketestapp$

这是我直接从 Ruby 调用 Selenium WebDriver 时得到的结果:

    ~/railsapps/smoketestapp$ irb
    2.4.0 :001 > require "selenium-webdriver"
     => true
    2.4.0 :002 > driver = Selenium::WebDriver.for(:chrome)
    Net::ReadTimeout: Net::ReadTimeout
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb:176:in `rbuf_fill'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb:154:in `readuntil'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb:164:in `readline'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/response.rb:40:in `read_status_line'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/response.rb:29:in `read_new'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1446:in `block in transport_request'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1443:in `catch'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1443:in `transport_request'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1416:in `request'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1409:in `block in request'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:877:in `start'
    from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1407:in `request'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/default.rb:124:in `response_for'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/default.rb:78:in `request'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/bridge.rb:669:in `raw_execute'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/bridge.rb:108:in `create_session'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/bridge.rb:71:in `initialize'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/chrome/bridge.rb:52:in `initialize'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/common/driver.rb:61:in `new'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/common/driver.rb:61:in `for'
    from ~/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver.rb:87:in `for'
    from (irb):2
    from ~/.rvm/rubies/ruby-2.4.0/bin/irb:11:in `<main>'
    2.4.0 :003 > exit
    ~/railsapps/smoketestapp$

任何帮助表示赞赏,谢谢

Varus

Update:

发现问题,查看 Selenium 驱动程序的日志文件。为此,我在 IRB 中输入以下内容:

    require "selenium-webdriver"
    Selenium::WebDriver::Chrome.driver_path="/usr/local/bin/chromedriver"
    Selenium::WebDriver.for :chrome, :service_log_path => "/tmp/cd.log"
    driver = Selenium::WebDriver.for(:chrome)

跟踪日志文件确定了这一点:chrome 无法启动:

    ~/railsapps/smoketestapp$ tail /tmp/cd.log
       ...
    [0.247][INFO]: Launching chrome: /opt/google/chrome/google-chrome --disable-background-networking --disable-client-side-phishing-detection --disable-component-update --disable-default-apps --disable-hang-monitor --disable-prompt-on-repost --disable-web-resources --enable-logging --full-memory-crash-report --ignore-certificate-errors --load-extension=/tmp/.org.chromium.Chromium.Pdre6o/internal --logging-level=1 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12264 --safebrowsing-disable-auto-update --safebrowsing-disable-download-protection --use-mock-keychain --user-data-dir=/tmp/.org.chromium.Chromium.mHJaEd data:,
    [0.250][WARNING]: PAC support disabled because there is no system implementation
    [20.281][INFO]: RESPONSE InitSession unknown error: Chrome failed to start: exited abnormally
    ~/railsapps/smoketestapp$

最后我发现通过 PuTTY 远程调用 chrome 不起作用(这就是我一直在做的事情),尽管直接在虚拟机(在终端服务器中)上执行相同的操作是有效的.

在腻子上:

    ~$ google-chrome
    [3938:3938:0320/213941.129923:ERROR:browser_main_loop.cc(279)] Gtk: cannot open display:

然而,它直接在虚拟机上运行。

不幸的是,我的快乐是短暂的,因为我遇到了另一个错误,但那是另一个故事了:

            irb(main):001:0> require "selenium-webdriver"
    => true
    irb(main):002:0> Selenium::WebDriver::Chrome.driver_path="/usr/local/bin/chromedriver"
    => "/usr/local/bin/chromedriver"
    irb(main):003:0> driver = Selenium::WebDriver.for(:chrome)
    => #<Selenium::WebDriver::Driver:0x59d7c889a916c6b8 browser=:chrome>
    irb(main):004:0> driver.navigate.to("http://www.google.com")
    Selenium::WebDriver::Error::UnknownError: unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"10797.1","isDefault":true},"id":1,"name":"","origin":"://"}
      (Session info: chrome=57.0.2987.110)
      (Driver info: chromedriver=2.4.226074,platform=Linux 4.8.0-41-generic x86_64)
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/bridge.rb:669:in `raw_execute'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/bridge.rb:647:in `execute'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/bridge.rb:120:in `get'
            from ~/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/common/navigation.rb:32:in `to'
            from (irb):4
            from ~/.rvm/rubies/ruby-2.4.0/bin/irb:11:in `<main>'
    irb(main):005:0> exit

最终,我想使用 Capybara 运行可以在我的设置中运行的系统测试(开发机器 = 操作系统 = Linux Ubuntu 的虚拟机,通过 PuTTY 远程访问)。

我找到了一种让它发挥作用的方法。

为此,我放弃了 Chrome 及其 Selenium 驱动程序,转而使用 PhantomJS 和 poltergeist。

PhantomJS 是一个无头浏览器(= 无 GUI)。效果很好。这是我的步骤(Rails 5.1):

  1. 将 gem 'poltergeist' 添加到您的 Gemfile 中,并注释掉 gem 'selenium-webdriver' (后者是 chrome 需要的,我们不会使用它):

    #gem 'selenium-webdriver'
    gem 'poltergeist'
    
  2. Run bundle update

  3. 添加 poltergeist 驱动程序配置(在文件中application_system_test_case.rb),注释掉 chrome 驱动配置:

    $ cat test/application_system_test_case.rb
    
    require "test_helper"
    
    require "capybara/poltergeist"
    Capybara.javascript_driver = :poltergeist      
    
    class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
      # driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
      driven_by :poltergeist
    end
    
  4. 下载“PhantomJS”无头浏览器,并将其放在 PATH 中的目录中:

    $ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
    $ tar -xjvf phantomjs-1.9.8-linux-x86_64.tar.bz2
    $ sudo cp phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/bin
    $ sudo chmod +x /usr/local/bin/phantomjs
    
  5. 您已准备就绪,可以运行系统测试了。例如:

    $ rake test TEST=test/system/posts_test.rb
    Run options: --seed 38196
    
    # Running:
    
    Puma starting in single mode...
    * Version 3.8.2 (ruby 2.4.0-p0), codename: Sassy Salamander
    * Min threads: 0, max threads: 1
    * Environment: test
    * Listening on tcp://0.0.0.0:44265
    Use Ctrl-C to stop
    You're running an old version of PhantomJS, update to >= 2.1.1 for a better experience.
    .
    
    Finished in 1.366478s, 0.7318 runs/s, 0.7318 assertions/s.
    
    1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
    $ 
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Net::ReadTimeout: Net::ReadTimeout 和 Selenium::WebDriver::Error::UnknownError: 未知错误:Chrome 无法在 Rails 5.1.beta 系统测试上启动 的相关文章

  • 强参数不起作用

    使用 Ruby 1 9 3 Rails 3 2 13 Strong parameters 0 2 1 我遵循了教程和railscasts中的每一个指示 但我无法让strong parameters工作 这应该是非常简单的事情 但我看不出错误
  • Ruby on Rails 中的三重连接

    我对 Ruby on Rails 中的关联有疑问 应用程序中有项目 用户 角色和组 项目属于一个有用户的组 一个用户可以属于多个不同的组 但只能在该组中拥有一个特定的角色 例如 在一个组中 用户是项目所有者 但在另一个组中 他是作家 使用
  • Mongoid - 同一外域的两个域的逆

    我试图让以下 Mongoid 关系发挥作用 但每个团队的游戏字段都是一个空数组 这不是一个有效的关系模型吗 我是否需要分开比赛 即主场比赛和客场比赛 class Team include Mongoid Document has many
  • 在 Rails 6 上定义 Secret_key_base 的正确方法是什么?

    正确的定义方式是什么secret key base既然我们已经有了每个环境的凭据 就可以在 Rails 6 上使用了吗 我的环境有变量SECRET KEY BASE但 Rails 并没有接受它 我尝试定义secret key base in
  • 自动测试无限循环

    我在 Rails 项目中使用自动测试时遇到了一个问题 即当测试失败时 即 我修改了测试文件并且自动测试自动运行测试 自动测试会不断尝试运行测试 当然每次都会失败 因为文件尚未被修改 而不是等到文件再次保存 当咆哮通知打开时 当我试图修复代码
  • 从 url 导入 CSV Errno::ENAMETOOLONG: 文件名太长

    我正在尝试从 url 导入 CSV 文件 但我得到了Errno ENAMETOOLONG file name too long 我按如下方式处理该文件 require open uri url http de65 grepolis com
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • Rails 注释分段错误

    有一些问题围绕着这个问题 但没有什么真正能满足我的需求 After I bundle install下面列出了我的 Gemfile 我运行annotate并出现以下错误 Users nickcoelius rvm gems ruby 1 8
  • 为什么 mongrel 没有在 Rails 3.2.rc 中启动?

    启动 mongrel 的 GEMFILE gem rails 3 1 0 gem mongrel gt 1 2 0 pre2 启动 WEBrick 的 GEMFILE 不是杂种 gem rails 3 2 0 rc2 gem mongrel
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • 为什么“捆绑”会在我的开发机器上安装生产 gem?

    Gemfile 说 gem sqlite3 groups gt development test gem mysql2 group gt production 然而当我打字时bundle install在我的开发机器上安装了所有 gem 我
  • 将 Rails 变量传递给液体可以在控制台中工作,但不在视图中

    我想将哈希传递给渲染方法 当我这样做时 在我的控制台中一切正常 object Object find params id hash object object to liquid template Liquid Template parse
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • Rubymine 6 更新/刷新 Rails 项目中可用的方法和路径?

    这是一个例子 假设我更新路线resources foo这给我带来了一些新的道路 例如 new foo session当我开始在 ERB 视图中输入路径时 我希望它向我显示 建议自动完成与路径匹配的名称 当我输入 new foo 我会得到所有
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • Rails、REST 架构和 HTML 5:带有预检请求的跨域请求

    在致力于使我们的网站 HTML 5 友好的项目时 我们渴望采用跨域请求的新方法 不再通过隐藏的 iframe 发布 使用访问控制 http www w3 org TR access control 根据规范 我们开始设置一些测试来验证各种浏
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • (Rails) Assert_Select 的烦人警告

    有谁知道如何让assert select在rake测试期间不输出所有那些讨厌的html警告 你知道 就像这样的东西 ignoring attempt to close body with div opened at byte 1036 li

随机推荐