WebDriverとは?ブラウザ自動化標準の説明

WebDriverとは?ブラウザ自動化標準の説明

Scrapeless Scraping Browserは、クライアントロジックをブラウザ実行から分離する自動化ワークフローのための管理されたブラウザインフラストラクチャを提供します。

要約

  • WebDriverはブラウザのためのリモートコントロールインターフェースです。 それはプロセス外のクライアントがユーザーエージェントに指示し、検査できるプラットフォームおよび言語に依存しないプロトコルを定義します。
  • クラシックWebDriverはコマンドと応答のモデルを使用します。 クライアントはセッションを作成し、HTTPコマンドを送信し、構造化された結果またはエラーを受け取り、セッションを終了します。
  • 機能はセッション環境を交渉します。 ブラウザ名、バージョン、プラットフォーム、プロキシ、プロンプトの動作、およびベンダー拡張は、リクエストを実装に合わせるのに役立ちます。
  • SeleniumはWebDriverを中心に構築されたクライアントエコシステムです。 SeleniumバインディングとGridは、プロトコルを言語間およびリモートブラウザインフラストラクチャで利用可能にします。
  • WebDriverとWebDriver BiDiは関連していますが、異なります。 クラシックはコマンド指向のままで、BiDiはWebSocket接続、非同期コマンド、およびブラウザからクライアントへのイベントを追加します。

WebDriverは自動化とブラウザの間の契約です。

WebDriverはブラウザの外部プログラムがセッションを作成し、構造化されたインターフェースを通じてブラウザ操作を実行できるようにします。クライアントはSeleniumバインディング、他の自動化ライブラリ、テストプラットフォーム、またはカスタムツールである可能性があります。リモート側はブラウザドライバまたはブラウザ統合実装かもしれません。プロトコルはナビゲーション、ウィンドウ、フレーム、要素、入力アクション、スクリプト実行、クッキー、スクリーンショット、プロンプト、タイムアウト、印刷、およびエラーをカバーします。メッセージがプロセス境界を越えるため、クライアントとブラウザは同じプログラミング言語を使用する必要はありません。

W3C WebDriver仕様 は、WebDriverをリモートブラウザ制御のためのプラットフォームおよび言語に依存しないワイヤープロトコルとして定義します。「ワイヤープロトコル」とは、相互運用可能なメッセージ契約を意味し、特定のJava、Python、またはJavaScript APIを意味するものではありません。言語バインディングは便利なメソッド呼び出しをプロトコル操作に変換し、応答を言語固有のオブジェクトおよび例外に変換します。この分離により、ツールやサービスは共通のブラウザ制御面を共有することができます。

ローカルエンド、リモートエンド、セッション、およびコマンドがモデルを定義します。

ローカルエンドはWebDriverコマンドを開始するクライアント側です。リモートエンドはそれを受信し、ユーザーエージェントを制御します。新しいセッションリクエストには機能が含まれており、リモートエンドはセッション識別子とマッチした環境を返します。後のコマンドはその識別子を含み、セッション内で操作します。リモートエンドは成功値または標準化されたエラーペイロードを返します。セッションを削除すると、そのブラウザリソースが解放され、その識別子に対するさらなるコマンドが無効になります。

MDN WebDriverの概要 は、WebDriverを外部ブラウザ制御インターフェースとして要約し、HTTP上のクラシックWebDriverとWebSocket上のWebDriver BiDiを区別します。クラシックルーティングは、HTTPメソッドとパスをコマンドにマッピングします。モデルは意図的に単純で、1つの操作を送信し、それに対する応答を待ち、次に続きます。その単純さは相互運用性をサポートしますが、拡張や追加メカニズムなしにブラウザからコンソール、ネットワーク、またはコンテキストイベントを自然にストリーミングすることはありません。

  • ローカルエンド。 自動化クライアントはセッションリクエストとコマンドを構築し、プロトコル応答を解釈します。
  • リモートエンド。 ブラウザ側の実装はコマンドを検証し、ユーザーエージェントを操作し、結果またはエラーを返します。
  • セッションID。 ユニークな識別子は、その後のコマンドをブラウザインスタンスと交渉された環境にスコープします。
  • 機能。 要求されたおよびマッチされた値は、ブラウザ、プラットフォーム、プロキシ、プロンプトの動作、および拡張を説明します。
  • コマンドエンドポイント。 定義されたメソッドとルートは、1つのナビゲーション、要素、入力、スクリプト、クッキー、ウィンドウ、またはキャプチャ操作を表します。

要素および入力は参照としてプロセス境界を越えます。

