0

ユーザーログイン機能をテストするための仕様コードは以下のとおりです。ヘッドレスChrome搭載GitLab CIでRspecテストに失敗しました

feature "User login" do 
    context "using browser", :js => true do 
     before(:each) do 
      visit "/" 
      first(:link, "Login", visible: :any).click 
     end 
     scenario "with valid details" do 
      ... 
      # rest of code. 
     end 
    end 
end 

ヘッドレスクロムを使用しているローカルマシンで正常に動作しています。 Capybara javascript_driverの設定はspec_helper.rbになります。

Capybara.register_driver :headless_chrome do |app| 
    options = Selenium::WebDriver::Chrome::Options.new(
    args: %w[headless disable-gpu no-sandbox] 
) 
    Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) 
end 

Capybara.javascript_driver = :headless_chrome 

しかしgitlab-CIで作業していないが、以下の私が取得していますエラーです。

Failure/Error: first(:link, "Login", visible: :any).click

NoMethodError: undefined method 'click' for nil:NilClass ./spec/features/user_login_spec.rb:6:in 'block (3 levels) in ' /usr/local/bundle/gems/rspec-retry-0.5.6/lib/rspec/retry.rb:115:in 'block in run' /usr/local/bundle/gems/rspec-retry-0.5.6/lib/rspec/retry.rb:104:in 'loop' /usr/local/bundle/gems/rspec-retry-0.5.6/lib/rspec/retry.rb:104:in 'run' /usr/local/bundle/gems/rspec-retry-0.5.6/lib/rspec_ext/rspec_ext.rb:12:in 'run_with_retry'

私はヘッドレスクロムを使用するthis blogを見つけましたが、何も助けません。

ここに私が使用している依存関係のバージョンがあります。デフォルトfirstことで

google-chrome-stable (63.0.3239.108-1) 
chromedriver (2.34) 

答えて

0

は、それが1を表示することが待機しません実行時に一致するリンクが存在しない場合を意味待っ/再試行の挙動を、持っていません。さらにvisible: :anyを渡してclickを呼び出す予定の要素が見つからない場合は、目に見えない要素をクリックしてエラーを発生させることができないため、意味をなさない。あなたが実際に行う必要がある場合は/が待機する最初の引き金となるでしょう、あなたが

before(:each) do 
    visit "/" 
    first(:link, "Login", minimum: 1).click 
end 

minimum: 1オプションを使用する必要がありますfirst(つまり、あなたが1にダウンしない範囲することができ、複数のマッチングのリンクを)利用したい/ Capybara.default_max_wait_time秒まで再試行一致するリンクがページに表示されます。これは、firstallを使用している理由の1つです。一般に、 が実際にやりとりする要素を探しているときに間違っています(前の検索でページが安定していることを保証していないか、待機/再試行動作をトリガーするオプション)。実際にページに一致するリンクが2つ以上ない場合は、そのまま使用してください。

before(:each) do 
    visit "/" 
    click_link('Login') # same as find(:link, 'Login').click 
end 
+0

これは意味があります。私はあなたにお返しします。答えをありがとう。 – Satendra

+0

私はこのエラーを受け取りました。 'Capybara :: ExpectationNotMet: #少なくとも1回はログインしましたが、一致するものは見つかりませんでした #/usr/local/bundle/gems/capybara-2.16.0/lib /capybara/node/finders.rb:268:in 'block in all'' – Satendra

+0

@Satendraリンクがページにない - 訪問後に 'page.html'が何であるかを確認してください –

関連する問題