説明
■イベント処理概要
Seleniumではイベントに対するイベント処理を独自に実装することが出来ます。
URLの移動やブラウザの進む/戻るなど、実際のブラウザ操作でイベントを発生させ、
そのイベントに対する処理を開発者が記述していきます。
イベントを発生するクラスをイベント発生クラスといい、そのイベントを捕捉するクラスを
イベント捕捉クラスといいます。
まとめると以下のようになります(Selenium Python APIを例とし説明していきます)。
○イベント発生クラス(URLの移動や、ブラウザの進む/戻るの操作など)
→EventFiringWebDriverクラス内のメソッドを実行させることによりイベントを
発生させていく。find_elementやget、titleなど
WebDriverインターフェースと同じようなメソッドが存在する。
○イベント捕捉クラス(イベント発生をトリガーとして捕捉クラスのメソッドが処理を開始)
→AbstractEventListenerクラスの拡張クラスを開発者が作成する。
AbstractEventListenerクラスは全ての(イベントに対する)メソッドに
ダミー実装がされています。下記にAbstractEventListenerクラス
のメソッドを一部ご紹介します。
・before_navigate_back(driver)
→ブラウザの「戻る」操作をトリガーとして動作するメソッド。
「戻る」操作直前の状態で処理が実行される。
・after_navigate_back(driver)
→ブラウザの「戻る」操作をトリガーとして動作するメソッド。
「戻る」操作直後の状態で処理が実行される。
開発者はAbstractEventListenerクラスを継承して新規にクラスを作成し、
メソッドをオーバーライドしていきます。
ここでは例として、継承した新規クラスのメソッドを、以下のようにオーバーライド
しています。
class MyListener(AbstractEventListener):
def before_navigate_back(self, driver):
#ブラウザの『戻る』直前の処理
print("before_navigate_back:Title is " + driver.title)
}
}
■イベント処理の実行手順について
①対象のWebDriverとイベント補足クラスのインスタンスをイベント発生クラスに渡し、
インスタンスを作成する。
#第1引数:WebDriverのインスタンス
#第2引数:イベント捕捉クラスのインスタンス
efw_driver = EventFiringWebDriver(driver, MyListener())
②efw_driverを通常のdriverとして用い、テストを記述していく。
記述したテストの中で、MyListenerクラスのメソッドが呼ばれるような
イベント動作(URLの移動や、ブラウザの進む/戻るの操作など)をした場合は、
操作したイベントに対応するMyListenerクラスのメソッドが自動的に呼ばれる。
下記の例では、URL遷移しているので「beforeNavigateTo」と「afterNavigateTo」が呼び
出される。これらのメソッドはあらかじめ開発者が実装した処理が行われる。
//GoogleのTopページへ遷移する
eventFiringDriver.get("https://www.google.com");
・
・
・
Fatal error: Uncaught Google_Service_Exception: Error calling GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3A138132118&start-date=7daysAgo&end-date=yesterday&metrics=ga%3Apageviews&dimensions=ga%3ApageTitle%2C+ga%3ApagePath&sort=-ga%3Apageviews&max-results=1000: (404) <!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_c in /home/users/1/monda-muki/web/seleniumqref.com/google-api-php-client-1-master/src/Google/Http/REST.php on line 110