2016-10-10 5 views
0

私はさまざまなブラウザでTCを実行する環境を設定しようとしています。しかし、現在のところTCはChromeブラウザで正常に実行されますが、FireFoxブラウザは開かれていますが、FF、Opera、SafariブラウザでTCを実行しようとしても何も起こりません(テストシナリオは実行されません)。 すべてのブラウザでTCを正常に実行できるように設定を調整するにはどうすればよいですか? TCを並行して実行する方法もありますか?Capybara + Rspec:マルチブラウザTCの実行方法を設定する

require 'test/unit' 
require 'selenium-webdriver' 
require 'capybara' 
require 'rspec' 
require "rails/all" 
require 'capybara/rspec' 
require "page-object" 
require 'rspec/expectations' 
require 'securerandom' 
require '../Test_helpers/login_helper' 
require 'capybara-screenshot/rspec' 
require 'launchy' 

RSpec.configure do |config| 

    config.include LoginHelper 
    config.include RSpec::Matchers 
    config.include Capybara::DSL 

    environment = 'firefox' 

    if environment =='chrome' 
    Selenium::WebDriver::Chrome.driver_path = '../Resources/chromedriver.exe' 
    Capybara.default_driver = :chrome 
    Capybara.register_driver :selenium do |app| 
     options = { 
      :js_errors => false, 
      :timeout => 360, 
      :debug => false, 
      :inspector => false, 
     } 
     Capybara::Selenium::Driver.new(app, :browser => :chrome) 
    end 
    elsif environment =='firefox' 
    Capybara.default_driver = :firefox 
    Capybara.register_driver :selenium do |app| 
     options = { 
      :js_errors => true, 
      :timeout => 360, 
      :debug => false, 
      :inspector => false, 
     } 
     Capybara::Selenium::Driver.new(app, :browser => :firefox) 
    end 
    elsif environment == 'safari' 
    Capybara.default_driver = :safari 
    Capybara.register_driver :safari do |app| 
     options = { 
      :js_errors => false, 
      :timeout => 360, 
      :debug => false, 
      :inspector => false, 
     } 
     Capybara::Selenium::Driver.new(app, :browser => :safari) 
    end 
    elsif environment == 'opera' 
    Capybara.default_driver = :opera 
    Capybara.register_driver :opera do |app| 
     options = { 
      :js_errors => false, 
      :timeout => 360, 
      :debug => false, 
      :inspector => false, 
     } 
     Capybara::Selenium::Driver.new(app, :browser => :opera) 
    end 
    elsif 
    Capybara.default_driver = :poltergeist 
    Capybara.register_driver :poltergeist do |app| 
     options = { 
      :js_errors => false, 
      :timeout => 360, 
      :debug => false, 
      :phantomjs_options => ['--load-images=no', '--disk-cache=false'], 
      :inspector => false, 
     } 
     Capybara::Poltergeist::Driver.new(app, options) 
    end 
    end 

    Capybara.save_path = "../Reports" # path where screenshots are saved 

    config.after { |example_group| CapybaraScreenshot.save_and_open_page_path if example_group.exception } 

    Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example| 
    "screenshot_#{example.description.gsub(' ', '-').gsub(/^.*\/spec\//, '')}" 
    end 

end 

Capybara.default_max_wait_time = 15 

答えて

0

あなたは多くのブラウザを通じて、すべてのテストを実行する方法を探してここに渡してしまった場合、私は(作業!)これを書いたのは、(過度におしゃべり)スニペットトーマス・ウォルポールの受け入れ答えに基づいて:

Rspec.configure do |conf| 

    Capybara.register_driver :chrome do |mode| 
     Capybara::Selenium::Driver.new mode, :browser => :remote, :desired_capabilities => :chrome 
    end 

    Capybara.register_driver :firefox do |mode| 
     Capybara::Selenium::Driver.new mode, :browser => :remote, :desired_capabilities => :firefox 
    end 

    ## Here we politely ask every example to run twice, for each browser we want 
    conf.around do |example| 
    puts '~> ' + example.metadata[:example_group][:full_description] 
    # avoid looping over Capybara.drivers as it will also contain "selenium" generic driver and "rack_test" basic (js-less) browser 
    [:chrome, :firefox].each do |browser| 
     Capybara.current_driver = browser 
     puts "~~> #{example.description} @ #{browser}" 
     example.run 
    end 
    end 

    Capybara.default_driver = :chrome 
