WebDriverとは何か? セッション、コマンド、およびブラウザー自動化

WebDriverとは何か?

Scrapeless Agent Browser は、ドキュメント化された接続インターフェイスを使用する自動化クライアント向けに、マネージドなクラウドブラウザーを提供します。

WebDriver は、Web ブラウザー用の標準化されたリモート制御インターフェイスです。ブラウザー外のプログラムが WebDriver コマンドを使って、ナビゲーション、要素の特定、操作の実行、ブラウザー状態の検査を行います。このインターフェイスは言語に依存しないため、異なるプログラミング言語のクライアントライブラリが、共通のプロトコルモデルを通じてブラウザー操作を表現できます。

WebDriver はしばしば Selenium を通じて利用されますが、この 2 つの用語は異なるレイヤーを指します。WebDriver はブラウザー制御の契約を定義し、Selenium はブラウザー自動化インターフェイスを利用するライブラリとインフラストラクチャを提供します。ブラウザー固有のドライバーが、特定のブラウザー環境に対するリモート側を実装します。

WebDriver コマンドがブラウザーに届くまで

WebDriver クライアントは、ブラウザーを制御するリモートエンドにコマンドを送信します。その関係性とコマンドおよびレスポンスの挙動は WebDriver プロトコル によって定義されています。

クライアントライブラリは、プログラミング言語のメソッドを提供します。リモートエンドはプロトコルリクエストを解釈し、対応するブラウザー操作を実行します。その後ブラウザーがナビゲーションを行い、状態を読み取り、またはドキュメントと対話し、リモートエンドは結果またはエラーを返します。

リモートエンドにはローカルからでもネットワークサービス経由でも到達できます。「リモート」とは制御の境界を表し、ブラウザーがパブリッククラウド上にあることを要求しません。同じコンピューター上のドライバープロセスであっても、制御対象のブラウザーの外側に存在します。

この分離によって、コンポーネントの責任分担が重要になります。アサーションはテストフレームワークに属し、セレクターはアプリケーションロジックに属し、プロトコルエラーはコマンド交換に属し、ページレンダリングはブラウザーに属します。観測された不具合を出力したレイヤーから診断を始めてください。

セッションが自動化の関係を確立する

WebDriver セッションは、クライアントとブラウザー環境の間の関係を確立します。その後のコマンドは、セッションが終了するまでそのセッション内で実行されます。

セッションの作成には、機能(capabilities)のネゴシエーションが含まれます。クライアントは必要とするブラウザー環境と対応オプションを表明し、リモートエンドは適切なセッションを作成できるかどうかを判断します。返される capabilities は、実際に確立されたセッションを記述します。

セッション識別子は、自動化プロトコルによって使用される参照です。これは Web サイトのログイン Cookie と同じものではありません。ブラウザーは、未認証ページを表示していても有効な WebDriver セッションを持つことができ、認証が期限切れになっても、自動化接続は継続する場合があります。

ジョブが終了したら、セッションを明示的に終了してください。1 つのウィンドウを閉じることと、自動化セッションを終了することは別の操作です。クリーンアップポリシーでは、ウィンドウ、ブラウザープロセス、およびジョブに関連付けられたリモートリソースを考慮する必要があります。

ドライバーとクライアントライブラリは別コンポーネント

クライアントライブラリは、ブラウザーコマンドをプログラミング言語で表現し、ドライバーはブラウザー向けのリモート実装を提供します。互換性のあるコンポーネントは、ワークフローに必要なプロトコル挙動に合意している必要があります。

この ChromeDriver 実装 は、Chrome のブラウザー自動化サポートを提供します。他のブラウザーにはそれぞれ独自の実装とサポート内容があります。1 つのブラウザー用ドライバーが、すべてのブラウザー製品を制御できると想定してはいけません。

ライブラリはドライバーの取得や選択を支援する場合がありますが、その利便性によって、デプロイにおけるバージョン互換性の問題がなくなるわけではありません。不具合を再現するときには、実際のブラウザーおよびドライバー環境を記録してください。

