ruby-on-rails – Net :: ReadTimeout:Net :: ReadTimeout和Sel
关于将Capybara烘焙到新版Rails(5.1)cf
http://weblog.rubyonrails.org/2017/2/23/Rails-5-1-beta1/中的热情
我遇到了一个问题.这是我的步骤.任何线索欢迎. 全新安装: > Linux Ubuntu Desktop 16.10(Hyper-V上的VM),Chrome安装并运行正常; 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$ 好的.重试测试…… ~/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 skips ~/railsapps/smoketestapp$ 不好! 在app dir中运行rails -v时给出了’Net :: ReadTimeout:Net :: ReadTimeout’错误消息的根本原因的线索,给出了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$ 任何帮助表示感谢,谢谢 瓦鲁斯 更新: 发现问题,查看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上(在终端服务器中)做同样的工作. 在PuTTY上: ~$google-chrome [3938:3938:0320/213941.129923:ERROR:browser_main_loop.cc(279)] Gtk: cannot open display: 然而,直接在VM上工作. 不幸的是,我的幸福是短暂的,因为我遇到了另一个错误,但这是另一个故事: 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,OS = Linux Ubuntu,通过PuTTY远程访问).
我找到了一种让它发挥作用的方法. 为此,我放弃了Chrome及其Selenium驱动程序,用于PhantomJS和恶作剧. PhantomJS是一个无头浏览器(=无GUI).它很棒.这是我的步骤(Rails 5.1): >将宝石’poltergeist’添加到您的Gemfile中,并注释掉gem’selenium-webdriver'(Chrome需要更晚,我们不会使用): #gem 'selenium-webdriver' gem 'poltergeist' >运行捆绑包更新 $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’无头浏览器,并将其放在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 errors,0 skips $ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |