HtmlUnit的问题

时间:2013-01-29 20:28:09

标签: htmlunit

我正在尝试使用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来调用事件更改,但是不起作用,我怎么能做这个事件工作?

1 个答案:

答案 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