WebDriverが要素を見つけると、リモートエンドはDOMノードをクライアントプロセスに転送するのではなく、プロトコルレベルの要素参照を返します。後のコマンドは、その参照を使用して状態を読み取ったり、入力を実行したりします。ページがナビゲートしたりノードを置き換えたりすると、参照が古くなることがあります。この動作は、オートメーションコードが操作に近い要素を見つけ、関連性を持つページ条件を待機すべき理由を説明します。

MDN WebDriverリファレンス は、WebDriverコマンド、機能、および標準化されたエラーファミリーを文書化します。エラーは相互運用性契約の一部です:無効なセッション、古い要素、無効なセレクタ、予期しないアラート、サポートされていない操作、タイムアウトがクライアントに共通の語彙を提供します。言語バインディングはそれらを異なる方法でラップしますので、診断ツールは可能な限り元のエラー名、メッセージ、スタック、セッション、コマンド、ブラウザ環境を保持する必要があります。

WebDriverはブラウザ操作を標準化しますが、全体のテストスイートではありません。

プロトコルはリモートコントロール境界を定義します。多くのテストに関する懸念がその上または横にあり、クライアントエコシステムによって提供される必要があります。

懸念どこに属するか
ブラウザコマンドWebDriverは相互運用可能なナビゲーション、要素、入力、スクリプト、ウィンドウ、クッキー、キャプチャ、およびセッション操作を定義します。
テスト発見言語特有のテストランナーまたはアプリケーションスケジューラがテストまたはジョブを見つけて秩序を決定します。
アサーションテストフレームワークまたはアサーションライブラリは、観察されたブラウザ状態が期待される結果を満たすかどうかを判断します。
リモート割り当てSelenium Gridまたは別のサービスが要求された機能を利用可能なブラウザ環境にマッチさせます。
アーティファクトフレームワークとブラウザサービスは、スクリーンショット、ログ、ビデオ、トレース、レポートがどのように保存されるかを決定します。
アプリケーションモデルページオブジェクト、フィクスチャ、ドメインサービス、およびテストデータは、テスト対象の製品に特有の動作をエンコードします。

WebDriver契約が価値のある場所

WebDriverは、クライアント、ブラウザ、言語、またはリモートサービス間の相互運用性がアーキテクチャの一部であるときに最も重要です。

クロスブラウザテスト

1つのクライアントモデルは、ブラウザ固有の実装からセッションを要求し、必要なブラウザマトリックス全体で共通のユーザー向け動作を運用できます。

リモートブラウザサービス

テストランナーは、ローカルオートメーションで使用されるのと同じプロトコル境界を通じて、別のマシンまたはホスティングプラットフォーム上でセッションを作成できます。

多言語組織

チームは、ブラウザサービスの慣習と機能を共有しながら、アプリケーションとテストエコシステムに適した言語バインディングを使用できます。

ブラウザツール

監視、アクセシビリティ、キャプチャ、オートメーション製品は、ベンダー固有のデバッグプロトコルではなく、標準のリモートコントロールインターフェースを基に構築できます。

クラシックWebDriverは意図的にコマンド指向

クラシックWebDriverは、ナビゲート、要素の検索、クリック、テキストの読み取り、またはスクリーンショットの取得などの離散的な操作によく適しています。継続的なブラウザ信号は、厳密なコマンド応答交換ではあまり自然ではありません。クライアントは、豊富なイベントストリームのために、歴史的にポーリング、ベンダー拡張、またはブラウザ固有のプロトコルを使用してきました。WebDriver BiDiは、サブスクリプションと非同期イベントでそのギャップに対処し、ブラウザ間の標準的な道を保持します。

WebDriverのWebプラットフォームテストの実装結果 ブラウザ間のWebDriverテストの実装結果を公開します。適合性は一つのバイナリラベルではなく、個々のコマンド、エッジケース、拡張、バージョン、プラットフォームは異なる動作をすることがあります。ブラウザとドライバー環境を表示し、スイートが依存する操作をテストし、新しいセッションのハンドシェイクがすべてのオプション機能を証明するとは限らないことを避けます。

WebDriver統合チェックリスト

