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