レイヤー責任範囲典型的な問い
アプリケーションまたはテスト必要なワークフローとアサーションを定義するユーザーは何を見るべきか?
クライアントライブラリ自動化コマンドを表現し送信するこの言語ではどのように操作を公開しているか?
ドライバーまたはリモートエンドブラウザー制御コマンドを実装するこの環境はその操作を実行できるか?
ブラウザーWeb コンテンツを読み込み実行する実際にどのドキュメントと状態がレンダリングされたか?

要素参照はドキュメントライフサイクルに属する

WebDriver の要素参照は、特定のブラウザーコンテキストとドキュメント状態で見つかった要素を識別します。その参照は、後から同じ視覚的位置を占めるものに対する恒久的なロケーターではありません。

ナビゲーションはドキュメントを置き換えます。クライアントサイドアプリケーションも、ページ URL を変えずに要素を置き換えることができます。以前に参照した要素がデタッチされた後もその参照を使い続けると、stale-element エラーが発生する可能性があります。

安定した意味に基づいてインタラクションを設計してください。意図したアクションに対応するコントロールを特定し、関連するページ状態を検証し、既知のドキュメントまたはコンポーネント置換後には要素を再取得します。保存した要素ハンドルを永続的な業務識別子として扱わないでください。

フレーム選択も重要です。iframe 内のノードは子ドキュメントに属するため、現在の閲覧コンテキストが要素検索が行われる場所を決定します。正しいセレクターでも、誤ったフレームで使えば依然として誤ったドキュメントを対象にします。

待機はアプリケーションの準備状態を説明すべき

有用な待機は、次のアクションに必要なアプリケーションの状態を記述します。ブラウザーのナビゲーション完了とビジネス上の状態の完了は、多くの場合別のイベントです。

たとえば、結果コンテナはレコードが到着する前に存在していることがあります。ボタンは、読み込みオーバーレイが操作を妨げている間も表示されている場合があります。ページタイトルは正しい一方で、認可プロンプトがメインコンテンツ領域を占有していることもあります。

アクションに合った条件を選びます。レコードを抽出する前に、そのレコードの識別子と必要なフィールドが存在することを確認します。コントロールを選択する前に、想定したコンテキストと状態で利用可能であることを確認します。アプリケーションが準備完了である唯一の根拠として、恣意的な遅延に頼ることは避けてください。

タイムアウト診断は具体的に保ちます。条件が満たされない場合、最終的な URL、表示されているページ、フレーム、および期待される状態を調査します。タイムアウトを延長しても、不正なセレクターが修正されたり、欠けている認可が補われたりするわけではありません。

待機メカニズムによって意味論が異なり、それらを安易に組み合わせると、実行を理解しづらくなることがあります。クライアントライブラリの文書化された挙動と、一貫したアプリケーションレベルの待機戦略を使用してください。

WebDriver と Selenium の関係

Selenium は、WebDriver クライアントサポートと追加インフラストラクチャを含むオートメーションのエコシステムです。 Selenium WebDriver のアーキテクチャ は、そのライブラリがサポートされた自動化実装を通じてブラウザーをどのように駆動するかを説明しています。

要件を指定する際には、この区別が重要です。「Selenium をサポート」とは、クライアントライブラリ、リモートサーバー、特定のブラウザールートのいずれかを指す場合があります。有用な要件は、ジョブに必要なプログラミング言語、ブラウザー、接続タイプ、および操作内容を名指しします。

Selenium Grid は、利用可能な実行環境にわたってブラウザーセッションを分散することに対処します。分散自体は、ページから抽出したデータを検証したり、ロケーターが正しいかどうかを判断したりはしません。これらのチェックは、アプリケーションロジックを持つジョブ内に保持してください。

テストフレームワークは、ブラウザー操作の周囲にアサーション、レポート、およびスイート構成を追加します。アプリケーションが誤った結果を生成したためにアサーションが失敗しても、WebDriver はアクションを正常に実行できる場合があります。これは矛盾ではなく、有用な区別です。

WebDriver BiDi と CDP は別個に互換性を確認する必要がある

