Rails,Capybara - capybara有时无法找到添加的html元素

时间:2017-05-15 11:06:49

标签: ruby-on-rails capybara

我有一个功能

  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 个答案:

答案 0 :(得分:0)

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

  1. 你实际上没有一个与'text'相匹配的字段 - 因为它有时会起作用,所以不太可能。

  2. 初始awk 'BEGIN {FS=OFS="\t"} {col[$1]; row[$2]; val[$2,$1]=$3} END {for(c in col) printf "%s", OFS c; print ""; for(r in row) {printf "%s", r; for(c in col) printf "%s", OFS val[r,c] print ""}}' file Category1 Category2 Category3 type1 + + + type2 - + - type3 + + - 缺少实际按钮。如果按钮动画显示在页面上(滑入,放大等),可能会发生这种情况,具体取决于您使用的驱动程序。您可以通过在click_button之前放置click_button 'New Source'来判断是否发生了这种情况。如果这样可以解决问题,那么您应该考虑在测试模式下禁用动画。它将加快您的测试速度并使其更可靠。

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

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

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

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