簡體   English   中英

使用無頭Chrome的GitLab CI中的Rspec測試失敗

[英]Rspec test failed in GitLab CI with Headless Chrome

我有以下用於測試用戶登錄功能的規范代碼。

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

在我的本地計算機上使用無頭鍍鉻可以正常工作。 這是spec_helper.rb中我的Capybara Capybara javascript_driver配置。

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 ,這是我得到的錯誤。

失敗/錯誤:首先(:link,“登錄”,可見:: any).click

NoMethodError:nil:NilClass的未定義方法'click'./ spec /features/ user_login_spec.rb :6:在/usr/local/bundle/gems/rspec-retry-0.5.6/lib中的'block(3 level)'中/rspec/retry.rb:115:在'運行中阻止'/usr/local/bundle/gems/rspec-retry-0.5.6/lib/rspec/retry.rb:104:在'loop'中/ usr / local /bundle/gems/rspec-retry-0.5.6/lib/rspec/retry.rb:104:在'運行'/usr/local/bundle/gems/rspec-retry-0.5.6/lib/rspec_ext/rspec_ext中。 rb:12:in'run_with_retry'

我發現此博客使用無頭鍍鉻,但無濟於事。

這是我正在使用的依賴項的版本。

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

默認情況下, first沒有等待/重試行為,這意味着,如果匹配的鏈接在運行時不存在,它就不會等待鏈接出現。 此外路過visible: :any找到一個元素,你再要調用click上沒有任何意義,因為你不能在不可見元素點擊,這樣會導致錯誤了。 如果你確實需要/想用first (多個匹配鏈接,你不能將范圍縮小到一個),那么你就應該使用

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

minimum: 1選項將首先觸發以等待/重試Capybara.default_max_wait_time秒,以使匹配的鏈接出現在頁面上。 這是原因之一使用firstall尋找元素,以實際互動(除非你已經做了以前發現的東西,保證頁面處於穩定狀態,或使用任何的計數選項時,一般都是壞的選擇觸發等待/重試行為)。 如果頁面上實際上沒有多個匹配鏈接,那么您應該使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM