我正在使用web-watir来驱动phantomjs。我想在网页上提交一堆表格(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。告诉我,有没有办法在新页面中提交表格phantomJS?
以下是一些代码:
forms = browser.forms()
forms.each{ | form |
form.submit()
browser.back()
}
答案 0 :(得分:1)
如果提交每个表单会将您带到另一个页面,那么预计您将获得任何以前保存的元素的StaleElementReferenceError。这就是Selenium-WebDriver的设计方式,因此如果您切换到Chrome或Firefox,问题仍然存在。
鉴于您正在遍历每个表单,通过索引很容易找到每个表单:
browser.forms.length.times do |i|
browser.form(index: i).submit
browser.back
end
上述代码采用了直接提交表单的相同方法。但是,如果可能,应单击提交按钮。直接提交表单可能会绕过与单击提交按钮的操作相关的重要代码。