Использование HtmlUnit, как щелкнуть (сформировать) кнопку, которая не является кнопкой

Я часто сталкиваюсь с кнопками, особенно в формах входа, которые кажутся серией вложенных div с span в качестве последнего элемента.

Они редко являются частью формы, и я предполагаю, что они контролируются Jvascript.

Можно ли нажимать на эти кнопки, чтобы добиться эффекта действия кнопки, например, войти на сайт и вернуться на новую страницу?

Я попытался дождаться загрузки javascript после загрузки страницы таким образом:

HtmlPage page = webClient.getPage(someUrl);
webClient.waitForBackgroundJavaScript(6000);

затем нажмите на divs и span и ничего не происходит.

Я использую HtmlUnit 2.36, и я знаю, что есть некоторые проблемы с оценкой Javascript.


person Gavin    schedule 06.09.2019    source источник


Ответы (1)


Обычно вы можете сделать что-то подобное

webClient.getOptions().setThrowExceptionOnScriptError(false);


HtmlPage page = webClient.getPage(someUrl);
webClient.waitForBackgroundJavaScript(6000);

// locate your clickable element
....

buttonLike.click();
// wait until the js has done the job
webClient.waitForBackgroundJavaScript(20000);

// now get the current page content based on the current window; using
// HtmlPage myPage = (HtmlPage) buttonLike.click();
// does not work in all cases because the page content might be 
// async replaced by javascript
HtmlPage myPage = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
person RBRi    schedule 06.09.2019
comment
Как ни странно, getPage возвращается довольно быстро, поэтому я не подумал о продлении ожидания Javascript. Я обязательно попробую. Спасибо за ваши ответы на все мои вопросы HtmlUnit. - person Gavin; 07.09.2019
comment
waitForBack.. не вариант, который вы должны вызывать каждый раз, когда вам нравится ждать. - person RBRi; 07.09.2019
comment
учитывая, что часто вызывается waitForBavkgroundJavaScript после click, возможно, было бы неплохо иметь новый метод рядом с click что-то вроде clickThenWaitForBackgroundJavaScript(timeOutInMillis) Просто мысль - person Gavin; 10.09.2019