Der Intersult HtmlClient ist ein sehr einfacher virtueller Browser.
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.
<dependency> <groupId>com.intersult</groupId> <artifactId>html</artifactId> <version>1.1</version> </dependency>
HtmlClient client = new HtmlClient(new UrlClient());
Page page = client.begin(new MutableURL("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);
| HTML-Node | Java-Klasse |
|---|---|
| - | Page |
| FORM | Form |
| INPUT | Input |
| INPUT[@type = 'submit'] | Submit |
| BUTTON | Submit |
| A | Link |
| INPUT[@type = 'radio'] | SELECT | Checked |
document.evaluate("//TD[text() = 'Some Table Cell']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
<dependency> <groupId>com.intersult</groupId> <artifactId>testing-tomcat7</artifactId> <version>1.1-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> <groupId>com.intersult</groupId> <artifactId>jsf-workspace</artifactId> <version>1.2-SNAPSHOT</version> <scope>test</scope> </dependency>
Hinweis: com.intersult:testing-tomcat7 enthält automatisch das Testing-Framework com.intersult:testing. com.intersult:jsf-workspace sorgt dafür, dass JSF-Komponenten geladen werden können, die noch nicht in eigene JAR-Bibliotheken eingepackt sind.
Ein Test kann dann so aussehen:
public class JsfTest {
@Test
public void test() throws Exception {
HtmlClient client = new HtmlClient();
Page page = client.begin(new MutableURL("unit://localhost/faces/index.xhtml", getProtocol()), null, false);
Assert.assertNotNull(page);
Assert.assertEquals("Hello World!", page.getElement("//H1").getText());
Assert.assertEquals("Text-Tag", page.getElement("//DIV[@id = 'form:test-div']").getText());
}
private ServletUnitProtocol getProtocol() {
ServletUnitProtocol protocol = new TomcatUnitProtocol();
protocol.setWebXmlFile("src/test/webapp/WEB-INF/web.xml");
return protocol;
}
}