如何使用水豚和 ruby 重新加载页面直到出现按钮

how to reload page until a button appears using capybara and ruby

我想在一个动作之后单击一个按钮,但直到我重新加载页面时按钮才会出现。有时需要一些时间才能显示按钮,我不得不重新加载页面不止一次。我不想设置静态延迟。那么有没有一种方法可以使用水豚和 ruby:

来实现以下目标
  do
    page.evaluate_script("window.location.reload()")
  until a button appears

reoload until page.has_selector? returns true, check this:

while true 
  page.evaluate_script 'window.location.reload()'
  if page.has_selector?("css_selector")
    break
  end
end

虽然 Mesut 的代码应该可以正常工作,但我会将其重写为:

Timeout.timeout(Capybara.default_max_wait_time) do
  loop do
    page.evaluate_script("window.location.reload()")
    break if page.has_selector?(...)
  end
end

如果等待时间超过 Capybara 设置中定义的超时时间,这将确保失败。例如,当 CI 服务器上的规格为 运行 时,它会很有用。

请注意,它仍然会导致某些驱动程序出现意外行为,因为它可能会在某些脚本正在评估时中断。