こうすればテストしやすい、といったTipsをまとめる。
View(xhtml): JSFタグでは原則id属性をつける
例えば
<h:form>
ではなく
<h:form id="fooForm">
とする。これにより、表示されるページでは、各入力部品のidとして、
j_id123:name
のように動的に割り振られた親(Form)のIDで装飾されたものではなく、
fooForm:name
のように、固定される。
好みの問題と言えばそれまでだけど、Selenium RCで記述されたJavaテストコードで、ロケータは極力id指定にしたい。XPATHとかCSSではなく。そういう思想もあるので、idを振った方が都合がよい。
フォームのidの他に、今開発中のアプリでは、エンティティ一覧のテーブルを
<ui:repeat id="fooItem" var="foo" value="#{fooList}">
ってな具合にid(fooItem)をつけるようにしている。
をはじめとするRichFaces部品の操作への工夫
テキストボックスやチェックボックスなんかは、
selenium.type("id=fooForm:name", "jappy");
といった具合に楽に書けるのだけど、
Selenium IDEでケースをエクスポートすればいいじゃん、という考え方もあるけど、テストを実行する日がいつかはわからないので、「来月の末日を
そんなわけで、以下の案を考えた。
(1) RichCalendarのJavaScript APIをJavaから呼び出す。
できなくはなさそうな方法だけど、Javascriptの操作までテストしたくないかなと思い却下。
(2) enableManualInput属性をtrueにし、直接入力可能にする
アプリケーションとして、不正フォーマットの検証が余分に必要になる手間はあるけど、妥協できる範囲。テストが自動化できる(というより、テストコードが保守しやすくなる)メリットを考えれば十分お釣りがくる。