我通常可以使用HtmlUnit填写表单并将其提交给服务器。细
不幸的是,我不知道如何根据我在表单上设置的值来填写刷新到服务器的特定表单。这个表单似乎刷新到服务器,因为在为字段设置值时会触发一些javascript ...
举一个简单的例子,我有一个包含2个字段的表单,下拉列表,比如说国家和地区:当我从字段Country选择一个值时,页面会自动刷新到服务器(javascript)并显示与字段区域相同的表单更新了可能的值,取决于字段Country的先前选择。
这是一个在线测试页面,其中包含我正在讨论的表单: http://web1.ciemme-service.it/html-unit.nsf/form?OpenForm
我想做的是: - 使用我必须填写的表单加载页面(工作) - 为字段国家/地区设置值(工作) - 等待该页面刷新到服务器(通过javascript自动完成...) - 为字段Region设置一个值 - 提交表格
感谢您提供的任何帮助/提示。
答案 0 :(得分:3)
我想我找到了解决方案:实际上我必须将WebClient对象视为真正的Web浏览器!
设置Country字段的值后,我等待几秒钟才能进行刷新(javascript),然后从webClient对象(刷新的页面!)获取当前的HtmlPage并继续处理新页面(set Regione字段的值+单击提交按钮):
以下是一个例子:
final HtmlSelect text_nazione = form.getSelectByName("nazione");
text_nazione.setSelectedAttribute("italy", true);
// now onchange event triggered and round-trip to server
wc.waitForBackgroundJavaScript(3000);
currentPage= (HtmlPage) wc.getCurrentWindow().getEnclosedPage();
form = currentPage.getFormByName("_form");
final HtmlSelect text_regione= form.getSelectByName("regione");
text_regione.setSelectedAttribute("I2", true);
tmlButtonInput button = form.getElementById("invia");
currentPage = (HtmlPage) button.click();
希望它有所帮助! 正在进行更多测试...; - )
答案 1 :(得分:1)
您可能需要查看此page,其中显示了如何等待ajax响应
另见this question类似主题