Мой метод .click работает только иногда, но иногда выдает ошибку - PullRequest
0 голосов
/ 25 апреля 2019

Я использую 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 Ответ

1 голос
/ 25 апреля 2019

Сообщение об ошибке, которое вы получаете, самоочевидно, другой элемент находится над элементом, на который вы пытаетесь щелкнуть. Из показанного селектора другого элемента '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')
    

Если вы используете последнюю версию Capybara, то, скорее всего, это будет номер 2, потому что последние версии будут пытаться повторно щелкнуть, когда клики заблокированы. Для более старых версий Capybara это может быть либо.

...