Selenium 2 コードに新しいドライバーを追加する
このドキュメントは以前 wiki に掲載されていました
はじめに
WebDriver には、新しい実装の期待される動作を記述する包括的なテストスイートがあります。話を簡単にするために、Java でドライバーを実装することを前提としますが、これを読んだら、既存の実装を見て、より複雑なビルドや他の言語をどのように処理するかを確認できます。
新しい WebDriver 実装の作成
新しいトップレベルディレクトリの作成
ブラウザ名で名付けられた、"common" および "firefox" と並列の新しいトップレベルフォルダを作成します。その中に、"src/java" および "test/java" ディレクトリを作成します。どこに何を入れるかは明白なはずです。
テストスイートのセットアップ
既存のテストスイートの1つをテストツリーにコピーし、新しいブラウザ用に変更します。これにより、予想どおり "Ignore.java" クラスを変更し、ソースツリーに実装用の保持クラスを追加する必要がある場合があります。すべてのテストを拾うには、必ず "common" ディレクトリを含める必要があります。今のところ、致命的なクラッシュが発生しない限り、テストはそのままにしておきます。
テストスイートを追加したら、プロジェクトのトップレベルに "build.desc" CrazyFunBuild ファイルを追加します。"htmlunit" ディレクトリにあるものをモデルにしてください。その後、"go" スクリプトを使用してコマンドラインからテストを実行できるようになります。
この時点では、テスト実行時に完全かつ壊滅的な失敗が発生することを想定しています。
実装を開始する
ブラウザがプロセス外で実行される場合、JsonWireProtocol を利用することを強くお勧めします。これにより、クライアント側 (ユーザーが使用する API) の実装が比較的安価になり、リモートクライアントを拡張できるため、Java、C#、Ruby、Python のサポートを大幅に少ない労力で得られることを意味します。
実装のヒント
どこから始めるか
前述のように、テストスイートがあります。これらを合格させるための推奨される順序は大まかに次のとおりです。
- ElementFindingTest — 要素の位置特定が重要なため必要
- PageLoadingTest
- ChildrenFindingTest — より多くの要素を見つける
- FormHandlingTest
- FrameSwitchingTest
- ExecutingJavascriptTest
- JavascriptEnabledDriverTest
この時点で、かなり完成度の高い動作するドライバーが手に入ります。その後は、ユーザーインタラクションを正しくすることがおそらく最善です。
- CorrectEventFiringTest
- TypingTest
最先端のものに手を出す前に
- AlertsTest
クラス内のすべてのテストを動作させる必要はありません。私はできる限りクラスを進めて、行き詰まったらリストの次のクラスに切り替える傾向があります。これにより、妥当な速度を維持しながら、基本をカバーできます。
単一のテストを実行する
理想的とは程遠いですが、私たちが使用する方法は、common プロジェクトの SingleTestSuite クラスを変更し、IDE の UI を介して実行元のモジュールを変更することです(つまり、起動構成(IDEA 内)に入り、使用するモジュールを変更するだけです。ファイルを移動しないでください!)。このクラスは自明であるはずです。
テストを無視する
ある時点で、アドホックベースでテストを実行するのをやめて、リグレッションが発生していないことを確認するために、継続的ビルド製品を利用したくなるでしょう。この時点でのプロセスは、コマンドラインからテストを実行することです。これにより、失敗したテストのリストが生成されます。これらの各テストを確認し、テストに関連付けられた "@Ignore" を追加または変更します。テストを再実行します。数回繰り返す必要があるかもしれませんが、最終的にはビルドがグリーンになります。素晴らしい。
ビルドはバックグラウンドで ant を使用し、ログを "build/build_log.xml" に、テストログを "build/test_logs" に保存します。