プロトコルコマンド
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プロトコルは、プロトコルの第2世代であり、現在、ほとんどのブラウザベンダーによって開発されています。その前身と比較して、このプロトコルは、フレームワークとリモートデバイス間の双方向通信(「Bidi」の由来)をサポートしています。さらに、ブラウザ内の現代的なWebアプリケーションをより適切に自動化するために、より優れたブラウザ内観のための追加のプリミティブが導入されています。
このプロトコルは現在開発中であるため、時間が経つにつれてより多くの機能が追加され、ブラウザでサポートされるようになります。WebdriverIOの便利なコマンドを使用している場合は、何も変わりません。WebdriverIOは、これらの新しいプロトコル機能が利用可能になり、ブラウザでサポートされ次第、すぐに活用します。
Appium
Appiumプロジェクトは、モバイル、デスクトップ、およびその他すべての種類のIoTデバイスを自動化する機能を提供します。WebDriverがブラウザとWebに焦点を当てているのに対し、Appiumのビジョンは、同じアプローチを任意のデバイスに使用することです。WebDriverが定義するコマンドに加えて、自動化されているリモートデバイスに固有の特別なコマンドがあります。モバイルテストのシナリオでは、AndroidとiOSの両方のアプリケーションで同じテストを作成および実行したい場合に理想的です。
Appiumのドキュメントによると、次の4つの原則に概説された哲学に従って、モバイル自動化のニーズを満たすように設計されています。
- アプリを自動化するために、アプリを再コンパイルしたり、何らかの方法で変更したりする必要はありません。
- テストを作成および実行するために、特定の言語やフレームワークに縛られる必要はありません。
- モバイル自動化フレームワークは、自動化APIに関して、車輪の再発明をするべきではありません。
- モバイル自動化フレームワークは、名前だけでなく、精神と実践においてもオープンソースであるべきです!
Chromium
Chromiumプロトコルは、ChromedriverまたはEdgedriverを介して自動化されたセッションを実行する場合にのみサポートされる、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供します。
Firefox
Firefoxプロトコルは、Geckodriverを介して自動化されたセッションを実行する場合にのみサポートされる、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供します。
Sauce Labs
Sauce Labsプロトコルは、Sauce Labsクラウドを使用して自動化されたセッションを実行する場合にのみサポートされる、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供します。
Selenium Standalone
Selenium Standaloneプロトコルは、Selenium Gridを使用して自動化されたセッションを実行する場合にのみサポートされる、WebDriverプロトコルの上に構築されたコマンドのスーパーセットを提供します。
JSON Wire Protocol
JSON Wire Protocolは、WebDriverプロトコルの前身であり、現在では非推奨になっています。特定の環境では一部のコマンドがまだサポートされている場合がありますが、そのコマンドを使用することはお勧めできません。
Mobile JSON Wire Protocol
Mobile JSON Wire Protocolは、JSON Wire Protocolの上に構築されたモバイルコマンドのスーパーセットです。これが非推奨になったため、Mobile JSON Wire Protocolも非推奨になりました。Appiumは一部のコマンドをまだサポートしている可能性がありますが、使用することはお勧めできません。