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);
Однако на вашем месте я бы добавил проверки на несуществующий элемент и если список содержит более одного элемента.