[英]Gitlab CI Config for Rails System Tests with Selenium and Headless Chrome
[英]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
秒,以使匹配的鏈接出現在頁面上。 這是原因之一使用first
和all
尋找元素,以實際互動(除非你已經做了以前發現的東西,保證頁面處於穩定狀態,或使用任何的計數選項時,一般都是壞的選擇觸發等待/重試行為)。 如果頁面上實際上沒有多個匹配鏈接,那么您應該使用
before(:each) do
visit "/"
click_link('Login') # same as find(:link, 'Login').click
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.