我正在尝试使用HtmlUnit提交表单,在我的表单中有两个选择,当我选择第一个选择时,他调用一个函数ajax并加载第二个选择,按照我的代码:
HtmlPage page5 = anchor.click();
HtmlForm form = page.getFormByName("form1");
HtmlSelect state = form.getSelectByName("ddlMarca");
state.setSelectedAttribute(state.getOptionByValue("56"), true);
state.fireEvent(Event.TYPE_CHANGE);
HtmlSelect city = form.getSelectByName("ddlModelo");
for (HtmlOption option : city.getOptions()) {
System.out.println("city : "+option.asText()+" valor: " +option.getValueAttribute());
}
我正在使用方法fireEvent来调用事件更改,但是不起作用,我怎么能做这个事件工作?
答案 0 :(得分:1)
它可能正常工作,但您没有给浏览器时间进行ajax调用,获取响应并编辑dom。如果页面在触发更改事件后进行了ajax调用,请尝试让页面等待片刻再重新检查。
我没有测试下面的代码,所以我不能肯定这会解决你的问题,但我已经用这种技术来解决类似的问题。
当完成ajax调用以使其工作时,您必须在页面上找到更改的内容。从上面的问题我假设改变一个选择填充第二个选择框。
state.fireEvent(Event.TYPE_CHANGE);
//try 20 times to wait .5 second each for filling the page.
for (int i = 0; i < 20; i++) {
if (condition_to_happen_after_js_execution) {
break;
}
synchronized (page) {
page.wait(500);
}
}
HtmlSelect city = form.getSelectByName("ddlModelo");
for (HtmlOption option : city.getOptions()) {
System.out.println("city : "+option.asText()+" valor: " +option.getValueAttribute());
}
示例来自:http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork