超簡単に書けて可読性も抜群!UIテスト自動化はSelenideを使おう!!

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組み合わせで実装すればよい。

  1. Open the page
  2. $(element).doAction()
  3. $(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への苦手意識というか、めんどくさいなぁと思う気持ちがなくなりました。書いていて楽しい!