Как отправить форму на новой странице с помощью 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
В приведенном выше коде используется тот же подход, что и при прямой отправке формы. Однако, если возможно, нажмите кнопку отправки. Непосредственная отправка формы может обойти важный код, связанный с действием нажатия кнопки отправки.