如何使用ruby web-watir phantomjs在新页面中提交表单

时间:2014-08-25 03:20:15

标签: ruby phantomjs watir-webdriver

我正在使用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()
}

1 个答案:

答案 0 :(得分:1)

如果提交每个表单会将您带到另一个页面,那么预计您将获得任何以前保存的元素的StaleElementReferenceError。这就是Selenium-WebDriver的设计方式,因此如果您切换到Chrome或Firefox,问题仍然存在。

鉴于您正在遍历每个表单,通过索引很容易找到每个表单:

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

上述代码采用了直接提交表单的相同方法。但是,如果可能,应单击提交按钮。直接提交表单可能会绕过与单击提交按钮的操作相关的重要代码。