WebDriver BiDi と CDP は、それぞれ独自の機能とサポート範囲を持つ追加のプロトコルサーフェスです。汎用的なリモートブラウザー接続の存在から、それらを推測すべきではありません。

BiDi は、コマンドとブラウザー生成イベントの双方向モデルを追加します。CDP は DevTools 指向のブラウザー制御を公開します。クライアントエコシステムは複数のインターフェースを利用する場合がありますが、アプリケーションは依然として、選択したブラウザーとリモートエンドポイントによって、その特定の操作がサポートされている必要があります。

アプリケーションがネットワーク観測やコンソールイベントに依存する場合、それらの要件を明示的に棚卸ししてください。プロトコル機能、クライアント API、ブラウザーのバージョン、リモートプロバイダーのルートを組み合わせとして確認します。

製品の広範なフレームワーク互換性の表明を、すべてのプロトコルに対するテスト済みサポートの主張に変換しないでください。文書化された接続例は、その接続経路に対する証拠であり、無関係なインターフェースに対する証拠ではありません。

マネージドブラウザーホスティングは別個の判断事項

マネージドブラウザーホスティングは、誰がブラウザー環境を運用するかを決定し、WebDriver はブラウザー制御インターフェースを決定します。ホスティングに関する判断とプロトコルに関する判断は、それらを同一視せずに一緒に評価すべきです。

Scrapeless Agent Browser はマネージドブラウザー実行を提供し、その ブラウザー概要 はそのインフラストラクチャ上の役割を説明しています。選択したワークフローには、現在文書化されている接続インターフェースを使用し、デプロイ計画を立てる前にプロトコル互換性を確立してください。

Selenium によるスクレイピングの議論 は、ブラウザードリブンなデータ収集に関連するコンテキストを提供します。ブラウザーのワークロードと接続要件を特定した後にのみ、 Scrapeless の料金 を確認してください。ホスティングでは、誤ったレコードを読み取る抽出ルールを修正できません。

結論

WebDriver は外部プログラムに、ブラウザーを制御する標準化された方法を提供します。信頼性の高い利用には、明確なセッションライフサイクル、互換性のあるコンポーネント、ドキュメントを意識した要素処理、およびアプリケーション状態に結び付けられた待機が必要です。要件内で実際のプロトコルと環境を明示し、ブラウザーホスティングとクライアントライブラリの選択がテスト可能な状態を保てるようにします。

ブラウザー実行要件を定義する

Scrapeless Agent Browser を、アプリケーションが実際に必要とする接続インターフェースとライフサイクルに照らして評価してください。

今すぐ登録して手に入れよう $5 in free credit — クレジットカード不要.

$5 分のクレジットを受け取る →

FAQ

Q: WebDriver はプログラミング言語ですか?

WebDriver はブラウザー制御インターフェースおよびプロトコルであり、プログラミング言語ではありません。クライアントライブラリは、その操作をオートメーションアプリケーションで使用される言語を通じて公開します。

Q: Selenium と WebDriver は同じものですか?

Selenium と WebDriver は異なるレイヤーを指します。Selenium はオートメーションエコシステムを提供し、WebDriver はそのクライアントによって使用されるブラウザー制御契約を定義します。

Q: 以前に見つけた要素がステールになるのはなぜですか?

要素が参照しているドキュメントノードが、現在のページ状態に対してもはや有効でなくなると、その要素はステールになります。ナビゲーションやコンポーネントの置き換えによって、似たコントロールが画面に残っていても、そのノードが切り離されることがあります。

Q: WebDriver セッションがあるということは、Webサイトへのログインが有効という意味ですか?

WebDriver セッションは Web サイトのログイン状態を確立するものではありません。オートメーションの接続状態とアプリケーションの認証は別個のライフサイクルです。

Q: WebDriver は同じコンピューター上のブラウザーを制御できますか?

WebDriver はローカルのリモートエンドを通じて、同じコンピューター上のブラウザーを制御できます。プロトコルの境界は、ブラウザーの物理的な位置とは別のものです。

参考文献