Capybara 1.1.4 - > 2.1.0升级导致Poltergeist" ObsoleteNode"错误

时间:2013-11-19 00:06:08

标签: rspec capybara phantomjs poltergeist

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

今天我尝试将Capybara升级到2.1.0&恶作剧者到1.4.1。大多数测试都有效,但js-enabled测试中的一堆page.find()元素会在.click上返回以下错误:

  

Capybara :: Poltergeist :: ObsoleteNode:您正在尝试的元素   与之交互不是DOM的一部分,也不是当前的   在页面上可见(可能显示:无设置)。这有可能   元素已被另一个元素替换,您打算进行交互   与新元素。如果是这样,你需要做一个新的“发现”   获得对新元素的引用。

奇怪的是:

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

BUT

  • page.find('#my-element')。单击返回上面的'ObsoleteNode'错误。

有没有人见过这个?我花了几个小时来完成我能想到的每一个疯狂的理论,没有任何东西可以获得点击的元素。 (旁注:“#my-element”只是一个例子。有许多不同的元素有很多不同的ID,但是没有.click)

任何想法都赞赏。

2 个答案:

答案 0 :(得分:4)

other answer对我不起作用。我使用了select_option

page.find(:css, "#province").find("option[value='Adana']").select_option

答案 1 :(得分:1)

我替换了找到该元素并使用click_on方法点击它,这对我有帮助。

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

这有帮助。