我的.click方法有时只能工作,然后在其他时候给出错误

时间:2019-04-25 14:57:13

标签: html ruby capybara

我正在使用Capybara抓取网站,并且其中一项操作是单击一个按钮。有时水豚单击它,而其他时候则给出此错误

/Users/maximushan/.rvm/gems/ruby-2.4.2/gems/poltergeist-1.18.1/lib/capybara/poltergeist/node.rb:25:in `rescue in command': Firing a click at co-ordinates [632.5, 546.5] failed. Poltergeist detected another element with CSS selector 'html body.ab_test_B.not_sem.not_from_partner.not_mobile.is_desktop.f-topbar-fixed.lazy-load div.autocomplete-suggestions div.autocomplete-suggestion' at this position. It may be overlapping the element you are trying to interact with. If you don't care about overlapping elements, try using node.trigger('click'). (Capybara::Poltergeist::MouseEventFailed)

我尝试过的两种单击方法是

.find(:button, 'js-emu-submit').click
.click_on 'js-emu-submit'

我不太确定为什么有时会工作,但有时会中断。

1 个答案:

答案 0 :(得分:1)

您收到的错误消息非常不言自明,另一个元素位于您要单击的元素上方。从另一个元素'html body.ab_test_B.not_sem.not_from_partner.not_mobile.is_desktop.f-topbar-fixed.lazy-load div.autocomplete-suggestions div.autocomplete-suggestion'所示的选择器中,我们可以认为这是您要在其中填充信息的自动填充框中的建议。这意味着有两种可能性

  1. 如果有足够的时间,该框将消失,然后保留您要单击的元素。在这种情况下,请检查该框是否消失

    expect(page).not_to have_css('div.autocomplete-suggestion') # RSpec
    # page.assert_no_css('div.autocomplete-suggestion') # minitest
    page.click_button('js_emu_submit')
    
  2. 您正在自动提示框中填写数据,该框中显示了多个匹配选项,在这种情况下,下拉列表不会消失。在这种情况下,您需要执行用户在这种情况下可能要做的任何事情(例如,单击匹配的自动完成建议),例如

    page.find('div.autocomplete-suggestion', exact_text: 'whatever you want to select').click
    expect(page).not_to have_css('div.autocomplete-suggestion')
    page.click_button('js_emu_submit')
    

如果您使用的是最新版本的水豚,则很有可能是2号,因为当点击被阻止时,最新版本会尝试重新点击。对于较早版本的水豚,可以是。