Selenium(Java)で指定したHTMLのタグの属性をアサートするメソッド作ってみた。
"//div[@id=main]/form/a" の"href"が正しいか調べたい時があったけど、Seleniumでどうすりゃいいかわかんねぇよ・゚・(つД`)・゚・ ウェ―ン
ってわけで自分で作ってみた。
テストケースと'SeleneseTestCaseを継承した基本クラス'の間あたりで継承して↓こんな感じにすれば動く。
SeleneseTestCase ↑ Selenese(setUp/tearDown等をOverrideするトコ) ↑ [[ ココ ]] ↑ Seleniumテストケース
ただ、しっかりテストしてないのでAt your own riskで。
「こーすりゃいい」等等、ご指摘・ご注意お願いします m(_ _)m
XML <div id="main"> <form> <a href="http://bluh.com" /> </form> </div> Java assertAttributeValue("//div[@id=main]/form/a","href", "http://bluh.com");
外部参照ライブラリ
・JDOM(HTMLの要素取得用。ここから)
・JTidyの最新版(Maven用のSNAPSHOT8.0。ココから)
・JAXEN(XPath用。ココから)
あともちろんSelenium RC。
/** * 指定したパスの要素が期待した値か判別 * @param path 要素のXPath(ex: //div/span[6]/a[2] ) * @param name 属性の名(ex: type, name, id... and etc.) * @param value 属性の値 */ public void assertAttributeValue(String path, String name, String value) { String expected = expectedValue(path, name); boolean condition = expected.equals(value); assertTrue(null, condition); } /** * ページから特定のタグの属性の値を取得 * @param path 要素のXPath(ex: //div/span[6]/a[2] ) * @param name 属性名(ex: type, name, id... and etc.) * @return 属性の値 */ @SuppressWarnings("unchecked") private String expectedValue(String path, String name) { String expected = ""; //HTMLをSeleniumインスタンスから取得しセット Document jdom = tidyHTML(selenium.getHtmlSource()); //ルート要素 Element root = jdom.getRootElement(); //名前空間 Namespace ns = root.getNamespace(); try { //XPathのインスタンス。 XPath xpath = XPath.newInstance(path); //XPathで要素を取得 List<Element> elements = xpath.selectNodes(jdom); Element element = elements.get(0); //属性の値をセット expected = element.getAttributeValue(name, ns); }catch (JDOMException e) { System.out.println(e); } //取得した属性の値を返す return expected; } /** * HTMLを正規のXMLへ変換 * @param html HTMLのソース * @return JDOMのDocument */ private Document tidyHTML(String html) { org.w3c.dom.Document w3c = null; Document jdom = null; //HTMLのサニタイジング(?) Tidy tidy = new Tidy(); tidy.setQuiet(true); tidy.setInputEncoding("utf-8"); tidy.setOutputEncoding("utf-8"); tidy.setShowErrors(0); tidy.setShowWarnings(false); tidy.setForceOutput(true); try { //W3C形式のDocument w3c = tidy.parseDOM(new ByteArrayInputStream(html.getBytes("utf-8")), null); }catch (UnsupportedEncodingException e) { System.out.println(e); } //W3C形式のDocumentからJDOMのDocumentへ。 DOMBuilder builder = new DOMBuilder(); jdom = builder.build(w3c); //JDOMのDocumentを返す。 return jdom; }
最初、JTidyでWell-formedなXML作った後にdom4jでパースしてたんだけど、使いづらくてやめたww
やっぱJDOMかわいいよ、JDOM(*´д`*)ハァハァ
さすがゆとり、dom4jも使えない( ̄∀ ̄;)
あ、ゆとり教育が悪いんじゃなくて自分がアホ(ry