Использование HtmlUnit
Когда вашему проекту понадобятся функциональные тесты, обратите внимание на HtmlUnit. Он поддерживает javascript и его очень просто использовать. Вот небольшой пример:
Первым делом, добавляем зависимость в проект:
<dependencies> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.1</version> </dependency> </dependencies>
Чтобы начать тестирование сайта, необходимо создать клиент и загрузить нужную страницу:
WebClient webClient = new WebClient();
HtmlPage page = (HtmlPage) webClient.getPage("http://google.com");
Теперь мы можем получить доступ к форме, заполнить ее поля и отправить запрос:
HtmlForm form = page.getFormByName("f");
HtmlInput query = form.getInputByName("q");
query.setValueAttribute("java");
HtmlSubmitInput submit = (HtmlSubmitInput) form.getInputByName("btnG");
page = (HtmlPage) submit.click();
Затем мы можем проверить результаты выполнения запроса, например с помощью XPATH:
List<Node> elements = (List<Node>) page.getByXPath("//li[@class = 'g']");
for (Node li : elements) {
System.out.println(li.getTextContent());
}
Представленный код получает результаты поиска по запросу “java”.
Есть другой способ получить такие результаты. Можно не заполнять форму, а сразу отправить запрос. Это подходит в тех случаях, когда нет необходимости тестировать саму форму. В результате экономится время, которое затрачивается на загрузку первой страницы:
WebRequestSettings wrs = new WebRequestSettings(new URL("http://google.com/search"));
wrs.setSubmitMethod(SubmitMethod.GET);
LinkedList<NameValuePair> params = new LinkedList<NameValuePair>();
params.add(new NameValuePair("hl","en"));
params.add(new NameValuePair("q","java"));
params.add(new NameValuePair("btnG","Google Search"));
wrs.setRequestParameters(params);
HtmlPage page = (HtmlPage) webClient.getPage(wrs);

28 Фев 2009 в 2:12 пп
хочу добавить что при первом вызове будет исключение из-за неправльного JS кода у гугла. Поэтому вместо query.setValueAttribute(”java”); надо писать query.type(”java”);
02 Март 2009 в 11:47 дп
Спасибо за замечание! А чтобы вообще не было проблем с js, можно пользоваться selenium. Только это гораздо медленнее.
06 Окт 2009 в 12:22 пп
Спасибо за пример.
Интересует можно ли как-то htmlunit из php заюзать.
Может изучали данный вопрос?
11 Март 2010 в 11:54 дп
//HtmlForm form = page.getFormByName(”f”);
а,если:
поля name нет (
как быть?