Htmlunit:填写自动刷新的表单

我通常可以使用HtmlUnit填写表单并将其提交给服务器。 精细。

不幸的是,我不知道如何根据我在表单上设置的值来填写刷新到服务器的特定表单。 这个表单似乎刷新到服务器,因为在为字段设置值时会触发一些javascript …

举一个简单的例子,我有一个包含2个字段的表单,下拉列表,比如说Country和Region:当我从字段Country选择一个值时,页面自动刷新到服务器(javascript)并显示相同的表单字段区域已更新,可能的值取决于字段Country的先前选择。

这是一个在线测试页面,其中包含我正在讨论的表单: http : //web1.ciemme-service.it/html-unit.nsf/form?OpenForm

我想做的是: – 使用我必须填写的表单加载页面(工作) – 为字段设置值国家(工作) – 等待该页面刷新到服务器(由javascript自动完成… ) – 为字段Region设置一个值 – 提交表单

感谢您提供的任何帮助/提示。

我想我找到了解决方案:实际上我必须将WebClient对象想象成一个真正的Web浏览器!

在我设置了Country字段的值之后,我等待几秒钟才能进行刷新(javascript),然后我从webClient对象(刷新的页面!)获取当前的HtmlPage并继续处理新页面(设置一个值为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(); 

希望能帮助到你! 正在进行更多测试…… 😉

您可能需要查看此页面 ,其中显示了如何等待ajax响应

在类似主题上也看到这个问题