2013年5月18日土曜日

Selenium 2 WebDriver に関するメモ(WebDriver等のメソッドに関する詳細)


WebDriver の制御に関するメモ

org.openqa.seleniumパッケージのクラス

By

HTMLの要素を特定するために使用される各要素のラッパークラスです。
staticなサブクラスが実装として用意されており、
実際にラッパーとして利用されるのはサブクラスになります。

ID、リンクテキスト、名前、タグ名、XPath、クラス名、CSSセレクタ をラップして

要素の検索などの際に利用します。

例:

<input name="example" type="text"/>

// exampleという名前の要素を検索し検索結果を返します

WebElement element = driver.findElement(By.name("example"))

WebDriver

ページのテストを行うためのメインとなるクラスです。
WebDriver自体はインタフェースなので
実際にはインタフェースを実装するクラスのインスタンスが処理を担当します。

get(String url) :

現在のブラウザウィンドウに新しいWebページをロードします。
これはHTTPのGET操作(サーバへのデータ送信要求)に相当する処理で、
ロードが完了するまでメソッドはブロックされることになります。

findElement(By by) :

ページを検索し、最初に見つけた要素(byに合致する要素)を
WebElementの形で返します。

findElements(By by) :

ページを検索し、現在のページ内のすべての要素(byに合致する要素)をjava.util.List<WebElement>の形で返します。

close() :

カレントウインドウを閉じます。
それが開いている最後のウィンドウだった場合、ブラウザを終了させます。

quit() :

テストのクローズを行います。
全ての関連するウインドウを閉じドライバの処理の終了させます。

なお、RemoteWebDriver がWebDriverの実装クラスとなっており、

ChromeDriver等の親クラスとして存在しています。
基本的な機能に関してはRemoteWebDriver でその多くが実装されているので
リファレンスを参照することをお勧めします。

WebElement

ページの各要素を表すクラスです。
HTMLの様々な要素(タグなど)を表す為の基本となるインタフェースです。
実装に関してはFirefoxWebElement、RemoteWebElement等の
実装クラスのリファレンスを参照することをお勧めします。

click() :

要素のクリックを行います。
クリックがページのロードを行った場合、
ロードが完了するまでこのメソッドはロックされます。

clear() :

この要素がテキスト入力要素である場合に入力されている値をクリアする。
他の要素には影響を与えません。テキスト入力要素は、INPUTとTEXTAREA要素です。

findElement(By by) :

ページを検索し、最初に見つけた要素(byに合致する要素)を
WebElementの形で返します。



findElements(By by) :
ページを検索し、現在のページ内のすべての要素(byに合致する要素)をjava.util.List<WebElement>の形で返します。
但し、ドキュメント全体ではなく参照元のWebElementの子要素となる(ネストされている)
要素群のみが検索対象となります。

submit() :
HTMLのsubmit(データの送信)に相当する処理を行う。
この処理が現在のページを変更する場合、
新しいページがロードされるまでメソッドはロックされます。


WebDriverBackedSelenium
DefaultSeleniumを親クラスとし、
コンストラクタに指定したWebDriverとURLを元にオブジェクトを生成することで、
Seleniumの様々な機能をWebDriver(と指定したURL)を対象に実行することが可能になる。
ただ、このクラス自体には
指定したWebDriverを取得するためのgetWrappedDriver() しか定義されていないため、
機能の詳しい内容を知るにはDefaultSeleniumのリファレンスを参照する必要があります。
因みにgetWrappedDriver()はWrapsDriverインタフェースで定義されているメソッドです。

DefaultSelenium
Seleniumインタフェースの実装クラス。
(あまりにメソッドが多いので詳しくはリファレンスを参照されたし。
全部紹介とか流石に勘弁して・・・)

captureScreenshot(java.lang.String filename) :
引数に指定したファイルにPNG形式でスクリーンショットをキャプチャします。

JavascriptExecutor

JavaScriptを実行するために
executeAsyncScript(java.lang.String script, java.lang.Object... args)、
executeScript(java.lang.String script, java.lang.Object... args)
の2つのメソッドを定義しているインタフェースです。

Scriptは第一引数で指定されます。
第二引数はScriptの引数になります。

例としては
executeAsyncScript( "window.setTimeout(arguments[arguments.length - 1], 500);");


という感じの構文になるようです
(Groovyのトリプルダブルクォート構文が威力を発揮しそうなシロモノです。
改行の問題はセミコロンで何とかなりそうですし
上手くいってくれれば構文が大分シンプルになるでしょう)。

後書き:
一応、ダイジェスト的に記述してみたのですがまだまだ情報が足りなさ過ぎですね・・・

閑話休題

YouTubeの広告の多さに堪えかねてAdBlock Plusを導入。
マジで非常に快適になりました。
こんなことならもっと早く導入すればよかった・・・