capybara:X中的神秘元素不再出现在DOM'

时间:2018-02-22 12:59:10

标签: capybara-webkit

我已经编写了使用webkit和firefox驱动程序测试的黄瓜测试场景。在firefox中,测试全部通过,但是使用webkit,其中一个失败并出现错误

  Element at 40 no longer present in the DOM (Capybara::Webkit::NodeNotAttachedError)
  /home/r/project/share/support/actions.rb:64:in `block (2 levels) in follow_link_in_new_tab'
 /home/r/project/duplo/share/support/actions.rb:10:in `with_scope'................

这发生在执行由测试步骤触发的例程期间'当我按照" Linkname"。奇怪的是,大多数时候这段代码都很完美,但在一种情况下,我得到了这个'不再出现错误'。

例程执行此操作:

res = find( 'a', text: text, visible: true)
if ((res[:target] || '') == '_blank')
    @win = window_opened_by { res.click }
else
    res.click
end

我发现如果我将其更改为

find( 'a', text: text, visible: true).click

消息消失,方案通过测试。谁能帮助我理解这里可能出现的问题。为什么在将查找结果分配给变量时失败,为什么它只在少数情况下失败?

我使用ruby 2.4.0和capybara-webkit 1.2.0

谢谢,Ruud

1 个答案:

答案 0 :(得分:0)

您没有准确指出哪一行产生错误(哪一行是第64行),但是错误表明您在从页面中删除元素之后仍然使用元素,或者通过JS删除元素或者正在加载新页面。

此外,实际上不需要visible: true选项,因为这通常是visible选项的默认值(除非你改变了它,这在测试软件时是个糟糕的主意,而不是如果只是刮网站就不好了)

另外 - 2014年7月发布了capybara-webkit 1.2.0 - 你真的想要更新到最新版本,如果你正在测试任何甚至是现代的东西,并且可能更新你的红宝石至少是最新的2.4.x发布。