4

我有一个运行 Poltergeist 1.0.2 的 Capybara 1.1.4 测试套件,在 PhantomJS 1.9.2 上运行

今天我尝试将 Capybara 升级到 2.1.0 和 Poltergeist 到 1.4.1。大多数测试都有效,但是启用 js 的测试中的一堆 page.find() 元素在 .click 时返回以下错误:

Capybara::Poltergeist::ObsoleteNode:您尝试与之交互的元素不是 DOM 的一部分,或者当前在页面上不可见(可能显示:未设置)。该元素可能已被另一个元素替换,并且您打算与新元素进行交互。如果是这样,您需要进行新的“查找”以获取对新元素的引用。

奇怪的是:

  • page.find('#my-element') 找到元素就好了
  • page.find('#my-element').value 返回正确的值

  • page.find('#my-element').click 返回上述“ObsoleteNode”错误。

有没有人见过这个?我花了几个小时研究我能想到的每一个疯狂的理论,但没有什么能让元素点击。(旁注:“#my-element”只是一个例子。有许多不同的元素具有许多不同的 ID,它们无法 .click)

任何想法表示赞赏。

4

2 回答 2

4

另一个答案对我不起作用。我使用了 select_option

page.find(:css, "#province").find("option[value='Adana']").select_option
于 2014-09-30T22:54:46.907 回答
1

我只用 click_on 方法替换了 find 元素并单击它,这对我有帮助。

click_on('My link')

代替

find('a', text: 'My link').click

但我有另一个问题。我有 2 个链接。我通过替换解决了

all('a', text: 'My link').last.click

使用上下文:

  within('#overlay') do
    click_on "My link"
  end

这有帮助。

于 2013-12-19T14:59:05.447 回答