プロトコルコマンド
WebdriverIOは、リモートエージェント(例えば、ブラウザ、モバイルデバイス、テレビなど)を制御するために様々な自動化プロトコルに依存する自動化フレームワークです。リモートデバイスに応じて、異なるプロトコルが使用されます。これらのコマンドは、リモートサーバー(例:ブラウザドライバー)からのセッション情報に基づいて、BrowserまたはElementオブジェクトに割り当てられます。
内部的に、WebdriverIOはリモートエージェントとのほぼすべての対話にプロトコルコマンドを使用しています。しかし、BrowserまたはElementオブジェクトに割り当てられた追加コマンドによってWebdriverIOの使用が簡素化されます。例えば、プロトコルコマンドを使用して要素のテキストを取得する場合、以下のようになります:
const searchInput = await browser.findElement('css selector', '#lst-ib')
await client.getElementText(searchInput['element-6066-11e4-a52e-4f735466cecf'])
BrowserまたはElementオブジェクトの便利なコマンドを使用すると、これは次のように簡略化できます:
$('#lst-ib').getText()
以下のセクションでは、各プロトコルについて説明します。
WebDriverプロトコル
WebDriverプロトコルは、ブラウザの自動化のためのウェブ標準です。他のE2Eツールとは異なり、Firefox、Safari、ChromeやEdgeなどのChromiumベースのブラウザなど、実際にユーザーが使用しているブラウザでの自動化を保証し、WebKitなどのブラウザエンジンだけではなく、実際のブラウザで自動化できることを保証します。
Chrome DevToolsのようなデバッグプロトコルと比較したWebDriverプロトコルの利点は、すべてのブラウザで同じ方法でブラウザとやり取りできる特定のコマンドセットがあり、不安定性の可能性が低減されることです。さらに、このプロトコルはSauce Labs、BrowserStackおよびその他などのクラウドベンダーを使用した大規模なスケーラビリティを提供します。
WebDriver Bidiプロトコル
WebDriver Bidiプロトコルは、プロトコルの第二世代であり、現在ほとんどのブラウ ザベンダーによって開発が進められています。前世代と比較して、このプロトコルはフレームワークとリモートデバイス間の双方向通信(「Bidi」という名前の由来)をサポートしています。さらに、モダンなウェブアプリケーションをブラウザでより良く自動化するための、ブラウザの詳細な把握を可能にする追加のプリミティブを導入しています。
このプロトコルは現在開発中であるため、時間の経過とともに機能が追加され、ブラウザでサポートされるようになります。WebdriverIOの便利なコマンドを使用している場合、あなたにとっては何も変わりません。WebdriverIOは、これらの新しいプロトコル機能がブラウザで利用可能になり、サポートされるとすぐに活用します。
Appium
Appiumプロジェクトは、モバイル、デスクトップ、その他あらゆる種類のIoTデバイスを自動化する機能を提供します。WebDriverがブラウザとウェブに焦点を当てているのに対し、Appiumのビジョンは同じアプローチを任意のデバイスに適用することです。WebDriverが定義するコマンドに加えて、自動化されるリモートデバイスに特化した特別なコマンドがあります。モバイルテストシナリオでは、AndroidとiOSアプリケーションの両方で同じテストを作成・実行したい場合に理想的です。
Appiumのドキュメントによれば、以下の4つの原則に基づく哲学 に従ってモバイル自動化のニーズを満たすように設計されています:
- アプリを自動化するために、再コンパイルしたり変更したりする必要がないようにすべきである。
- テストを書いて実行するために、特定の言語やフレームワークに縛られるべきではない。
- モバイル自動化フレームワークは、自動化APIに関して車輪の再発明をすべきではない。
- モバイル自動化フレームワークは、精神と実践において、また名前においてもオープンソースであるべきだ!
Chromium
Chromiumプロトコルは、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供し、ChromedriverまたはEdgedriverを通じて自動化セッションを実行する場合にのみサポートされます。
Firefox
Firefoxプロトコルは、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供し、Geckodriverを通じて自動化セッションを実行する場合にのみサポートされます。
Sauce Labs
Sauce Labsプロトコルは、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供し、Sauce Labsクラウドを使用して自動化セッションを実行する場合にのみサポートされます。
Selenium Standalone
Selenium Standaloneプロトコルは、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供し、Selenium Gridを使用して自動化セッションを実行する場合にのみサポートされます。
JSON Wire Protocol
JSON Wire ProtocolはWebDriverプロトコルの前身であり、現在は__非推奨__です。一部のコマンドは特定の環境ではまだサポートされているかもしれませんが、そのコマンドの使用は推奨されません。
Mobile JSON Wire Protocol
Mobile JSON Wire Protocolは、JSON Wire Protocolの上に構築されたモバイルコマンドのスーパーセットです。JSON Wire Protocolが非推奨となったため、Mobile JSON Wire Protocolも__非推奨__となりました。Appiumは一部のコマンドをまだサポートしているかもしれませんが、それらの使用は推奨されません。