SHOEISHA iD

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

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

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

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

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

ソースコード

 全体のソースコード一式はGitHubで公開しています。ライセンスの範囲内でご自由にご利用ください。

拡張・修正のポイント

 実際にSelenideを使ってテストを書いたりメンテナンスをする際に起こるいくつかのこと、拡張修正のポイントについて解説します。

ページデザイン変更時の対応

 一番よくあることが、テストを実装した後に画面デザインが変更され、要素の位置なども変わることです。

 IDで取得している部分はIDが変更されない限りはそれまで通りで動きますが、それ以外については大抵修正が必要となります。

 このとき、今回のようにPage Objectを使用しているとテストシナリオは修正する必要がなく、Page Objectのうち要素取得のみを記述したAbstract Classのみの修正で対応できます。

 シナリオ、振る舞い、要素取得を分離したことの強みがここで出てきます。

複数画面で共通している部分の対応

 今回の例ではありませんでしたが、常にメニューが表示されている場合にはPage Objectを使用しても重複が発生してしまいます。共通なものはどこか一か所で定義したいですよね。共通の親クラスを作りそこに定義するという方法もありますが、Javaでは多重継承は許されていないため、共通要素が複数あり、それが画面によってあったり無かったりということだと対応しきれません。

 このような場合は、Java 8で導入されたInterfaceのdefault methodを使うのがよいでしょう。Interfaceは一つのClassに複数implementできます。ただし、default methodは可視性がpublicしか指定できないため、要素取得と振る舞いの分離が完全にできません。Java 9ではdefault methodにpublic以外の可視性でメソッドが定義できるようですが、Java 8ではdefault methodでは共通部分の振る舞いを定義したPage Objectを返すようにすることで対応できます。

public interface Menu {
    public MenuPage menu(){
        return new MenuPage();
    }
}

public class MenuPage extends MenuPageBase {
    // メニューの振る舞い
}

public class MenuPageBase {
    // 要素取得メソッド
}

次のページ
SelenideのTips

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング