Обновление Capybara 1.1.4 -> 2.1.0 вызывает ошибки Poltergeist "ObsoleteNode"

У меня есть работающий набор тестов Capybara 1.1.4 под управлением Poltergeist 1.0.2, работающий поверх PhantomJS 1.9.2

Сегодня я попытался обновить Capybara до 2.1.0 и Poltergeist до 1.4.1. Большинство тестов работают, но группа элементов page.find() в js-включенных тестах возвращает следующую ошибку при.click:

Capybara:: Poltergeist:: ObsoleteNode: элемент, с которым вы пытаетесь взаимодействовать, либо не является частью DOM, либо в данный момент не отображается на странице (возможно, отображение: ни один не задан). Возможно, элемент был заменен другим элементом, и вы хотели взаимодействовать с новым элементом. Если это так, вам нужно сделать новый поиск, чтобы получить ссылку на новый элемент.

Странная вещь:

  • page.find ('# my-element') находит элемент очень хорошо
  • page.find ('# my-element'). value возвращает правильное значение

НО

  • page.find ('# my-element'). click возвращает вышеуказанную ошибку 'ObsoleteNode'.

Кто-нибудь видел это раньше? Я потратил несколько часов на изучение каждой сумасшедшей теории, о которой только мог придумать, и ничто не заставит элементы щелкать. (Примечание: "#my-element" - просто пример. Есть много разных элементов с разными идентификаторами, которые не могут.click)

Любые идеи приветствуются.

2 ответа

Решение

Другой ответ не работал для меня. Я использовал select_option

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

Я заменил find элемент и нажал на него методом 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

И это помогло.

Другие вопросы по тегам