Htmlunit: заполнение формы, которая обновляется автоматически - PullRequest
3 голосов
/ 26 августа 2011

Обычно я могу заполнить форму с помощью HtmlUnit и отправить ее на сервер. Хорошо.

UnfortunateIy Я не знаю, как заполнить конкретную форму, которая обновляется на сервере, в зависимости от значений, которые я установил в форме. Эта форма обновляется на сервере из-за некоторого JavaScript, который запускается, когда для поля установлено значение ...

Чтобы сделать простой пример, у меня есть форма с 2 полями, раскрывающимися списками, скажем, Страна и Регион: когда я выбираю значение из поля Страна, страница автоматически обновляется на сервер (javascript) и показывает та же форма с полем Region, обновленным с возможными значениями, зависящими от предыдущего выбора для поля Country.

Вот онлайн тестовая страница с формой, о которой я говорю: http://web1.ciemme -service.it / html-unit.nsf / форма? OpenForm

Я хотел бы сделать следующее: - загрузить страницу с формой, которую я должен заполнить (работает) - установить значение для поля Страна (работает) - подождите, пока страница обновится на сервере (это делается с помощью javascript автоматически ...) - установить значение для поля Регион - отправьте форму

Спасибо за любую помощь / подсказки, которые вы можете дать мне.

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Полагаю, я нашел решение: на самом деле я должен рассматривать объект WebClient как настоящий веб-браузер!

После того, как я установил значение для поля Страна, я жду несколько секунд, пока произойдет обновление (javascript), затем получаю текущий HtmlPage из объекта webClient (обновленная страница!) И продолжаю работу над новой страницей (установите значение для поля 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();

Надеюсь, это поможет! Продолжается дальнейшее тестирование ...; -)

1 голос
/ 26 августа 2011

Вы можете взглянуть на эту страницу , которая показывает, как вы можете ждать ответа ajax

см. Также этот вопрос по аналогичной теме

...