Как отправить форму на новой странице с помощью ruby ​​web-watir phantomjs

Я использую веб-watir для вождения фантомов. Я пытаюсь отправить кучу форм (POST) на веб-странице. У меня есть все формы в коллекции. Когда я нажимаю кнопку отправки и browser.back(), Я получил Selenium::WebDriver::Error::StaleElementReferenceError, Я пытался с помощью form.submit() но та же самая проблема возвращения и получения StaleElementReferenceError, Я пытался отправить форму на другой странице (browser.execute_script( "window.open(page)" )) но я не думаю, что отправит мою форму (если форма была GET, это могло бы сработать). Я старался Net::HTTP.post_form() которая отделена от сессии phantomjs (не работает, мне нужно войти в систему).

У меня нет идей, кроме как найти элементы повсюду каждый раз, когда я возвращаюсь назад. Думаю, я мог бы заменить фантомы на Chrome или Firefox. Подскажите, есть ли способ отправить форму на новой странице phantomJS?

Вот некоторый код:

forms = browser.forms()
forms.each{ | form | 
  form.submit()

  browser.back()
}

1 ответ

Если отправка каждой формы приводит вас на другую страницу, то ожидается, что вы получите StaleElementReferenceError для любых ранее сохраненных элементов. Именно так был разработан Selenium-WebDriver, поэтому проблема останется, если вы переключитесь на Chrome или Firefox.

Учитывая, что вы перебираете каждую форму, было бы легко найти каждую форму по индексу:

browser.forms.length.times do |i|
  browser.form(index: i).submit 
  browser.back
end

В приведенном выше коде используется тот же подход, что и при прямой отправке формы. Однако, если возможно, нажмите кнопку отправки. Непосредственная отправка формы может обойти важный код, связанный с действием нажатия кнопки отправки.

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