説明
■イベント処理概要
Seleniumではイベントに対するイベント処理を独自に実装することが出来ます。
URLの移動やブラウザの進む/戻るなど、実際のブラウザ操作でイベントを発生させ、
そのイベントに対する処理を開発者が記述していきます。
イベントを発生するクラスをイベント発生クラスといい、そのイベントを捕捉するクラスを
イベント捕捉クラスといいます。
まとめると以下のようになります(Selenium Java APIを例とし説明していきます)。
○イベント発生クラス(URLの移動や、ブラウザの進む/戻るの操作など)
→EventFiringWebDriverクラス内のメソッドを実行させることによりイベントを
発生させていく。findElementやexecuteScript、getTitleなど
WebDriverインターフェースと同じようなメソッドが存在する。
○イベント捕捉クラス(イベント発生をトリガーとして捕捉クラスのメソッドが処理を開始)
→AbstractWebDriverEventListenerクラスの拡張クラスを開発者が作成する。
AbstractWebDriverEventListenerクラスは全ての(イベントに対する)メソッドに
ダミー実装がされています。下記にAbstractWebDriverEventListenerクラス
のメソッドを一部ご紹介します。
・beforeNavigateBack(WebDriver driver)
→ブラウザの「戻る」操作をトリガーとして動作するメソッド。
「戻る」操作直前の状態で処理が実行される。
・afterNavigateBack(WebDriver driver)
→ブラウザの「戻る」操作をトリガーとして動作するメソッド。
「戻る」操作直後の状態で処理が実行される。
開発者はAbstractWebDriverEventListenerクラスを継承して新規にクラスを作成し、
発生させるイベントに対応するメソッドをオーバーライドしていきます。
ここでは例として、継承した新規クラスのメソッドを、以下のようにオーバーライド
しています。
public class ExEventListner extends AbstractWebDriverEventListener{
@Override
beforeNavigateBack(WebDriver driver){
//「戻る」操作直前のブラウザタイトルを取得してコンソール出力
System.out.println("beforeNavigateBack:Title is " + driver.getTitle());
}
}
■イベント処理の実行手順について
①対象のWebDriverをイベント発生クラスに渡し、インスタンスを作成する。
EventFiringWebDriver eventFiringDriver = new EventFiringWebDriver(driver);
②イベント捕捉クラスのインスタンスを作成する。
ExEventListner eventListner = new ExEventListner();
③イベントの実行が通知されるよう、イベント捕捉クラスをイベント発生クラスへ登録する。
こうすることによりイベント発生クラスは、イベントをイベント捕捉クラスに通知出来る
ようになる。
eventFiringDriver.register(eventListner);
④eventFiringDriverを通常のdriverとして用い、テストを記述していく。
記述したテストの中で、EventFiringWebDriverクラスのメソッドが呼ばれるような
イベント動作(URLの移動や、ブラウザの進む/戻るの操作など)が行われている場合は、
操作したイベントに対するExEventListnerクラスのメソッドが自動的に呼ばれる。
下記の例では、URL遷移しているので「beforeNavigateTo」と「afterNavigateTo」が呼び
出される。これらのメソッドはあらかじめ開発者が実装した処理が行われる。
//GoogleのTopページへ遷移する
eventFiringDriver.get("https://www.google.com");
・
・
・