SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情

Javaで簡単にUIテストを書けるSelenideを使おう~Selenideの概要とテストの保守性を上げるPage Objectパターンの紹介

  • X ポスト
  • このエントリーをはてなブックマークに追加

手順[3]

シナリオ実装

 これで本来行いたいテストを記述するための下準備ができました。ここからテストコードを記述していきます。

 画面要素の取得や振る舞いなどはすべてPage Objectに押し込めたので、テストコードは純粋にシナリオに注力することが可能となります。

 今回書くテストシナリオとしては、いわゆる正常系の、すべての画面を通って登録完了まで行うものを作っていきます。シナリオは以下のようなものになります。

  1. ブラウザを起動し入力画面を開く。
  2. 入力画面で予約登録内容を入力し「次へ」ボタンを押下し確認画面へ遷移する。
  3. 確認画面で入力した内容通りかを確認、「確定」ボタンを押下し完了画面へ遷移する。
  4. 完了画面でエラーが表示されていないことを確認する。

 それでは順にシナリオを実装していきましょう。

Selenideの初期化

 Selenideを使う際、Selenideに対してどのブラウザを使うか、またブラウザ毎に必要となるWebDriver実装の場所を知らせる必要があります。今回はブラウザとしてFirefoxを使うので、以下のように記述します。

        Configuration.browser = WebDriverRunner.GECKO;
        System.setProperty("webdriver.gecko.driver","C:/PATH/TO/geckodriver.exe")

 1行目でWebDriver実装(ここではFirefoxなのですが、WebDriverの名前はGecko)を選択し、2行目でその実装の場所を指定します。2行目の部分は実際にgeckodriver.exeをおいたパスを記述します。

 この設定はマルチブラウザテストなどでない限り通常は変更しないものなので、以下のようにテストクラスの初期化時に一度だけ実行されるようにします。

    @Before
    public void before(){
        Configuration.browser = WebDriverRunner.GECKO;
        System.setProperty("webdriver.gecko.driver","C:/PATH/TO/geckodriver.exe");
    }

ブラウザを起動して入力画面を開く

 シナリオの最初にブラウザを起動し、最初の入力画面を開きます。

 手動で行う場合はブラウザアプリケーションを起動し、ナビゲーションバーにURLを入力して遷移しますが、ここではSelenideにブラウザを起動させURL入力をさせます。

 ブラウザを開きURLを入力するにはcom.codeborne.selenide.Selenide#open(String, Class<T>)を呼び出します。第一引数にURL、第二引数にそのURLに対応したPageObjectのClassを指定します。

 URLはhttp://example.selenium.jp/reserveApp/、入力画面に対応するPage ObjectはInputPageなので以下のようになります。

Java
        InputPage inputPage = open("http://example.selenium.jp/reserveApp/", InputPage.class);

入力画面で予約登録内容を入力し「次へ」ボタンを押下し確認画面へ遷移する。

 入力画面での予約登録内容の入力と「次へ」ボタンの押下処理ですが、これらはPage Objectで振る舞いを定義済みなので、単純に呼び出すだけですみます。

 ここではいったん以下の内容で入力するものとします。

  • 2017年10月1日から2泊
  • 朝食あり
  • プランは選択しない
  • 名前は「東京太郎」

 入力とボタン押下処理を実際にコードとして書くと、以下のようになります。

Java
        inputPage.setReserveYear("2017");
        inputPage.setReserveMonth("10");
        inputPage.setReserveDay("1");
        inputPage.setReserveTerm("2");
        inputPage.setBreakfastOn();
        inputPage.setGuestName("東京太郎");
        inputPage.setPlanA(false);
        inputPage.setPlanA(false);
        CheckInfoPage checkPage = inputPage.clickGotoNext();

