4

Enthusiastisch über das Backen von Capybara in die neue Version von Rails (5.1) cf http://weblog.rubyonrails.org/2017/2/23/Rails-5-1-beta1/Net :: ReadTimeout: Net :: ReadTimeout und Selen :: WebDriver :: Fehler :: Unbekannter Fehler: unbekannter Fehler: Chrome konnte nicht auf Rails gestartet werden 5.1.beta System Test

Ich habe jedoch ein Problem festgestellt. Hier sind meine Schritte. Jeder Hinweis willkommen.

Nagelneu installieren von:

  • Linux Ubuntu Desktop 16.10 (VM auf Hyper-V), mit Chrome installiert und läuft gut;
  • Ruby 2.4;
  • Schienen 5.1 & bgr;

1.- Erstellen Sie eine einfache App:

~$ 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.- Führen Sie den Test

~/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.- OK, lassen Sie uns gehen Sie wie in der Fehlermesssage vorgeschlagen (installieren 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.- OK. Wiederholungstest ...

 ~/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$ 

Nicht OK!

Ein Hinweis auf die Ursache von 'Net :: Readtimeout: Net :: Readtimeout' Fehlermeldung gegeben wird, wenn rails -v in der App dir läuft, geben Selen :: WebDriver :: Fehler :: Unknown: unbekannt Fehler: Chrome ist fehlgeschlagen zu starten:

~/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$ 

Dies ist, was ich bekomme, wenn die Selen WebDriver direkt von Ruby Aufruf:

~/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$ 

Jede Hilfe apprec iated, Dankes-

Varus

Update:

das Problem gefunden, für Selen-Treiber in der Protokolldatei suchen. Um dies zu erreichen, habe ich die folgenden in IRB getippt:

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) 

Tailing die Protokolldatei genagelt es: Chrom würde nicht starten:

~/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$ 

Am Ende fand ich heraus, dass Chrom Aufruf remote über PuTTY hat nicht funktioniert (das war, was ich den ganzen Weg gemacht habe), obwohl das gleiche direkt auf der VM (in Terminal Server) funktioniert.

Auf PuTTY:

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

Die direkt an der VM hat es funktioniert.

Leider ist mein Glück kurzlebig war, wie ich in einen weiteren Fehler lief, aber das ist eine andere Geschichte:

  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 
+0

Welche Version von Chrome haben Sie installiert? –

+0

Hallo Thomas, hier ist es: 'Google Chrome 57.0.2987.110' –

Antwort

0

Letztlich wollte ich Systemtests mit Capybara auszuführen, die in meine Einstellungen funktionieren würde (Entwicklungsmaschine = VM mit OS = Linux Ubuntu, auf das über PuTTY per Fernzugriff zugegriffen wird).

Ich habe einen Weg gefunden, damit es funktioniert.

Dafür habe ich Chrome und seinen Selenium Treiber, für PhantomJS und Poltergeist.

PhantomJS ist ein kopfloser Browser (= keine GUI). Es funktioniert großartig. Hier sind meine Schritte (Rails 5.1):

  1. hinzufügen Juwel 'Poltergeist' auf Ihrem Gemfile und kommentieren Sie gem 'Selen-WebDriver' (die später benötigt wird, um von Chrom, die wir nicht verwenden):

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

  3. hinzufügen Poltergeist Treiber config (in Datei application_system_test_case.rb), die Config-Chrom-Treiber Kommentierung aus:

    $ 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. herunterladen Maden Browsers PhamtomJS ', und legen Sie es auf ein Verzeichnis im 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. Sie sind alle gesetzt, und bereit, einen Systemtest auszuführen. Zum Beispiel:

    $ 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 
    $ 
    
Verwandte Themen