HtmlUnit получить кнопку отправки из формы по значению?

<input type="submit" class="submit-button" style="white-space:normal" value="hello world!">

Вот как работает кнопка отправки HTML, в HTMLUNIT я уже получил форму, используя список:

HtmlForm form = this.page.getForms().get(0);

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

Я пытался сделать это:

HtmlButton button = (HtmlButton) page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']");

Но когда он загружается, я получаю эту ошибку:

Exception in thread "Thread-1" java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlButton
    at Web.getButton(Web.java:78)
    at java.lang.Thread.run(Unknown Source)

Как я могу получить кнопку без идентификатора или значения?

3 ответа

Решение

Просто используйте метод getInputByValue(String) в форме:

HtmlForm form = this.page.getForms().get(0);
System.out.println(form.getInputByValue("Hello world!").asXml());

Использовать этот

HtmlElement input = form.getElementsByAttribute("input", "value", "hello world!").get(0);

чтобы получить элемент и щелкнуть элемент

page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']"); возвращает List,

HtmlButton button = (HtmlButton) page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']"); попробую разыграть это List к HtmlButton который всегда будет вызывать исключение.

Если вы уверены, что ровно один элемент всегда будет соответствовать выражению XPath, будет безопасно просто выбрать первый (и единственный) элемент списка:

HtmlButton button = (HtmlButton) page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']").get(0);

Однако на вашем месте я бы добавил проверки на несуществующий элемент и если список содержит более одного элемента.

Другие вопросы по тегам