gpt4 book ai didi

ruby-on-rails - Net::ReadTimeout: Net::ReadTimeout 和 Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start on Rails 5.1.beta 系统测试

转载 作者:行者123 更新时间:2023-12-01 06:03:12 27 4
gpt4 key购买 nike

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

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

全新安装:

  • Linux Ubuntu Desktop 16.10(Hyper-V 上的虚拟机),安装了 Chrome 并且运行良好;
  • ruby 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$

    不好!

    运行 rails -v 时给出了有关“Net::ReadTimeout: Net::ReadTimeout”错误消息根本原因的线索在应用程序目录中,给出 Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start:
        ~/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$

    任何帮助表示赞赏,谢谢

    内翻

    更新:

    发现问题,查看 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 不起作用(这就是我一直在做的事情),尽管直接在 VM 上(在终端服务器中)做同样的事情有效 .

    在腻子上:
        ~$ 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 在我的设置中运行系统测试(开发机器 = 带有操作系统的 VM = Linux Ubuntu,通过 PuTTY 远程访问)。

    我找到了让它工作的方法。

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

    PhantomJS 是一个 headless 浏览器(= 没有 GUI)。它工作得很好。这是我的步骤(Rails 5.1):

  • 将 gem 'poltergeist' 添加到您的 Gemfile 中,并注释掉 gem 'selenium-webdriver' (后者是 chrome 需要的,我们不会使用):
    #gem 'selenium-webdriver'
    gem 'poltergeist'
  • 运行bundle update
  • 添加 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
  • 下载“PhamtomJS” headless 浏览器,并将其放在 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
  • 一切就绪,准备运行系统测试。例如:
    $ 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
    $
  • 关于ruby-on-rails - Net::ReadTimeout: Net::ReadTimeout 和 Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start on Rails 5.1.beta 系统测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42891801/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com