end 

出力終了のようなものなもの:明らか

~> The contact page 
~~> loads @ chrome 
~~> loads @ firefox 
. 

Finished in 20.9 seconds (files took 2.69 seconds to load) 
1 example, 0 failures 

全てputs行は削除/コメントアウトすることができ、サンプル目的のためだけにそこにあります:)

~~>行の後に、上記のブラウザが開き、この例が実行されます。
例から:js => trueを削除するには注意が必要です。そうしないと、Capybaraは代わりにデフォルトのjavascript_driverに対して強制実行します。

0

あなたが登録しているドライバーに渡しているオプションは、ポルターガイストのためにのみ有効です。 はここに私のrails_helper.rbファイルです。大きなif/elseではなく、すべてのドライバを登録して、必要なドライバを使用するだけで済みます。

RSpec.configure do |config| 

    config.include LoginHelper # You probably want to only include this for feature tests 
    config.include RSpec::Matchers # not needed if you use the standard capybara rspec setup by including capybara/rspec 
    config.include Capybara::DSL # not needed if you use the standard capybara rspec setup by including capybara/rspec 

    end 

    Capybara.save_path = "../Reports" # path where screenshots are saved 

    config.after { |example_group| CapybaraScreenshot.save_and_open_page_path if example_group.exception } 

    Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example| 
    "screenshot_#{example.description.gsub(' ', '-').gsub(/^.*\/spec\//, '')}" 
    end 

end 

    Selenium::WebDriver::Chrome.driver_path = '../Resources/chromedriver.exe' 
    Capybara.register_driver :selenium_chrome do |app| 
     Capybara::Selenium::Driver.new(app, :browser => :chrome) 
    end 

    Capybara.register_driver :selenium_firefox do |app| 
     Capybara::Selenium::Driver.new(app, :browser => :firefox) 
    end 

    Capybara.register_driver :selenium_safari do |app| 
     Capybara::Selenium::Driver.new(app, :browser => :safari) 
    end 

    Capybara.register_driver :selenium_opera do |app| 
     Capybara::Selenium::Driver.new(app, :browser => :opera) 
    end 

    Capybara.register_driver :poltergeist do |app| 
     options = { 
      :js_errors => false, 
      :timeout => 360, 
      :debug => false, 
      :phantomjs_options => ['--load-images=no', '--disk-cache=false'], 
      :inspector => false, 
     } 
     Capybara::Poltergeist::Driver.new(app, options) 
    end 

その後、あなたのテストを実行するために使用するドライバにCapybara.default_driverおよび/または(あなたには、いくつかのrack_testとテストやJSを必要とするタグのテストを実行するか否かに応じて)Capybara.javascript_driverのいずれかを設定します。複数のブラウザに対して、すべてのテストを実行するには

Capybara.default_driver = :selenium_chrome 

それが複数回実行し、ちょうど各実行のために(例えば、環境変数に基づいて)別のドライバを設定するには、お使いのCIシステムを構成することが普通です。それらをすべて1回実行する必要がある場合は、RSpecがすべての共有サンプルをテストし、共有サンプルを含むテストブロックを設定することができますが、前のブロックに異なるドライバを設定します。あなたはparallel_tests宝石を見ることができ、並列テストのために

からhttps://github.com/grosser/parallel_tests

+0

ありがとうございました!しかし、1つの問題があります。あなたのコードをコピーし、ブラウザ 'Capybara.default_driver =:selenium_firefox'を定義しました。また、私は次のようにテストをタグ付けしました: 'それは成功しました。'、driver::selenium_firefox do '。 FFブラウザを開くだけですが、テストは実行されません。私は間違っている? –

+0

@SerhiiKaihorodovあなたはFF> 47.0.1のselenium-webdriver 2.53.4を使用しています。このバージョンのselenium-webdriverは、FF 47.0.1または45ESRで使用する必要があります。 geckodriverと一緒に使用すると新しいFFで動作するベータ3バージョンがありますが、まだ完全には機能していない多数の機能があります。 Capybaras readme - https://github.com/jnicklas/capybara –

+0

の上部を正確に見てください!どうもありがとうございました! –

関連する問題