0

HtmlUnit を使用してフォームを送信しようとしています。フォームに 2 つの選択があります。最初の選択を選択したときに、関数 ajax を呼び出して 2 番目の選択をロードし、私のコードに従ってください:

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 呼び出しが完了したときに変更されるページ上の何かを見つける必要があります。上記の質問から、1 つの選択を変更すると 2 番目の選択ボックスが表示されると想定しています。

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 に答える