| Selenium ver.0.5 勝手にまとめサイト by madknight [ blog ] |

2005.10.4 update! ・version 0.6でました。Selenium Recorderの紹介も含め、詳しくはコチラ。 |
■Selenium って何? これっていわゆる、Webアプリケーションのテストツールというらしいです。例えばPerlとかで組んだCGIとか、PHP・ASP・JSPとか、ブラウザで動くプログラムを作ると必ず動作テストやりますよね(やらない?) プログラムをちょっと修正するたびに「あれーどっか壊れてないかなー」と何回も同じような操作をチェックするために、ブラウザでポチポチやらなきゃいかんわけです。面倒でしょ? それを簡略化してくれるのがSelenium。自動化したい操作を、HTMLのテーブルタグにちょいちょい、と書いてあげれば後はガシガシ動いてくれるわけ。便利そうじゃない? 「おっ?スッゲーっ!!」と思ったヒトは、とりあえずもう少し先まで読んでみてくれ。 ■さっそく試してみたいんだけどー。 Seleniumを動かすのに最低限HTMLとJavaScriptは分かってほうがいいと思う。Webアプリ組めるヒトならある程度大丈夫かな?んじゃ早速。えーっと、とりあえず公式サイトから Selenium をDLしてくれ。デモみたい人はコチラからどうぞー。 ・Selenium オフィシャル 解凍するとreadmeとdocフォルダ、seleniumフォルダが展開されるはず。seleniumフォルダの中にはテストを走らせる為に必要な色んなファイルが入ってるけど、とりあえずデモを見てみましょう。/selenium/index.html をブラウザで開くと上の画面みたいなのが開くはず。とりあえず何も考えずに右上の「All Tests」ボタンを押してみよう。おおおおっっ!? とまぁ、こういうことが出来るのだ。なんとなーく動き見てると設定ファイルの書き方わかるっしょ(w こういうことしたいなーと思ったときはとりあえずサンプルのテストを見てみると良さげ。 じゃあ、早速自作のプログラムもテストしてみようよ。seleniumフォルダをテストしたいプログラムがアップされてるディレクトリに放り込もう。例えば /cgi-bin/bbs.cgi をテストしたいんだったら /cgi-bin/selenium/ みたいに。 んで、次は自動化させたいブラウザ操作を設定ファイルに書いていこう。設定ファイルっつってもただのHTMLファイルなので気構えなくてよし。Dreamweaverとかでサクサク書いてしまおう。
相対パスやフォームの名前付けなんかで苦労する場合があるけど、そのときはDOMモデルを思い浮かべながら記述を見直してトライ。 ■気がついたら書き込むコーナー ・RunしたときXxxAndWaitだとうまく動かないですよ?
・idも何も振ってないimageボタンをクリックする、という暴挙
■思いつきで言ってみる ・SQLとか使えないよねー?
・入れ子のフレームからPOPウィンドウってどう捕まえるの?
・テスト書くのが....ダルイです
■情報源
|
Selenium Reference
コマンドはSelenium に何をするのかを知らせるものです。Selenium のコマンドは[Action]と[Assertion]の二種類に分類されます。
[Action]は一般に、アプリケーションの状態を操るコマンドです。 これらは「このリンクをクリックする」とか「そのオプションを選択する」といった動作をします。 アクションが失敗するか、エラーが発生すると、現在のテストの実行が止まります。 チェックは予想されるケースでのアプリケーションの状態について確かめます。例えば「ページタイトルが確かに××であること」とか「このチェックボックスがマークされていることを確かめる」などを含みます。 [Assertion]が失敗するときのテストを止めるか、もしくは単に失敗を記録してテストを継続するように、Seleniumを設定することができます。 Element Locatorは、コマンドがどのHTML要素を指すかをSeleniumに指示します。 多くのコマンドがtagert属性としてElement
Locatorを必要とします。 Element Locatorsに関する例は"elementId"と「document.forms0.element」を含んでいます。
これらは次のセクションでより明確に説明されます。 ■Element Locators Element Locatorsは、コマンドがどのHTML要素を示すかをSeleniumを特定させます。Element Locatorsにはいくつか種類があります。 ・id
・name
・identifier(識別子)
・dom
・xpath
・link
ロケータ接頭語がなければ、ロケータのデフォルトセットが使用されます。ロケータのデフォルトセットは以下の通りです。
■SelectOption指示子 SelectOption指示子はHTMLのSelect要素(例えば、特定のオプションを選択するか、または選択されたオプションが正しい位置に選択されているのを確かめるなど)のオプションを指定するいくつかの手段を提供します。 SelectOption指示子のいくつかの種類があります。 ・label
・value
・id
・index
接頭語がなければ、デフォルトではラベルに対してマッチングを行います。
|
■Selenium Actions アクションはアプリケーションに対して何か動作を行うようにSeleniumに知らせるものです。一般にこれらはユーザが行う何らかの動作を表します。 多くの Actionsは"AndWait"接尾語を付けてコールできます。この接尾語は「アクションを起動させてブラウザがサーバに通信を行い新しいページがロードされるのを(次のコマンドに移る前に)待つべきである」とSeleniumに知らせるためのものです。 このパターンへの例外は「open」と「click」です。これらはデフォルトの動作でページがロードされるのを待ちます。 |
| command | taget | value | function |
| open | 開くURL | 無視 | テストフレームで相対/絶対URLを開く。ブラウザにおける(XSS)セキュリティ制限のため、URLはSeleniumと同じサイトになければならない |
| click | クリックされる要素ID | 無視 | リンク、ボタン、チェックボックスまたはラジオボタンのtargetをクリック |
| clickAndWait | targetをクリックすると次ページをロードする場合はこちら | ||
| type | 入力フィールドの要素ID | タイプされるテキスト、または選択されたオプションのvalue値 | テキストフィールド、コンボボックス、チェックボックスなどにテキストをタイプ(入力)する |
| typeAndWait | targetをクリックすると次ページをロードする場合はこちら | ||
| select | 選択される要素ID | オプション識別子 | オプション識別子に基づいてドロップダウンからオプションを選択。1つ以上のオプションがマッチする場合(例えば「f*b*」のようなグロブを使う、または同じラベルか値を持っている1つ以上のオプションが存在する)には、最初にマッチしたものが選択される。 |
| selectAndWait | 選択されると次ページをロードする場合はこちら | ||
| selectWindow | 選択するウィンドウの要素ID | 無視 | ポップアップウィンドウを選択する。ポップアップウィンドウが一旦選択されると、以後のすべてのコマンドがそちらのウィンドウで実行。再びメインウィンドウを選択するには、targetに「null」を使用 |
| pause | 一時停止するミリ秒数 | 無視 | 指定された時間の間、テストスクリプトの実行を一時停止する |
| waitForValue | 入力フィールドの要素ID | 指定フィールドに格納されるべき値 | 指定されたフィールド(text,hidden,etc...)に、指定された値が入力されるまで待機する。入力に指定された値がこない場合は永遠に待機する |
| goBack | 無視 | 無視 | ブラウザ上の「戻る」ボタンをクリックする |
| close | 無視 | 無視 | タイトルバーの「閉じる」ボタンをクリック |
| store | 格納する値 | 値を格納する変数名 | 引数で渡された値を変数に格納する。targetにSeleniumの代替変数やjavascriptによる評価式のいずれかを使用可能 |
| storeValue | 入力フィールドの要素ID | フィールドの値を格納する変数名 | 入力フィールドの値を変数に格納 |
| storeText | 要素ID | 要素の文字列を格納する変数名 | 要素の文字列を変数に格納 |
■Selenium Checks チェックは、アプリケーションの状態について確認するために使用されます。フォームの各フィールド値や何らかのテキストの状態、または現在のページのURLをチェックするためにこれらを使用します。Selenium チェックには「assert」および「verify」の2つのモードがあります。「assert」チェックが失敗するとテストが中止されることを除いては、これらは同様に振る舞います。「verify」チェックが失敗した場合、テストは実行を続行します。「assert」の単独チェックによって正しいページにあることを保証された後に「verify」チェックによるフォームのフィールド値やラベルなどのテストが続きます。 |
| verify/assert | taget | value | function |
| verifyLocation assertLocation | 予想されるページの相対的位置 | 無視 | テストされる現在のページの位置についてチェック |
| verifyTitle assertTitle | 予想されるページタイトル | 無視 | 現在のページのタイトルについてチェック |
| verifySelected assertSelected | チェックするドロップダウンの場所 | 選択されたオプションがマッチすると予想されるオプション識別子 | ドロップダウンの選択されたオプションが、指定されたオプション識別子を満足するかをチェック |
| verifySelectOptions assertSelectOptions | チェックするドロップダウンの場所 | オプションラベルのコンマ区切りのリスト | コンマ区切りのリストを参照しながらドロップダウンにおけるすべてのオプションのラベルについてチェック |
| verifyText assertText | チェックする要素ID | 予想されるテキスト | 要素のテキストについてチェック |
| verifyAttribute assertAttribute | チェックする 要素ID@属性値 | 予想される属性値 | 要素の属性値についてチェック。属性値は<element-locator>@<attribute-name>で特定する。 |
| verifyTextPresent assertTextPresent | 予想される文字列 | 無視 | 指定されたテキストがページ内に存在するかをチェック |
| verifyTextNotPresent assertTextNotPresent | 予想される文字列 | 無視 | 指定されたテキストがページ内に存在しないことをチェック |
| verifyElementPresent assertElementPresent | 予想される要素ID | 無視 | 指定された要素がページ内に存在するかをチェック |
| verifyElementNotPresent assertElementNotPresent | 予想される要素ID | 無視 | 指定された要素がページ内に存在しないことをチェック |
| verifyTable assertTable | テーブル名.行.列 | 指定されたセルの中に、予想されるテキスト | テーブルのセル内のテキストについてチェック。特定のセルは テーブル名.行.列 で指定する。 |
| verifyVisible assertVisible | 目に見えるべき要素ID | 無視 | 指定された要素がページ内に存在し、可視状態であることをチェック |
| verifyNotVisible assertNotVisible | 見えてはいけない要素ID | 無視 | 指定された要素が可視状態でないをチェック 要素が存在しない場合は可視状態でないとみなす |
| verifyEditable assertEditable | 編集可能であるべき要素 | 無視 | 指定された要素が編集可能であることをチェック |
| verifyNotEditable assertNotEditable | 編集不可能であるべき要素 | 無視 | 指定された要素が編集可能でないことをチェック |
| verifyAlert assertAlert | アラートウィンドウ内で予想されるテキスト | 無視 | javascriptアラートが発生して、アラートのテキストが指定されるものであることをチェックする。このチェックはアラートが発生するタイミングが同じでなければならない。Seleniumによるチェックが完了すると自動的に「OK」ボタンがクリックされる。 |
| verifyConfirmation assertConfirmation | ダイアログウィンドウ内で予想されるテキスト | 無視 | javascriptによるダイアログが表示されたとき、そのダイアログ内のテキストが指定されるものであることをチェックする。このチェックはダイアログが発生するタイミングが同じでなければならない。Seleniumによるチェックが完了すると自動的に「OK」ボタンがクリックされる。 |
| chooseCancelOn NextConfirmation |
無視 | 無視 | このコマンドを実行後、次回javascriptによるダイアログが表示されたとき、Seleniumによるチェックが完了すると自動的に「チャンセル」ボタンがクリックされように設定する。 |
| ■ パラメータ構成と値 すべてのSeleniumコマンドの引数は、単純な置換変数?と完全なjavascriptの両方を使って構成することができます。したがって、異なった構文を使用することでアクセスする場合を除いて、以前に格納された変数に、これらのメカニズムの双方からアクセスすることができます。 ・ 格納された変数
・ 置換変数?
・ Javascriptによる演算値
■Seleniumの拡張 あなた自身が作成したAction/Check/LocatorStrategyiesを追加することで、とても簡単にSeleniumを拡張できます。これにはSeleniumオブジェクトやPageBotオブジェクトのプロトタイプが記述されたJavascriptにメソッドを加える作業が必要です。Seleniumの起動時に、これらのプロトタイプのメソッドを自動的に走査し、名前パターンを使って Actions/Checks/LocatorStrategyies を認識します。 ・Action
・Checks
・LocatorStrategyies
■user-extensions.js デフォルトでは、Seleniumは "user-extensions.js" というファイルを探して、その中のjavascriptコードを読み込みます。このファイルはSeleniumのコアを変更することなく新たな機能を追加するのに便利です。なお、標準のディストリビューションではこのファイルは存在していません。ユーザーは一般的な位置にこのファイルを作成することで、Seleniumソースを変更する必要無く、独自の拡張コードを置くことができます。これはまた、アップグレード作業の際にも有望となる手助けになるでしょう。
|