0

我正在尝试使用 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 来调用事件更改,但不起作用,我该如何做这个事件?

4

1 回答 1

1

它可能正在工作,但您没有给浏览器时间进行 ajax 调用、获得响应和编辑 dom。如果页面在触发 change 事件后进行 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

于 2013-02-05T21:50:26.157 回答