確認画面で入力した内容通りかを確認、「確定」ボタンを押下し完了画面へ遷移する。

 確認画面では先の入力画面で入力した値と料金の計算結果の検証を行います。

 入力した値はそのまま出てくるようにし、料金は以下の計算金額でなければなりません。

  • 1泊7000円で2泊なので14000円
  • 2017/10/01 は日曜なので、休日料金の割り増しで +1750円
  • 朝食二回分で2000円
  • 合計で 14000 + 1750 + 2000 = 17750

 検証後は「確定」ボタンを押下して完了画面へ遷移します。

 これをコードで表現すると以下のようになります。

        assertThat(checkPage.getErrorCheckResult(), is(""));
        assertThat(checkPage.getDateFrom(), is("2017年10月1日"));
        assertThat(checkPage.getDateTo(), is("2017年10月3日"));
        assertThat(checkPage.getDaysCount(), is("2"));
        assertThat(checkPage.getHeadcount(), is("1"));
        assertThat(checkPage.getBfOrder(), is("あり"));
        assertThat(checkPage.getGuestName(), is("東京太郎"));
        assertThat(checkPage.getPrice(), is("17750"));
        FinalConfirmPage finalPage = checkPage.doCommit();

完了画面でエラーが表示されていないことを確認する。

 最後に完了画面でエラーがないことを確認します。

 エラーの有無はエラーメッセージが表示されるエリアに文字列が何もないこととします。

 コードで表現すると以下のようになります。

        assertThat(finalPage.getErrorCheckResult(), is(""));

 これでテストシナリオは完成です。

 テストシナリオ全体では以下のようなコードになります。

package com.example.selenide;

import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.WebDriverRunner;
import com.example.selenide.page.CheckInfoPage;
import com.example.selenide.page.FinalConfirmPage;
import com.example.selenide.page.InputPage;
import org.junit.Before;
import org.junit.Test;

import static com.codeborne.selenide.Selenide.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;

/**
 -Unit test for simple App.
 */
public class SampleTest {

    @Before
    public void before(){
        Configuration.browser = WebDriverRunner.GECKO;
        System.setProperty("webdriver.gecko.driver","C:/PATH/TO/geckodriver.exe");
    }

    @Test
    public void 正常系確認() {
        InputPage inputPage = open("http://example.selenium.jp/reserveApp/", InputPage.class);
        inputPage.setReserveYear("2017");
        inputPage.setReserveMonth("10");
        inputPage.setReserveDay("1");
        inputPage.setReserveTerm("2");
        inputPage.setBreakfastOn();
        inputPage.setGuestName("東京太郎");
        inputPage.setPlanA(false);
        inputPage.setPlanA(false);
        CheckInfoPage checkPage = inputPage.clickGotoNext();
        assertThat(checkPage.getErrorCheckResult(), is(""));
        assertThat(checkPage.getDateFrom(), is("2017年10月1日"));
        assertThat(checkPage.getDateTo(), is("2017年10月3日"));
        assertThat(checkPage.getDaysCount(), is("2"));
        assertThat(checkPage.getHeadcount(), is("1"));
        assertThat(checkPage.getBfOrder(), is("あり"));
        assertThat(checkPage.getGuestName(), is("東京太郎"));
        assertThat(checkPage.getPrice(), is("17750"));
        FinalConfirmPage finalPage = checkPage.doCommit();
        assertThat(finalPage.getErrorCheckResult(), is(""));
    }
}

次のページ
ソースコード

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情連載記事一覧

もっと読む

この記事の著者

島根 義和(シマネ ヨシカズ)

 肌年齢17歳、外見年齢37歳のごくごく普通のプログラマ。 25歳の頃、デスマーチを経験したことでソフトウェア工学に目覚め、開発プロセス、品質管理等を独学で勉強し続ける。がなかなか実践できない。 好きな技術書はスティーブ・マコネルの「ラピッドデベロップメント」。 2012年よりJaSST Tokyo実行委員。 スラド: id:shimashima Twitter: @shimashima35 GitHub: https://github.com/shimashima35/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10335 2017/08/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング