Poltergeist/Capybara 测试间歇性找不到 CSS

Poltergeist/Capybara test unable to find CSS intermittently

我正在使用 Capybara 和 Poltergeist,我无法让我的所有测试始终如一地通过。我有这个问题,尤其是日期选择器。它应该非常简单 - 用户点击输入,然后选择月份(第一张图片)。然后单击一个月,然后出现日期选择(第二张图片),其中选择了一个月中的一天。

现在,我的代码如下所示:

all(:css, 'input.from_date').last.click

expect(page).to have_css(".datepicker-months")
within(:css, '.datepicker-months') { find('.month', :text => 'Jun',  match: :first).click  }
expect(page).not_to have_css(".datepicker-months")

expect(page).to have_css(".datepicker-days")
within(:css, '.datepicker-days') { find('.day', :text => work[:start_date].stamp('31').to_i.to_s,  match: :first).click  } #.to_i.to_s used to remove leading zeros
page.assert_no_selector('.datepicker-days')

有时它会通过,但大多数时候它会说:

expected to find css ".datepicker-days" but there were no matches

expected not to find css ".datepicker-months", found 1 match: "« 2015 » JanFebMarAprMayJunJulAugSepOctNovDec"

如果我尝试通过调用 binding.pry 来调试它,我可以 运行 在控制台中逐步执行命令,它可以完美运行。我的超时设置足够了(我认为)。知道为什么此测试会间歇性地失败吗?

我的配置:

Capybara.javascript_driver = :poltergeist

Capybara.default_wait_time = 60
Capybara.register_driver :poltergeist do |app|

Capybara::Poltergeist::Driver.new(app, {
    timeout: 60,
    js_errors: false, 
    phantomjs_logger: File.open("log/phantomjs.log", "a")})
end

更新:

在过程中的每一步之后添加 sleep(0.5) 时,它每次都会通过。这是不好的做法,我应该能够在不这样做的情况下编写测试。 :/

每当我 运行 遇到这些不一致时,我都会尝试找到其他可以断言的东西,这样您就不必指望睡觉了。

如果有任何类型的动画 start/stop,您可以尝试针对它们进行断言。

您也可以尝试更具体地了解您当前的期望,因为您似乎可以毫不费力地点击找到的对象

expect(page).not_to have_css('.datepicker-months .month', :text => 'Jun')

如果其中任何一项让您更进一步,请告诉我们。