モジュールとして切り出すことで画面(要素)数に対してスケール "都道府県入力欄": '//input[@name="pref"]' "送信ボタン": '//button[text()="送信する"]' "削除ボタン": '//button[text()="削除する"]' 静的な仕様 動的な仕様 プ ロ ダ ク ト の 編集ページMap 検索ページMap 1つのページオブジェクトを複数のFeatureで共有 When( "{string}"の"{string}"に"{string}"を入力する, (pageName, uiParts, testData) => { input( Page[pageName][uiParts], testData ) } ) "店舗名入力欄": '//input[@name="rst_name"]' "検索ボタン": '//button[text()="検索する"]' "編集ボタン": '//li[1]//button[text()]' Scenario: 店舗を削除する Given "検索ページ"の"店舗名入力欄"に"店舗001"を入力する And "検索ページ"の"検索ボタン"をクリックする And "検索ページ"の"編集ボタン"をクリックする When "編集ページ"の"削除ボタン"をクリックする Scenario: 店舗を編集する Given "検索ページ"の"店舗名入力欄"に"店舗001"を入力する And "検索ページ"の"検索ボタン"をクリックする And "検索ページ"の"編集ボタン"をクリックする When "編集ページ"の"都道府県入力欄"に"神奈川県"を入力する And "編集ページ"の"送信ボタン"をクリックする When( "{string}"の"{string}"をクリックする, (pageName, uiParts) => { click( Page[pageName][uiParts] ) } ) 1つのStepを 複数のページオブジェクトで共有 ①テスト手順、②画面固有要素、③ウェブ画面一般的な操作ロジック 画面数に対してスケールするようにテストの自動テストのモジュールを整理 20 ②画面固有要素(ページオブジェクト) ③ウェブ画面一般的な 操作ロジック(Step) ①テスト手順(Feature)