簡體   English   中英

期望的黃瓜水豚硒競爭狀況(全部())

[英]Cucumber Capybara Selenium race condition with expect(all())

我正在使用Rails 4應用程序。 在應用程序中,有一個具有模式形式的頁面,我嘗試對其行為進行如下測試:

  1. 點擊鏈接以打開模式,
  2. 單擊鏈接以通過JS添加<li>表單
  3. 輸入一些字段數據,通過JS提交
  4. 查看是否存在填充的表單項
  5. 單擊鏈接以通過JS添加另一個<li>表單
  6. 輸入更多字段數據,通過JS提交
  7. 查看是否存在填充的表單項
  8. 確認正確數量的<li>元素

我的web_step用於計算<li>元素的數量,使用的是Expect expect(all()) RSpec期望,如下所示:

Then(/^I should see the number of items equals "(.*?)"$/) do |number_of_ items |
    expect(all(:xpath, xpath_items).length).to eq(number_of_ items.to_i)
end

xpath_items正在正確收集元素。

問題

我的黃瓜測試間歇性失敗。 我認為Capybara在JS在DOM中更改它們之前正在尋找<li>元素進行計數(並且失敗)。 我認為expect(all())是罪魁禍首,但不確定重構或使其始終如一地工作的最佳方法。

修復失敗

我試圖通過幾種方法來解決這種競爭狀況,包括(1)增加Capybara.default_wait_time = 120 ;(2)將sleep(10)添加到web_steps(我認為是一種反模式);(3)在其中包裝web_step功能page.document.synchronize ,如“ 如何在 page.document.synchronize 中完全使用同步”中所示

我知道wait_until方法已從水豚中刪除,如下所示

堆棧:鐵軌4.0.3,黃瓜1.5.15,水豚2.2.1,硒webdriver 2.41.0,angular.js,jquery,引導程序。 FWIW…我的機器是Retina MacBook Pro i7,非常快。

任何想法表示贊賞。 謝謝!

Capybara提供選項(:count,:minimum,:maxium,:between)來指定要等待多少個元素。 假設您使用的是最新版本的Capybara,則現在可以在all版本中使用all

通過指定:count ,您可以告訴all方法等待特定數量的項目出現。 可以這樣添加到您的步驟中:

Then(/^I should see the number of items equals "(.*?)"$/) do |number_of_ items|
  expect(all(:xpath, xpath_items, count: number_of_ items.to_i).length).to eq(number_of_ items.to_i)
end

但是,這對我來說似乎有點難以理解。 我建議切換到使用have_selector ,它確實支持這些選項。 這樣,您可以簡化以下步驟:

Then(/^I should see the number of items equals "(.*?)"$/) do |number_of_ items|
  expect(page).to have_selector(:xpath, xpath_items, count: number_of_ items.to_i)
end

暫無
暫無

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

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