Rails,水豚 - 水豚有时找不到添加的 html 元素

Rails, Capybara - capybara cannot find added html elements sometimes

我下面有一个函数

  def fill_in_sources_details
    click_button 'New Source'
    assert_text 'Sources'
    fill_in 'text', :with => @source.text
    fill_in 'url', :with => @source.url
  end

单击 New Source 后,页面中添加了新字段。有时测试会失败,因为测试没有等待添加新元素,因此无法找到 Capybara 的新字段。我尝试添加 assert_text 'Sources' 这很明显,但有时仍然会失败。知道如何解决吗?

这里可能会发生很多事情,其中​​一些取决于您使用的驱动程序和驱动程序版本。

  1. 您实际上没有匹配的字段 'text' - 这不太可能,因为它有时会起作用。

  2. 初始 click_button 'New Source' 缺少实际按钮。如果按钮在页面上显示动画(滑入、放大等),则可能会发生这种情况,具体取决于您使用的驱动程序。您可以通过在 click_button 之前放置 sleep 5 来判断是否发生了这种情况。如果这解决了问题,那么您应该考虑在测试模式下禁用动画。它将加快您的测试并使它们更可靠。

  3. click_button 正在发生,但字段显示在页面上的时间太长(慢 ajax 请求等)。将 sleep 5 放在 click_button 之后应该可以诊断出这一点,但可能需要超过 5 秒的时间。 assert_text 'Sources' 是一个很好的诊断尝试,只要文本 'Sources' 仅在输入可见时出现在页面上,但该文本似乎太通用了(它可能在当前页面上)已经)。您始终可以将 wait 选项传递给 fill_in,这将使其等待元素出现的时间更长

    fill_in 'text', :with => @source.text, 等待: 20

  4. 您的应用中出现间歇性错误,导致字段无法显示。通过捕获 ElementNotFound、暂停应用程序并查看浏览器中的错误来诊断

    开始 fill_in 'text', :with => @source.text, 等待:20 营救 Capybara::ElementNotFound binding.pry # byebug 等 - 无论您使用什么调试 结束