Der Intersult HtmlClient ist ein sehr einfacher virtueller Browser.

Anwendung#

Ziel ist der Zugriff auf Web-Seiten durch Programme. Dies ist interessant im Rahmen von Datengewinnung, Ablaufautomatisierungen und Software- und Systemtests.

Beim Verwenden des HtmlClient werden immer Page-Objekte zurückgegeben. Die erste Page erhält man beim Aufruf der Methode begin, anschließend wieder bei navigate- oder submit-Aufrufen.

Die Page enthält den geparsten HTML-Inhalt, darin kann auf alle HTML-Elemente zugegriffen werden. Entweder über die Seitenhierarchie des DOM oder über XPath-Ausdrücke. Einige Elemente wie Form oder Submit haben spezielle Java-Implementierungen, um einfacher weitere Operationen durchführen zu können.

Einbinden und Download#

Der HtmlClient kann aus dem Intersult Maven Repository bezogen werden:
	<dependency>
		<groupId>com.intersult</groupId>
		<artifactId>html</artifactId>
		<version>1.0-SNAPSHOT</version>
	</dependency>

Beispiel#

	HtmlClient client = new HtmlClient(new UrlClient());
	Page page = client.begin(new URL("http://localhost/"), null, false);
	Assert.assertNotNull(page);
	Form form = (Form)page.getElement("//FORM[@id = 'header-login']");
	Assert.assertNotNull(form);
	Input username = (Input)form.getElement(".//INPUT[@name = 'header-login:username']");
	Assert.assertNotNull(username);
	username.setValue("test");
	Input password = (Input)form.getElement(".//INPUT[@name = 'header-login:password']");
	Assert.assertNotNull(password);
	password.setValue("test");
	Submit submit = (Submit)form.getElement(".//INPUT[@type = 'submit']");
	Page home = submit.submit(true);

Elementtypen#

Wenn man eine Page oder ein anderes Element hält, kann man mit der Methode getElement() einen XPath-Ausdruck angeben, um ein anderes Element auf der Seite oder untergeordnetes Element zu finden. Grundsätzlich sind diese vom Java-Typ Element mit Außnahme von einigen Ableitungen davon:

HTML-NodeJava-Klasse
-Page
FORMForm
INPUTInput
INPUT@type = 'submit'Submit
BUTTONSubmit
ALink

Javascript-Test#

XPath-Ausdrücke erfordern etwas geschick. Wenn man die Entwicklerkonsole des Browsers geöffnet hat, kann man per Console Javascript-Befehle ausführen. Damit kann man auch die XPath-Ausdrücke testen:
document.evaluate("//TD[text() = 'Some Table Cell']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue