0

사용자 로그인 기능 테스트를 위해 아래의 스펙 코드가 있습니다.헤드리스 크롬이 장착 된 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

은 하나가 표시하는 것이 기다리지 않습니다 실행할 때 일치하는 링크가 존재하지 않는 경우 의미 대기/재 시도 동작을하지 않습니다. 또한 visible: :any을 전달하면 click을 호출하는 요소를 찾지 못합니다. 보이지 않는 요소를 클릭 할 수 없으므로 오류가 발생할 수 있기 때문에 의미가 없습니다. 당신이 실제로 수행해야하는 경우/대기 먼저 트리거됩니다 다음

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

minimum: 1 옵션을 사용한다 first (당신이 일에 이르기까지없는 범위 수있는 여러 일치하는 링크)을 사용하려면/Capybara.default_max_wait_time초까지 재 시도 일치하는 링크가 페이지에 표시됩니다. 이것은 firstall을 사용하는 이유 중 하나입니다. 실제로는 상호 작용할 요소를 찾을 때 잘못된 선택 사항이 있습니다 (페이지를 안정된 상태로 유지하기 위해 이전 찾기를 수행하지 않았거나 개수를 사용하지 않는 경우). 대기/재 시도 동작을 트리거하는 옵션). 실제로 페이지에 일치하는 링크가 두 개 이상없는 경우 그냥 사용해야합니다.

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

이렇게하면 이해가됩니다. 다시 시도해 볼 것입니다. 답변 해주셔서 감사합니다. – Satendra

+0

이제이 오류가 발생합니다.'Capybara :: ExpectationNotMet : # 보이는 링크를 찾을 것으로 예상했으나 "Login"이 (가) 1 회 이상 일치하지 않았습니다. # /usr/local/bundle/gems/capybara-2.16.0/lib /capybara/node/finders.rb:268:in 'block in all'' – Satendra

+0

@Satendra 그러면 링크가 페이지에 없습니다 - 방문한 후에'page.html'이 무엇인지 확인하십시오. –