安定した統合により、プロトコルセッション、環境、コマンド、およびアプリケーションアサーションが最初から最後まで観察可能になります。

  1. 要求された能力を記録します。 ブラウザ、バージョン、プラットフォーム、プロキシ、プロンプト、証明書、ページローディング戦略、およびベンダーオプションをバージョン管理された構成に保管します。
  2. 一致した能力をキャプチャします。 リモートエンドによって返される値を保存し、失敗を実際に実行されたブラウザ環境に結び付けられるようにします。
  3. セッション所有権を管理します。 セッションを決定論的に作成および削除し、タイムアウトを定義し、無関係なテストがブラウザプロファイルや変更可能なアプリケーションデータを共有するのを防ぎます。
  4. 条件ベースの同期を使用します。 次の操作に必要なアプリケーション状態を待機する代わりに、ナビゲーション完了がすべての動的要素を準備させるとは仮定しません。
  5. 要素のライフタイムを管理します。 使用に近い要素を見つけ、ナビゲーションまたはDOM置換後に参照が古くならないように期待し、選択子をセマンティックページ動作に接続します。
  6. プロトコルの証拠を保持します。 コマンド名、オリジナルエラー、セッションID、ブラウザ環境、スクリーンショット、および関連ログを保持し、秘密情報を公開しないようにします。
  7. リモート境界をテストします。 実際のリモートサービス上でファイル転送、ダウンロード、ウィンドウ、権限、ネットワークポリシー、およびアーティファクトを検証します。ローカルの動作は十分な証拠ではありません。
  8. BiDiのニーズを別に追跡します。 WebDriver BiDiを要求するイベントまたはモジュールをリストし、クラシックコマンドまたはブラウザ固有の統合を置き換える前に、現在のブラウザおよびクライアントのサポートを検証します。

管理ブラウザアーキテクチャにおけるWebDriverの概念

管理されたブラウザサービスは、アプリケーションロジックが1つの場所で実行され、ブラウザが別の場所で実行されるというWebDriverを有用にする同じアーキテクチャの分離に従います。Scrapeless Scraping Browserは、サポートされているオートメーションクライアントと動的なウェブデータワークフローのためのリモートブラウザインフラストラクチャを提供します。

選択したクライアントによってサポートされる実際のプロトコルと機能面を検証する代わりに、すべてのリモートブラウザエンドポイントがWebDriverクラシックを実装していると仮定しないでください。現在をレビューします。 Scrapeless Scraping Browser製品概要, Scrapeless Scraping Browserの入門書、と Scrapelessの価格 運用モデルを選択する前に。

結論:WebDriverは相互運用性レイヤーです

WebDriverは、オートメーションクライアントとブラウザ間の標準化されたリモートコントロール契約です。セッションと機能が環境を確立し、コマンドがナビゲーション、要素、入力、ストレージ、ウィンドウ、スクリプト、およびキャプチャを操作し、構造化された結果とエラーがクライアントに返されます。Seleniumは、このモデルを言語やリモートインフラストラクチャ全体で利用可能にします。

プロトコルはテスト設計を置き換えません。安定したロケータ、状態ベースの待機、孤立したデータ、意味のあるアサーション、および観測可能な環境が、オートメーションスイートが信頼できるかどうかを決定します。WebDriver BiDiは、非同期のブラウザイベントが必要な場合に古典的なモデルを補完します。

リモートブラウザインフラストラクチャを評価する準備はできましたか?

Scrapelessアカウントを作成し、クライアント、セッション設定、ブラウザ環境を伴う制約されたオートメーションワークフローをテストし、プロジェクトに必要な証拠を収集します。

無料開始 →

FAQ

WebDriverはSeleniumと同じですか?

いいえ。WebDriverはブラウザオートメーションインターフェースおよびプロトコルファミリーです。SeleniumはWebDriverの言語バインディング、Grid、IDE、および関連ツールを提供するプロジェクトです。他のクライアントやブラウザサービスもWebDriverを実装または使用することができます。

WebDriverはなぜブラウザドライバが必要なのですか?

リモート実装は、標準化されたコマンドを特定のブラウザに委譲します。ブラウザベンダーは、その実装を所有または参加できるため、同じプロトコル操作がブラウザのネイティブなオートメーション機能にマップされます。一部の最新のパッケージはドライバ管理を隠しますが、実装の境界線は依然として存在します。

WebDriverの機能とは何ですか?

機能は、セッションを作成する際に要求され、一致する値です。それらは、ブラウザ名、ブラウザバージョン、プラットフォーム、プロキシ、プロンプト処理、証明書、およびベンダー固有のオプションなどの要件や環境の詳細を説明します。

WebDriverはリモートで動作しますか?

はい。ローカル側は、Selenium GridやホスティングされたブラウザサービスのようなリモートWebDriverエンドポイントにセッションリクエストとコマンドを送信できます。その環境が提供する正確な機能、ファイルの動作、アーティファクト、ネットワークポリシー、およびコマンドサポートを検証します。

WebDriverとWebDriver BiDiの違いは何ですか?

古典的なWebDriverは主にHTTPコマンド-レスポンス操作を使用します。WebDriver BiDiはWebSocket接続、非同期コマンド、サブスクリプション、およびブラウザからクライアントへのイベントを追加します。両者はセッションの概念を共有し、クライアントはBiDi機能のカバレッジが拡大する間、両方を使用することができます。

参考文献