XPathを使ってみる
うーむ。難しいですね。とりあえず以下のように感じになりました。add.htmlでformが2つある場合に、何故に「.//form[2]」とやってダメなのかが分からない。。。orz
public void testAddXpathPage() throws Exception { final WebClient webClient = new WebClient(); final URL url = new URL("http://localhost:8080/s2jsf-example/"); final HtmlPage hogePage = (HtmlPage)webClient.getPage(url); assertEquals( "Home", hogePage.getTitleText() ); XPath xpath = new HtmlUnitXPath(".//a[text()='Add']"); final HtmlAnchor anchor = (HtmlAnchor)xpath.selectSingleNode(hogePage); final HtmlPage addPage = (HtmlPage)anchor.click(); assertEquals( "Add", addPage.getTitleText() ); String pageText = addPage.asText(); assertTrue(pageText.contains("足し算")); xpath = new HtmlUnitXPath(".//form[@id='add']"); final HtmlForm form = (HtmlForm)xpath.selectSingleNode(addPage); xpath = new HtmlUnitXPath(".//input[1]"); final HtmlTextInput textFieldArg1 = (HtmlTextInput)xpath.selectSingleNode(form); textFieldArg1.setValueAttribute("1"); xpath = new HtmlUnitXPath(".//input[2]"); final HtmlTextInput textFieldArg2 = (HtmlTextInput)xpath.selectSingleNode(form); textFieldArg2.setValueAttribute("2"); xpath = new HtmlUnitXPath(".//input[@type='submit']"); final HtmlSubmitInput button = (HtmlSubmitInput)xpath.selectSingleNode(form); final HtmlPage addResultPage = (HtmlPage)button.click(); String page2Text = addResultPage.asText(); assertTrue(page2Text.contains("1 + 2 = 3")); }