SeleniumのラッパーであるSelenideを使用してテストコードを書いたので、使い方と所感をまとめました。
What is Selenide?
Selenideの公式ページによると…
Selenium WebDriver is a great tool, but it’s not a tool for testing. It’s a tool for browser manipulation.
And Selenide is a tool for automated testing (build on top of Selenium WebDriver).
Seleniumはブラウザ操作のためのツールだが、Selenideは自動テストのためのツールであるとのことです。
参考link
SleniumとSelenideどう違うの?って言う部分は下記参照。
– http://qiita.com/kazuki-ma/items/d6432fc41c82538a61bd
基本的な使い方と機能については下記。
– http://qiita.com/EichiSanden/items/ea857b46cbf5435b0c3b
使ってみての所感
WebDriverを直接いじらなくても良いのでテストの実装に専念できる。
Selenide ライブラリを使う場合,テスト終了時に WebDriver が起動したウィンドウが自動的に閉じられます.
作成された WebDriver はスレッド毎に管理されていますので,テストを並列実行した場合でも,それぞれ別のウィンドウが自動的に作成され,テストは各ブラウザプロセスに対して行われます.
Selenideクラスのstaticインポートによって可読性が高いソースコードが書ける
以下をstaticインポートすることによって、ソースコードが非常にすっきりする。
com.codeborne.selenide.Selectors
com.codeborne.selenide.Selenide
com.codeborne.selenide.Condition.ExplainedCondition
Three Simple Things(やるべきことが明快)
Three simple thigsを掲げており、すべてはコレの繰り返しor組み合わせで実装すればよい。
- Open the page
- $(element).doAction()
- $(element).check(condition)
open("/login"); // ページを開いて $("#submit").click(); // 要素の選択+アクション $(".message").shouldHave(text("Hello")); // 結果の確認
何が返ってくるのかわかりやすい
たとえば、要素の選択でつかう、$()と$$()だと…
SelenideElement elm1 = $("#btn");
→要素1つ(複数の場合は先頭)$(".forward", 1).click();
→第二引数にintを渡すと先頭以外も指定できるElementsCollection elms1 = $$(".btn");
→要素の集合
要素の指定が簡単
- 基本的に
$
もしくは、$$
で要素の指定を行う。 - 最も使うのは
$(java.lang.String cssSelector)
で、指定が難しい場合$(org.openqa.selenium.By seleniumSelector)
で指定できる。 - また、
org.openqa.selenium.By
を生成するSelectors
クラスがあり、これらを使用することで、可読性をあげることができる。 - $(“親要素”).$(“子要素”)と範囲を絞ることで指定がすることができる。
- 例:
$(byId("vacantflightlist")).$("tr", 1).$(byName("select"), 1).click();
→ xPathと比べて、書人も読む人も分かり易い これ重要!
アサーションメソッドが用意されている
$("div").shouldHave(text("Hello world!"));
等々。
デフォルトで4秒間100ミリ秒間隔でリトライするので明示的にwaitを書く必要がない。
※遷移してないのにしたと認識してしまう場合があるので、ところどころ下記で対応した。$(".dep_date_td").waitUntil(not(text(baseDate)), 2000);
shoud~~
に渡すCondition
は多数用意されている。- text(String)
- value(String)
- visible
- selected
- enable
- empty
- exist
- etc..
テストに失敗すると、自動で証跡(png&html)が保存される。
screenshot("fileName");
で撮ることも可能
総括
Seleniumをそのまま使うのと比べてかなり書きやすく、可読性も高いのが特徴でした。PageObjectPatternと組み合わせることで更に可読性を上げることができます。
SelenideのおかげでSeleniumへの苦手意識というか、めんどくさいなぁと思う気持ちがなくなりました。書いていて楽しい!