WebDriver

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-webdriver2-20260511/
最新の公開バージョン:
https://www.w3.org/TR/webdriver2/
最新の編集者草案:
https://w3c.github.io/webdriver/
履歴:
https://www.w3.org/standards/history/webdriver2/
コミット履歴
テストスイート:
https://wpt.live/webdriver/
実装報告:
https://wpt.fyi/results/webdriver
編集者:
Simon Stewart (Apple)
David Burns (BrowserStack)
フィードバック:
GitHub w3c/webdriver (プルリクエスト, 新しい課題, 未解決の課題)
チャンネル
irc.w3.org の #webdriver

概要

WebDriver は、ユーザーエージェントの 内省および制御を可能にするリモート制御インターフェイスである。 これは、アウトオブプロセスのプログラムが Web ブラウザーの振る舞いを遠隔から指示する方法として、 プラットフォームおよび言語に中立なワイヤープロトコルを提供する。

Web 文書内の DOM 要素を発見および操作し、 ユーザーエージェントの振る舞いを制御するための 一連のインターフェイスが提供される。 これは主に、Web 作者が、別個の制御プロセスから ユーザーエージェントを自動化するテストを書くことを 可能にすることを意図しているが、ブラウザー内スクリプトが — 場合によっては別個の — ブラウザーを制御できるようにする方法で 用いることもできる。

この文書のステータス

この節は、この文書の公開時点における ステータスを説明する。現在の W3C 出版物の一覧およびこの技術報告の最新改訂版は、 W3C 標準およびドラフト 索引にある。

この文書は、Browser Testing and Tools Working Group により、 勧告 トラックを用いた 作業草案として公開された。

作業草案としての公開は、 W3C およびその会員による 承認を意味しない。

これはドラフト文書であり、いつでも他の文書によって 更新、置換、または廃止される可能性がある。この文書を 作業中のもの以外として引用することは不適切である。

この文書は、 W3C Patent Policy の下で運営される グループによって作成された。 W3C は、 そのグループの成果物に関連して行われた 特許開示の公開一覧 を維持している。そのページには 特許を開示するための手順も含まれる。ある特許が 必須請求項 を含むと実際に知っている個人は、 W3C Patent Policy の 6 節 に従ってその情報を開示しなければならない。

この文書は、 2025 年 8 月 18 日版 W3C Process Document によって管理される。

1. 設計

この節は非規範的である。

WebDriver 標準は、いくつかの設計目標に従おうとする:

1.1 互換性

この仕様は、広く使われている Selenium WebDriver ブラウザー自動化フレームワークに由来する。 Selenium は長く存続しているプロジェクトであり、 その歴史と利用範囲の広さにより、 期待される機能が広範囲に及ぶ。 この仕様は、これらの期待をその設計に反映している。 改善または明確化が行われた箇所では、 Selenium WebDriver の既存ユーザーが 予期しない破壊的変更を避けられるよう、慎重に行われている。

1.2 単純性

この仕様の最大の想定利用者層は、 ブラウザーの自動化に依存する自動テストや 監視、負荷テストなどのその他ツールを書く ソフトウェア開発者およびテスターである。 そのため、要素への入力 や要素のクリックなどの一般的なタスクを 単純化するコマンドを提供するよう配慮されている。

1.3 拡張

WebDriver は、完全には ECMAScript で実装できない機能を 自動化する目的で、他者がプロトコルへの拡張を定義するための仕組みを提供する。 これにより、他の Web 標準が新しいプラットフォーム機能の自動化を サポートできる。また、ベンダーが自らのブラウザーに固有の機能を 公開することも可能になる。

2. 適合性

非規範的と明示された節に加え、この仕様におけるすべての作成ガイドライン、図、例、および注記は 非規範的である。この仕様のそれ以外のすべては規範的である。

アルゴリズムまたは具体的な手順として表現された 適合要件は、最終結果が等価である限り、 任意の方法で実装してよい。 この文書のアルゴリズムは通常、性能ではなく 読みやすさを念頭に置いて書かれている。

3. 用語

式において、すべての数は整数であり、 加算は “+” で、 減算は “−” で、 除算は “÷” で、 ビット単位 OR は “|” で表される。 文字 “(” および “)” は、これらの文脈における論理的なグループ化を示すために用いられる。

数学関数 min(value, value[, value]) は、2 つ以上の値のうち最小の項目を返す。 逆に、関数 max(value, value[, value]) は、2 つ以上の値のうち最大の項目を返す。

数学関数 floor(value) は、正の無限大に最も近い整数のうち、 value より大きくない最大の整数を生成する。

Universally Unique Identifier (UUID) は、中央登録プロセスを必要としない 128 ビット長の URN である。 UUID の 生成とは、 真にランダムまたは擬似ランダムな数から UUID を作成すること、 およびそれを文字列表現へ変換することを意味する。 [RFC4122]

Unix Epoch は、The Open Group Base Specifications Issue 7 4.15 節 (IEEE Std 1003.1) で説明されているように、 エポックから経過した秒数を近似する値である。

integer は、Number のうち、 ToInteger 操作の下で 変化しないものである。

ECMAScript プロパティの 初期値 は、そのプロパティに対してプラットフォームが定義する値、 すなわちコンテンツスクリプトによるシャドーイングが存在しない場合に そのプロパティが持つ値である。

ブラウザー chrome は、アクセスされる Web コンテンツとは区別される、 ユーザーがユーザーエージェント自体と 相互作用するための表現を指す 非規範的な用語である。 ブラウザー chrome 要素 の例には、これらに限定されないが、 ツールバー(ブックマークツールバーなど)、 メニュー(ファイルメニューやコンテキストメニューなど)、 ボタン(戻るボタンや進むボタンなど)、 ドアハンガー(セキュリティや証明書インジケーターなど)、 および装飾(オペレーティングシステムのウィジェット境界など)が含まれる。

4. インターフェイス

webdriver-active flag は、ユーザーエージェントがリモート制御下にあるとき true に設定される。 初期値は false である。

WebIDLinterface mixin NavigatorAutomationInformation {
  readonly attribute boolean webdriver;
};
Navigator includes NavigatorAutomationInformation;
注記

NavigatorAutomationInformation インターフェイスは、 WorkerNavigator で 公開されるべきではない。

webdriver

webdriver-active flag が設定されている場合は true を返し、 そうでなければ false を返す。

これは Evil Bit [RFC3514] を補完するものであることが認識されている。

5. ノード

WebDriver プロトコルは、次の間の通信から成る:

ローカルエンド

ローカルエンドはプロトコルのクライアント側を表し、 通常は WebDriver プロトコル の上に API を提供する 言語固有のライブラリの形をとる。 この仕様は、ワイヤープロトコルのレベルを超える それらのライブラリの詳細について、いかなる制限も課さない。

リモートエンド
リモートエンドは プロトコル のサーバー側をホストする。WebDriver プロトコルに応答する リモートエンド の振る舞いを定義することが、 この仕様の最大部分を成す。

リモート エンドについて、標準は ノード種別として知られる、2 つの広い適合 クラスを定義する:

中継ノード
中継ノードは、プロキシとして動作し、 ローカルエンド と、 リモートエンド の両方を プロトコル のために実装するものをいう。ただし、それらは リモートエンド手順を直接実装することは期待されない。 特定の中継ノードエンドポイントノードの間の ノードは、そのエンドポイントノード上流 にあると言われる。
エンドポイントノード
エンドポイントノードは、ノードの連鎖における最後の リモートエンド であり、中継ノードではないものである。 エンドポイントノードは、ユーザーエージェントまたは類似のプログラムによって実装される。

すべてのリモートエンドのノード種別は、 ローカルエンド の観点から、リモートエンドとブラックボックス的に区別不能でなければならず、 したがってワイヤープロトコルの観点で リモートエンドに対する要件に 拘束される。

リモートエンド準備完了 状態は、 それが新しい接続を受け入れられるかどうかを示す。それは、 実装がエンドポイントノードであり、 アクティブな HTTP セッションのリストが空でない場合、またはそれ以外で リモートエンドが、 新規セッションを作成しようとしても 失敗する状態にあることが分かっている場合、false でなければならない。 それ以外のすべての場合、それは true でなければならない。

中間ノードが、複数のエンドポイントノードを 管理するマルチプレクサーである場合、これは、例えば最大容量に達した場合などに、より多くの セッションを 提供できる能力を示す可能性がある。

6. プロトコル

WebDriver のリモートエンドは、 エンドポイントが異なるコマンドに対応付けられる、 HTTP 準拠のワイヤープロトコルを 提供しなければならない。

この標準はリモートエンドのプロトコルのみを定義するため、 ローカルエンドをどのように実装すべきかについて いかなる要求も課さない。 ローカル エンドは、リモートエンドのプロトコルを話せる範囲でのみ 互換であることが期待される。 それらが公開するユーザー向け API については、いかなる要件も課されない。

6.1 アルゴリズム

この仕様のさまざまな部分は、段階的なアルゴリズムとして書かれている。 これらのアルゴリズムの詳細には規範的な意味はない。 実装は、この仕様と等価な出力を生成する任意の実装戦略を 自由に採用してよい。 特に、この文書のアルゴリズムは性能ではなく 読みやすさに最適化されている。

値を返すアルゴリズムが失敗可能である場合、 それらは success または error のいずれかを 返すものとして書かれる。 success 値は、返される値を包含する関連付けられた data フィールドを持つ。 一方、error 値は、関連付けられたエラーコードを持つ。

失敗可能なアルゴリズムを呼び出すとき、 構文 “Let result be the result of trying to call algorithm” は、 次と等価である。

  1. temp を、algorithm を呼び出した結果とする。

  2. temperror である場合は temp を返す。 そうでなければ、resulttempdata フィールドとする。

object から name を持つ プロパティを 取得することの結果は、 object 上で Object.[[GetOwnProperty]](name) を 呼び出した結果と同じであると定義される。

object から引数 name および default を用いて デフォルト付きでプロパティを取得することの結果は、 object 上で Object.[[GetOwnProperty]](name) を呼び出した結果が undefined 以外の値であればその結果と同じであり、 そうでなければ default であると定義される。

object 上で引数 name および value を用いて プロパティを設定することは、 object 上で Object.[[Put]](name, value) を呼び出すことと 同じであると定義される。

JSON Object 型の object による JSON 直列化の結果は、 stringify(object) を呼び出した結果として定義される。

text による JSON 逆直列化の結果は、 parse(text) を呼び出した結果として 定義される。

6.2 コマンド

WebDriver プロトコルはコマンドに編成される。 この仕様で定義されたメソッドおよびテンプレートを持つ各 HTTP リクエストは、 単一のコマンドを表す。 したがって各コマンドは単一のHTTP レスポンスを生成する。

コマンドに応答して、 リモートエンドは、 リモートエンド手順として知られる 一連の動作を実行する。 これらは、リモートエンドが特定の コマンドを受信したときに行う動作の列を提供する。

6.3 処理モデル

リモートエンドは、 クライアントからリクエストを読み取りレスポンスを書き込む HTTP サーバーであり、 通常は TCP ソケット越しに行われる。 この仕様の目的上、特定のローカルエンドリモートエンドの間のデータ伝送は、 接続によってモデル化される。 リモートエンドは、その接続に対して バイトを書き込むこと、および バイトを読み取ることができる。 ただし、この接続がどのように機能し、 どのように確立されるかについての正確な詳細は範囲外である。

接続が確立された後、 リモートエンドは 次の手順を実行しなければならない:

  1. While 接続が閉じられていない間:

    1. データから完全なHTTP リクエストを構築できるまで、 接続から バイトを読み取るrequest を、[RFC7230] の要件に従って、受信したデータから構築された リクエストとする。 完全なHTTP リクエストを 構築できない場合、 リモートエンドは、 接続を閉じるか、 ステータスコード 500 の HTTP レスポンスを返すか、または errorエラー コード unknown error で返さなければならない。

    2. request match を、requestメソッドおよび URL を引数として リクエストを照合するアルゴリズムの結果とする。

    3. request matcherror 型である場合、 request matchエラーコードエラーを送信し、 continue する。

      そうでなければ、command および URL variablesrequest match のデータとする。

    4. session を null とする。

    5. URL variables が "session id" を 含む場合:

      注記

      この条件は、New Session および Status コマンドと、特定のセッション上で 動作しない任意の拡張コマンドを除外することを 意図している。

      1. session idURL variables["session id"] とする。

      2. アクティブセッションのリスト内の 各 active session について:

        1. active sessionセッション IDsession id と等しい場合、sessionactive session とし、break する。

      3. sessionnull である場合、 エラーコード invalid session idエラーを送信し、 その後 continue する。

    6. リモートエンドリクエスト キューに、次の手順を実行するタスクを キューに入れる:

      1. セッションが、アクティブ セッションのリストにもはや含まれていない場合、エラーを送信し、その エラーコードinvalid session id として、return する。
      2. parametersnull とする。

      3. requestメソッドが POST である場合:

        1. parse result を、request本文を引数として JSON として解析することの 結果とする。この処理が例外を投げた場合、 エラーコード invalid argument を持つ error を返し、 この全体アルゴリズムのステップ 1 に戻る。

        2. parse resultObject でない場合、 エラーコード invalid argumentエラーを送信し、 この全体アルゴリズムのステップ 1 に戻る。

          そうでなければ、parametersparse result とする。

      4. navigate result を、session を用いて ナビゲーションの完了を 待つことの結果とする。

      5. navigate resulterror である場合、 navigate resultエラー コードに等しいエラーコードエラーを送信し、 return する。

      6. response result を、command について sessionURL variables、および parameters を用いて リモートエンド 手順を実行することにより得られる戻り値とする。

      7. response resulterror である場合、 response resultエラーコードに等しい エラーコードエラーを送信し、 return する。

      8. Assert: response resultsuccess である。

      9. response dataresponse result の data とする。

      10. ステータス 200 および response dataレスポンスを送信する。

error code および任意の error data 辞書を用いて エラーを 送信することが要求された場合、 リモートエンドは次の手順を実行しなければならない:

  1. status および name を、 error code に対する エラーレスポンスデータとする。

  2. message を、エラーの理由についての人間可読な説明を含む 実装定義の文字列とする。

  3. stacktrace を、エラーが発生した時点でのアクティブなスタックフレームの スタックトレース報告を含む実装定義の文字列とする。

    body を、次のプロパティで初期化された新しい JSON Object とする:

    "error"
    name
    "message"
    message
    "stacktrace"
    stacktrace
  4. error data 辞書が何らかのエントリを含む場合、 body 上の "data" フィールドを、 その辞書で埋められた新しい JSON Object に設定する。

  5. status および body を引数として レスポンスを送信する。

引数 status および data を用いて レスポンスを送信する ことが要求された場合、 リモートエンドは次の手順を実行しなければならない:

  1. response を新しいレスポンスとする。

  2. responseHTTP ステータスstatus に設定し、 ステータスメッセージステータスコード レジストリにおける status の説明に対応する文字列に設定する。

  3. 次の値を用いて、responseヘッダー名前および 設定する:

    Content-Type
    "application/json; charset=utf-8"
    Cache-Control
    "no-cache"
  4. response本文を、 キー "value" が data に設定された JSON ObjectJSON 直列化UTF-8 エンコードしたものとする。

  5. response bytes を、[RFC7230] の規則に従って response を直列化した結果のバイト列とする。

  6. response bytes接続書き込む

6.4 リクエストのルーティング

リクエストルーティングとは、 HTTP リクエストから、 そのリクエストが表すコマンドを実装するために必要な 一連の手順へ至る過程である。

リモートエンドは、関連付けられた URL 接頭辞を持つ。 これは、そのリモートエンド上の すべての WebDriver 定義 URL に対する接頭辞として用いられる。 これは undefined または path-absolute URL の いずれかでなければならない。

method および URL が与えられたときに リクエストを 照合するためには、 次の手順を実行しなければならない:

  1. endpoints を、 エンドポイント表内の各行を含むリストとする。

  2. URL 接頭辞とエントリの URI テンプレートを連結したものが、 URLパスと等しい有効な展開を持たない endpoints 内の各エントリを削除する。

  3. endpoints にエントリが存在しない場合、 エラーコード unknown command を持つ error を返す。

  4. method 列が method と等しくない endpoints 内の各エントリを削除する。

  5. endpoints にエントリが存在しない場合、 エラーコード unknown method を持つ error を返す。

  6. この時点で endpoints 内にはちょうど 1 つのエントリが存在する。 entry をこのエントリとする。

  7. URI template を、URL 接頭辞entryURI template の連結とする。

  8. commandentryコマンドとする。

  9. URL variables を、URI template 内に定義された各変数について 1 つの エントリを持つ マップとする。 そのエントリ名はテンプレート変数名に等しく、 エントリ値は、URI template を展開して URLパスに一致させるために必要な 変数値である。

  10. command および URL variables をデータとして持つ success を返す。

6.5 エンドポイント

次のエンドポイント表は、 各エンドポイント ノードコマンドに対する メソッド および URI テンプレートを列挙する。 拡張コマンドは、この表に暗黙的に 追加される。

メソッド URI テンプレート コマンド
POST /session 新規セッション
DELETE /session/{session id} セッションを削除
GET /status ステータス
GET /session/{session id}/timeouts タイムアウトを取得
POST /session/{session id}/timeouts タイムアウトを設定
POST /session/{session id}/url 移動先へナビゲート
GET /session/{session id}/url 現在の URL を取得
POST /session/{session id}/back 戻る
POST /session/{session id}/forward 進む
POST /session/{session id}/refresh 更新
GET /session/{session id}/title タイトルを取得
GET /session/{session id}/window ウィンドウハンドルを取得
DELETE /session/{session id}/window ウィンドウを閉じる
POST /session/{session id}/window ウィンドウへ切り替え
GET /session/{session id}/window/handles ウィンドウハンドル群を取得
POST /session/{session id}/window/new 新規ウィンドウ
POST /session/{session id}/frame フレームへ切り替え
POST /session/{session id}/frame/parent 親フレームへ切り替え
GET /session/{session id}/window/rect ウィンドウ矩形を取得
POST /session/{session id}/window/rect ウィンドウ矩形を設定
POST /session/{session id}/window/maximize ウィンドウを最大化
POST /session/{session id}/window/minimize ウィンドウを最小化
POST /session/{session id}/window/fullscreen ウィンドウを全画面化
GET /session/{session id}/element/active アクティブ要素を取得
GET /session/{session id}/element/{element id}/shadow 要素のシャドウルートを取得
POST /session/{session id}/element 要素を検索
POST /session/{session id}/elements 要素群を検索
POST /session/{session id}/element/{element id}/element 要素から要素を検索
POST /session/{session id}/element/{element id}/elements 要素から要素群を検索
POST /session/{session id}/shadow/{shadow id}/element シャドウルートから要素を検索
POST /session/{session id}/shadow/{shadow id}/elements シャドウルートから要素群を検索
GET /session/{session id}/element/{element id}/selected 要素が選択されているか
GET /session/{session id}/element/{element id}/attribute/{name} 要素属性を取得
GET /session/{session id}/element/{element id}/property/{name} 要素プロパティを取得
GET /session/{session id}/element/{element id}/css/{property name} 要素の CSS 値を取得
GET /session/{session id}/element/{element id}/text 要素テキストを取得
GET /session/{session id}/element/{element id}/name 要素タグ名を取得
GET /session/{session id}/element/{element id}/rect 要素矩形を取得
GET /session/{session id}/element/{element id}/enabled 要素が有効か
GET /session/{session id}/element/{element id}/computedrole 算出ロールを取得
GET /session/{session id}/element/{element id}/computedlabel 算出ラベルを取得
POST /session/{session id}/element/{element id}/click 要素クリック
POST /session/{session id}/element/{element id}/clear 要素クリア
POST /session/{session id}/element/{element id}/value 要素にキー送信
GET /session/{session id}/source ページソースを取得
POST /session/{session id}/execute/sync スクリプトを実行
POST /session/{session id}/execute/async 非同期スクリプトを実行
GET /session/{session id}/cookie すべての Cookie を取得
GET /session/{session id}/cookie/{name} 名前付き Cookie を取得
POST /session/{session id}/cookie Cookie を追加
DELETE /session/{session id}/cookie/{name} Cookie を削除
DELETE /session/{session id}/cookie すべての Cookie を削除
POST /session/{session id}/actions アクションを実行
DELETE /session/{session id}/actions アクションを解放
POST /session/{session id}/alert/dismiss アラートを破棄
POST /session/{session id}/alert/accept アラートを受け入れ
GET /session/{session id}/alert/text アラートテキストを取得
POST /session/{session id}/alert/text アラートテキストを送信
GET /session/{session id}/screenshot スクリーンショットを撮影
GET /session/{session id}/element/{element id}/screenshot 要素スクリーンショットを撮影
POST /session/{session id}/print ページを印刷

6.6 エラー

エラーは、 WebDriver プロトコルにおいて、 4xx または 5xx 範囲のHTTP ステータスを持つ HTTP レスポンスと、 エラーの詳細を含む JSON 本文によって表される。 本文は JSON Object であり、 "value" という名前のフィールドを持つ。 その値は、3 つ、場合によっては 4 つのフィールドを持つオブジェクトである:

次の表は、各エラーコード、 それに関連付けられたHTTP ステータス、 JSON error コード、 およびエラーの非規範的な説明を列挙する。 特定のエラーコードに対する エラー レスポンスデータは、 そのエラーコードに 対応する行の HTTP Status 列および JSON Error Code 列の値である。

エラーコード HTTP ステータス JSON エラーコード 説明
element click intercepted 400 element click intercepted Element Click コマンドは 完了できなかった。 イベントを受け取る要素が、クリックを要求された要素を 覆っているためである。
element not interactable 400 element not interactable 要素がポインターまたは キーボード相互作用可能でないため、 コマンドを完了できなかった。
insecure certificate 400 insecure certificate ナビゲーションにより ユーザーエージェントが証明書警告に遭遇した。 これは通常、期限切れまたは無効な TLS 証明書の結果である。
invalid argument 400 invalid argument コマンドに渡された引数が 無効または不正な形式である。
invalid cookie domain 400 invalid cookie domain 現在のページとは異なるドメインの下に Cookie を設定しようとする 不正な試みが行われた。
invalid element state 400 invalid element state 要素が無効な状態にあるため、コマンドを完了できなかった。 例えば、クリアしようとした要素が 編集可能かつリセット可能の両方でない場合などである。
invalid selector 400 invalid selector 引数が無効なセレクターであった。
invalid session id 404 invalid session id 指定された session idアクティブセッションのリストにない場合に発生する。 これは、セッションが存在しないか、またはアクティブでないことを 意味する。
javascript error 500 javascript error ユーザーによって提供された JavaScript の実行中にエラーが発生した。
move target out of bounds 500 move target out of bounds マウス相互作用の対象がブラウザーのビューポート内になく、 そのビューポート内に持ち込むこともできない。
no such alert 404 no such alert モーダルダイアログが開いていないときに、 それに対して操作を行おうとした。
no such cookie 404 no such cookie session現在の閲覧 コンテキストアクティブ文書関連 Cookieの中に、 与えられたパス名に一致する Cookie が見つからなかった。
no such element 404 no such element 与えられた検索パラメーターを用いて、 ページ上の要素を見つけることができなかった。
no such frame 404 no such frame フレームが見つからないため、 フレームへ切り替えるコマンドを満たすことができなかった。
no such window 404 no such window ウィンドウが見つからないため、 ウィンドウへ切り替えるコマンドを満たすことができなかった。
no such shadow root 404 no such shadow root その要素はシャドウルートを持たない。
script timeout error 500 script timeout スクリプトがタイムアウトの期限切れ前に完了しなかった。
session not created 500 session not created 新しいセッションを作成できなかった。
stale element reference 404 stale element reference 参照された要素がもはや DOM に接続されていないため、 コマンドが失敗した。
detached shadow root 404 detached shadow root 参照されたシャドウルートがもはや DOM に接続されていないため、 コマンドが失敗した。
timeout 500 timeout 操作がタイムアウトの期限切れ前に完了しなかった。
unable to set cookie 500 unable to set cookie Cookie の値を設定するコマンドを満たすことができなかった。
unable to capture screen 500 unable to capture screen 画面キャプチャが不可能になった。
unexpected alert open 500 unexpected alert open モーダルダイアログが開いており、この操作をブロックしていた。
unknown command 404 unknown command リモートエンドがそれを認識していないため、 コマンドを実行できなかった。
unknown error 500 unknown error コマンドの処理中に、 リモートエンド内で 不明なエラーが発生した。
unknown method 405 unknown method 要求されたコマンドは既知の URL に一致したが、 その URL に対するいずれのメソッドにも一致しなかった。
unsupported operation 500 unsupported operation 適切に実行されるべきコマンドが、 何らかの理由でサポートできないことを示す。

エラーデータ 辞書は、error オブジェクトに任意で含めることができる、 文字列キーから JSON 直列化可能な値への対応付けである。

6.7 拡張

この節で定義される用語を用いて、他者は標準プロトコルと シームレスに統合される追加コマンドを定義してよい。 これにより、ベンダーは自らのユーザーエージェントに固有の機能を 公開でき、また他の Web 標準は新しいプラットフォーム機能を自動化するための コマンドを定義できる。

この方法で定義されるコマンドは 拡張 コマンドと呼ばれ、 他のコマンドと異なる振る舞いはしない。 それぞれが専用の HTTP エンドポイントと一組の リモートエンド手順を持つ。

拡張コマンドは、 関連付けられた 拡張コマンド URI テンプレートを持つ。 これは URI Template 文字列であり、 そのコマンドが行うことにある程度似ているべきである。 この値は、HTTP メソッドおよび拡張コマンドとともに、 エンドポイント表に追加され、 したがって他の組み込みコマンドと同じ リクエストルーティングの 規則に従う。

他の実装との潜在的なリソース競合を避けるため、 ベンダー固有の拡張 コマンド URI テンプレートは、ベンダーおよび UA を一意に識別する 1 つ以上のパスセグメントで始まらなければならない。 ベンダーは、[CSS21] で概説されているように、特に ベンダーキーワードに関する 4.1.2.2 節において、 追加文字なしのベンダー接頭辞をこのパス要素の名前として用い、 ベンダーが選択した UA 識別子を含めることが推奨される。

注記

他の仕様は、追加 WebDriver ケイパビリティを定義してよい。 定義される各ケイパビリティは、 ":"(コロン)文字を含まない文字列である ケイパビリティ名と、 JSON 型を持つ単一の引数 value を取り、 逆直列化されたケイパビリティ値を包む success または error の いずれかを返す一連の手順である 追加ケイパビリティ逆直列化 アルゴリズムを持たなければならない。

追加 WebDriver ケイパビリティは、 一致ケイパビリティ直列化アルゴリズムを 定義してもよい。 これは、ケイパビリティが現在の実装によって一致するかどうかを判定し、 ユーザーに返す任意の算出値を提供するために用いられる一連の手順である。 この一連の手順は、対応する 追加 ケイパビリティ逆直列化アルゴリズムの出力である 単一の引数 value を取り、 ケイパビリティが一致しないことを示す null、または ケイパビリティが一致する場合は非 null の JSON 直列化可能な値を返す。

他の仕様は、WebDriver 新規セッションアルゴリズムを定義してもよい。 これは新しいセッションが作成された直後、かつ 新規セッションレスポンスが リモートエンドに送信される前に呼び出される。 これらのアルゴリズムは、確立される WebDriver セッションを表す session と、 リモートエンドに返される ケイパビリティオブジェクトである capabilities を用いて呼び出される。 そのようなアルゴリズムが、同じ仕様によって定義された 追加 WebDriver ケイパビリティである名前を持つ ケイパビリティオブジェクト内の任意のエントリを変更することは許可される。

リモートエンドは、 構成を提供するため、またはその他のベンダー固有の必要を満たすために用いられる 追加のケイパビリティである 拡張ケイパビリティを 導入してもよい。 拡張ケイパビリティのキーは、 実装固有の名前空間を示す ":"(コロン)文字を 含まなければならない。 値は任意の JSON 型でよい。

拡張コマンドと同様に、 拡張ケイパビリティ名前空間を示すために用いられるキーは、 [CSS21] に列挙されている ベンダーキーワードに 基づき、文字列内の最初の ":" 文字に先行することが推奨される。

7. ケイパビリティ

WebDriver の capabilities は、特定の実装がサポートする機能を伝達するために使用される。 ローカル エンドは、新しいセッションを作成するときに、 リモートエンドに 満たすことを要求する機能を定義するために capabilities を使用できる。 同様に、リモートエンドは、セッションの完全な機能セットを 記述するために capabilities を使用する。

次の標準ケイパビリティ表は、 各実装がサポートしなければならないケイパビリティを列挙する。 実装は、追加の拡張ケイパビリティを 定義してよい。

ケイパビリティ キー 値型 説明
ブラウザー名 "browserName" string ユーザーエージェントを識別する。
ブラウザーバージョン "browserVersion" string ユーザーエージェントのバージョンを識別する。
プラットフォーム名 "platformName" string エンドポイントノードの オペレーティングシステムを識別する。
安全でない TLS 証明書を受け入れる "acceptInsecureCerts" boolean ナビゲーション時に、信頼されていない TLS 証明書および自己署名 TLS 証明書が、 セッションの期間中、 暗黙的に信頼されるかどうかを示す。
ページ 読み込み戦略 "pageLoadStrategy" string セッションページ読み込み 戦略を定義する。
プロキシ設定 "proxy" JSON Object セッションプロキシ 設定を定義する。
ウィンドウの寸法指定/位置指定 "setWindowRect" boolean リモートエンドが、すべてのサイズ変更および再配置コマンドをサポートするかどうかを示す。
セッションタイムアウト "timeouts" JSON Object 特定のセッション操作に課されるタイムアウトを記述する。
厳密なファイル操作可能性 "strictFileInteractability" boolean セッション厳密なファイル操作可能性を定義する。
未処理プロンプト動作 "unhandledPromptBehavior" string セッションユーザープロンプト ハンドラーを記述する。 既定値は "dismiss and notify" である。
ユーザーエージェント "userAgent" string エンドポイントノード既定の User-Agent 値を識別する。

7.1 プロキシ

プロキシ 構成ケイパビリティは、 主たるケイパビリティ内にネストされた JSON Objectである。 実装は追加のプロキシ構成オプションを定義してよいが、 以下に列挙されるものの意味論を変更してはならない。

キー 値型 説明 妥当な値
proxyType string プロキシ構成の種類を示す。 "pac", "direct", "autodetect", "system", または "manual"。
proxyAutoconfigUrl string proxyType が "pac" と等しい場合に、 プロキシ 自動構成ファイルの URL を定義する。 任意のURL
httpProxy string proxyType が "manual" である場合に、HTTP トラフィック用のプロキシ ホストを定義する。 スキーム "http" 用の ホストおよび任意のポート
noProxy array proxyType が "manual" である場合に、プロキシを迂回すべきアドレスを列挙する。 任意個数のStringを含む List
sslProxy string proxyType が "manual" である場合に、暗号化された TLS トラフィック用のプロキシ ホストを定義する。 スキーム "https" 用の ホストおよび任意のポート
socksProxy string proxyType が "manual" である場合に、 SOCKS プロキシ用の プロキシホストを定義する。 undefined スキームを持つ ホストおよび任意のポート
socksVersion number proxyType が "manual" である場合に、 SOCKS プロキシのバージョンを定義する。 0 以上 255 以下の任意のinteger

scheme に対する ホストおよび 任意のポートは、 妥当なホスト、任意でそれに続くコロンおよび妥当な ポートであると定義される。 ホスト資格情報を含むことができる。 ポートが省略され、かつ scheme既定ポートを持つ場合、 これは暗黙のポートである。そうでなければ、ポートは未定義のままとなる。

"direct" のproxyTypeは、 ブラウザーがプロキシを一切使用すべきでないことを示す。

"system" のproxyTypeは、 ブラウザーが基盤となるオペレーティングシステムに構成された 各種プロキシを使用すべきであることを示す。

"autodetect" のproxyTypeは、 使用するプロキシが実装固有の方法で検出されるべきであることを示す。

引数 parameterプロキシとして逆直列化するための リモートエンド手順は次の通りである:

  1. parameter が JSON Object でない場合、 エラーコード invalid argument を持つ error を返す。

  2. proxy を、新しい空の プロキシ構成オブジェクトとする。

  3. parameter 内の列挙可能な各自前プロパティについて、 次の副手順を実行する:

    1. key をプロパティの名前とする。

    2. value を、parameter から name という名前の プロパティを 取得することの結果とする。

    3. プロキシ構成表内に key に一致する key が存在しない場合、 エラーコード invalid argument を持つerrorを返す。

    4. value がその key に対する valid values のいずれでもない場合、 エラー コード invalid argument を持つ errorを返す。

    5. proxy 上で プロパティを設定し、 keyvalue にする。

  4. proxy が "proxyType" に対する 自前プロパティを持たない場合、 エラー コード invalid argument を持つ errorを返す。

  5. proxy から "proxyType" という名前の プロパティを取得することの結果が "pac" と等しく、かつ proxy が "proxyAutoconfigUrl" に対する 自前プロパティを持たない場合、 エラーコード invalid argument を持つ errorを返す。

  6. proxy が "socksProxy" に対する 自前プロパティを持ち、かつ "socksVersion" に対する自前プロパティを 持たない場合、 エラー コード invalid argument を持つ errorを返す。

  7. proxy をデータとして持つ success を返す。

プロキシ 構成オブジェクトは、 その自前プロパティのうち プロキシ構成内のキーに一致する各ものが、 そのキーに対する妥当性基準を満たす JSON Objectである。

7.2 ケイパビリティの処理

parameters およびセッション 構成フラグ flags が与えられたときに ケイパビリティを 処理するには、エンドポイントノードは 次の手順を実行しなければならない:

  1. capabilities request を、parameters から "capabilities" という プロパティを 取得することの結果とする。

    1. capabilities request が JSON Objectでない場合、 エラー コード invalid argument を持つ errorを返す。

  2. required capabilities を、capabilities request から "alwaysMatch" という プロパティを 取得することの結果とする。

    1. required capabilitiesundefined である場合、 その値を空の JSON Objectに設定する。

    2. required capabilities を、 required capabilities および flag を引数として ケイパビリティを検証することを tryingした結果とする。

  3. all first match capabilities を、capabilities request から "firstMatch" という プロパティを 取得することの結果とする。

    1. all first match capabilitiesundefined である場合、 その値を、空の JSON Object 1 つをエントリとして持つ Listに設定する。

    2. all first match capabilities が、 1 つ以上のエントリを持つ Listでない場合、 エラーコード invalid argument を持つ errorを返す。

  4. validated first match capabilities を空の Listとする。

  5. all first match capabilities 内のインデックス付きプロパティに対応する 各 first match capabilities について:

    1. validated capabilities を、 first match capabilities および flags を引数として ケイパビリティを検証することを tryingした結果とする。

    2. validated capabilitiesvalidated first match capabilities に付加する。

  6. merged capabilities を空の Listとする。

  7. validated first match capabilities 内のインデックス付きプロパティに対応する 各 first match capabilities について:

    1. merged を、 required capabilities および first match capabilities を引数として ケイパビリティを マージすることを tryingした結果とする。

    2. mergedmerged capabilities に付加する。

  8. merged capabilities 内のインデックス付きプロパティに対応する 各 capabilities について:

    1. matched capabilities を、 capabilities を引数として ケイパビリティを 照合することを tryingした結果とする。

    2. matched capabilitiesnull でない場合、 matched capabilities をデータとして持つ success を返す。

  9. null をデータとして持つ success を返す。

引数 capabilities を用いて ケイパビリティを検証することが要求された場合:

  1. capabilities が JSON Object でない場合、 エラーコード invalid argument を持つ errorを返す。

  2. result を空の JSON Objectとする。

  3. capabilities 内の列挙可能な各自前プロパティについて、 次の副手順を実行する:

    1. name をプロパティの名前とする。

    2. value を、capabilities から name という名前の プロパティを 取得することの結果とする。

    3. 最初に一致する条件の副手順を実行する:

      value is null

      deserializednull に 設定する。

      name equals "acceptInsecureCerts"

      valueboolean でない場合、 エラーコード invalid argument を持つerrorを返す。そうでなければ、 deserializedvalue に設定する。

      name equals "browserName"
      name equals "browserVersion"
      name equals "platformName"

      valuestring でない場合、 エラーコード invalid argument を持つerrorを返す。そうでなければ、 deserializedvalue に設定する。

      name equals "pageLoadStrategy"

      deserialized を、引数 value を用いて ページ 読み込み戦略として逆直列化することを tryingした 結果とする。

      name equals "proxy"

      deserialized を、引数 value を用いて プロキシとして 逆直列化することを tryingした結果とする。

      name equals "strictFileInteractability"

      valueboolean でない場合、 エラーコード invalid argument を持つerrorを返す。そうでなければ、 deserializedvalue に設定する

      name equals "timeouts"

      deserialized を、value を用いて タイムアウト構成として 逆直列化することを tryingした結果とする。

      name equals "unhandledPromptBehavior"

      deserialized を、引数 value を用いて 未処理プロンプトの 振る舞いとして逆直列化することを tryingした結果とする。

      name is the name of an 追加 WebDriver ケイパビリティ

      deserialized を、 name に対応する拡張ケイパビリティについて、 引数 value を用いて 追加 ケイパビリティ逆直列化 アルゴリズムを実行することを tryingした結果とする。

      name is the key of an 拡張ケイパビリティ

      name が実装に知られている場合、 deserialized を、value を実装固有の方法で 逆直列化することをtryingした 結果とする。 そうでなければ、deserializedvalue に設定する。

      The リモートエンド is an エンドポイントノード

      エラーコード invalid argument を持つ errorを返す。

    4. deserializednull でない場合、 result 上で、名前 name および値 deserialized を持つ プロパティを設定する

  4. result をデータとして持つ success を返す。

JSON Object 引数 primary および secondary を用いて ケイパビリティを マージする場合、 エンドポイントノードは次の手順を実行しなければならない:

  1. result を新しい JSON Objectとする。

  2. primary 内の列挙可能な各自前プロパティについて、 次の副手順を実行する:

    1. name をプロパティの名前とする。

    2. value を、primary から name という名前の プロパティを 取得することの結果とする。

    3. result 上で、名前 name および値 value を持つ プロパティを設定する
  3. secondaryundefined である場合、 result を返す。

  4. secondary 内の列挙可能な各自前プロパティについて、 次の副手順を実行する:

    1. name をプロパティの名前とする。

    2. value を、secondary から name という名前の プロパティを 取得することの結果とする。

    3. primary value を、 primary から name という プロパティを取得することの結果とする。

    4. primary valueundefined でない場合、 エラー コード invalid argument を持つ errorを返す。

    5. result 上で、名前 name および値 value を持つ プロパティを設定する
  5. result を返す。

注記

JSON Object capabilities および セッション 構成フラグ flags が与えられたときに ケイパビリティを照合する場合、 エンドポイントノードは 次の手順を実行しなければならない:

  1. matched capabilities を、次のエントリを持つ JSON Objectとする:

    "browserName"
    ユーザーエージェント名のASCII 小文字化stringとして表したもの。
    "browserVersion"
    ユーザーエージェントバージョンをstringとして表したもの。
    "platformName"
    現在のプラットフォーム名のASCII 小文字化stringとして表したもの。
    "acceptInsecureCerts"
    初期値が false に設定されたBooleanであり、 セッションがナビゲーションにおいて、 信頼されていない TLS 証明書または自己署名 TLS 証明書を 暗黙的に信頼しないことを示す。
    "strictFileInteractability"
    初期値が false に設定されたBooleanであり、 相互作用可能性チェックが <input type=file> に適用されることを示す。
    "setWindowRect"
    リモートエンドが、 すべてのサイズ変更および 位置指定コマンドをサポートするかどうかを示す Boolean。
    "userAgent"
    既定の User-Agent 値を含む String。
  2. flags が "http" を含む場合、 次のエントリを matched capabilities に追加する:

    "strictFileInteractability"
    初期値が false に設定されたBooleanであり、 相互作用可能性チェックが <input type=file> に適用されることを示す。
  3. 任意で、拡張ケイパビリティmatched capabilities にエントリとして追加する。 これらの値は省略されてもよく、すべての 拡張ケイパビリティを追加する要件はない。

    注記
  4. capabilities自前プロパティに対応する 各 name および value について:

    1. match valuevalue と等しくする。

    2. 最初に一致する name の副手順を実行する:

      "browserName"

      valuematched capabilities 内の "browserName" エントリと等しい文字列でない場合、 nullをデータとして持つ successを返す。

      注記

      リモートエンドは、 browserName を正しく決定するために ブラウザープロセスを開始する必要がある可能性がある。 これを行う前に、軽量なチェックを行うことが望ましい。

      "browserVersion"

      value を、 実装定義の比較アルゴリズムを用いて matched capabilities 内の "browserVersion" エントリと 比較する。 この比較は、"<", "<=", ">", および ">=" 演算子を用いてバージョンに制約を置く value を受け入れるためのものである。

      2 つの値が一致しない場合、 nullをデータとして持つ successを返す。

      注記

      バージョン比較は実装詳細として残されている。 各ユーザーエージェントは、ユーザーエージェントバージョンを符号化する 方法が衝突する可能性が高く、これらの方式を標準化することは この標準の範囲外だからである。

      注記

      リモートエンドは、 browserVersion を正しく決定するために ブラウザープロセスを開始する必要がある可能性がある。 これを行う前に、軽量なチェックを行うことが望ましい。

      "platformName"

      valuematched capabilities 内の "platformName" エントリと等しい文字列でない場合、 nullをデータとして持つ successを返す。

      注記

      次のプラットフォーム名は、よく理解された意味論とともに 一般的に使用されているものであり、 プラットフォーム名について ケイパビリティを 照合する際には、よく知られたオペレーティング システムの妥当な同義語として尊重することで、 最大の相互運用性を達成できる:

      キー システム
      "linux" Linux カーネルに基づく任意のサーバーまたはデスクトップシステム。
      "mac" Apple の macOS の任意のバージョン。
      "windows" デスクトップ版およびモバイル版を含む、Microsoft Windows の任意のバージョン。

      この一覧は網羅的ではない。

      New Session から ケイパビリティを返すとき、 より具体的な platformName を返すことは妥当であり、 これによりユーザーは、WebDriver 実装が実行されている オペレーティングシステムを正しく識別できる。

      "acceptInsecureCerts"

      安全でない TLS を受け入れるフラグが 設定されており、かつ value と等しくない場合、 nullをデータとして持つ successを返す。

      注記

      エンドポイントノード安全でない TLS 証明書をサポートしておらず、 これが最終的に一致が行われない理由である場合、 この情報をローカルエンドに 提供することは有用である。

      "proxy"

      プロキシ構成を持つ フラグが設定されている場合、または value 内に定義された プロキシ構成がエンドポイントノードの 実装固有の妥当性チェックを通過しないものである場合、 nullをデータとして持つ successを返す。

      注記

      ローカルエンドは、 このケイパビリティが尊重され、構成されたプロキシが用いられることを 期待する場合にのみ、このケイパビリティを送信するであろう。 意図としては、これが不可能である場合、新しいセッションは 確立されない。

      "unhandledPromptBehavior"

      value を用いて ユーザープロンプトハンドラーが 一致するかをチェックすることが false である場合、 nullをデータとして持つ successを返す。

      それ以外
    3. match value が null でない場合、 matched capabilities 上で、名前 name および 値 match value を持つ プロパティを設定する

  5. matched capabilities をデータとして持つ success を返す。

8. セッション

WebDriver セッション は、ローカルエンドと 特定のリモートエンドとの間の 論理的な接続を表す。セッションオブジェクトは、その接続に 固有の状態を保持する。

中間ノードは、各アクティブなセッションについて、関連付けられた セッションを維持する。これは、 中間ノードNew Session コマンドを実行するときに作成される、 上流隣接ノード上の セッションである。 中間ノード上のセッションを閉じると、 関連付けられたセッションのセッションも 閉じられる

セッションsession ID を持つ。これは、セッションを一意に識別するために 使用される UUID の文字列表現である。 これはセッション作成時に設定される。

セッションは、セッション作成時に設定される真偽値の HTTP フラグを持つ。 このフラグが設定されたセッションは HTTP セッションである。

リモート エンドは、関連付けられた アクティブセッションのリストを持つ。 これは、現在開始されているすべてのセッションの リストである。

リモート エンドは、関連付けられた アクティブ HTTP セッションのリストを持つ。これは、現在開始されているすべてのHTTP セッションのリストである。

注記

エンドポイント ノードについて単一の HTTP セッションに制限されることは、アクティブ HTTP セッションのリスト内の最初のエントリが唯一のエントリになることを意味する。

HTTP セッションは、関連付けられた 現在の閲覧 コンテキストを持つ。これは、コマンドが実行される対象の 閲覧コンテキストである。また、関連付けられた 現在の親 閲覧コンテキストを持つ。これは閲覧コンテキストを変更するときに 現在の 閲覧コンテキストの親に設定される。また、 関連付けられた 現在のトップレベル閲覧コンテキストを持つ。これは、 閲覧コンテキストを変更するときに、現在の閲覧 コンテキストのトップ閲覧コンテキスト祖先に設定される。

HTTP セッションは、関連付けられた セッション タイムアウトを持ち、これは タイムアウト設定である。これは 初期状態では新しいタイムアウト設定に設定される。

HTTP セッションは、関連付けられた ページ読み込み 戦略を持つ。これは、ページ読み込み 戦略の表のキーワードのいずれかである。これは初期状態では normal に設定される。

HTTP セッションは、関連付けられた 厳密なファイル 操作可能性状態を持ち、これは真偽値である。これは初期状態では false に設定される。

セッションは、関連付けられた 閲覧コンテキスト入力 状態マップを持つ。これは、トップレベル閲覧 コンテキストをキーとし、入力状態オブジェクトを値とする 弱マップである。これは 初期状態では空のマップに設定される。

HTTP セッションは、関連付けられた リクエストキューを持ち、これは現在 処理待ちのリクエストキューである。

セッションが作成されるとき、セッションの機能を定義する セッション設定 フラグ集合が提供される。この 仕様は常に、セッション設定フラグ内に "http" を含むセッションを作成する。これは HTTP フラグに対応する。外部仕様は追加の フラグを定義したり、HTTP フラグなしでセッションを作成したりしてもよい。

8.1 グローバル状態

セッションごとの状態に加えて、リモートエンドエンドポイントノードである場合、すべてのセッションにわたってグローバルな追加の状態も持つ。

エンドポイントノードは、関連付けられた 安全でない TLS を受け入れるフラグを持ち、これは信頼されていない TLS 証明書または自己署名 TLS 証明書が信頼済みとして扱われるかどうかを示す。このフラグの既定値は、 エンドポイントが安全でない TLS 接続の受け入れをサポートしない場合は false、そうでなければ未設定である。

エンドポイントノードは、関連付けられた プロキシ 設定を持つフラグを持ち、これはプロキシがすでに 設定されているかどうかを示す。このフラグの既定値は、エンドポイントが プロキシ設定をサポートしない場合は true、そうでなければ false である。

セッションを 作成するには、JSON Object capabilites と、セッション設定 フラグ flags が与えられたものとして:

  1. session id を、UUID を生成した結果とする。

  2. session を、session IDsession id で、HTTP フラグflags に "http" が含まれることである新しいセッションとする。

  3. proxy を、capabilities から "proxy" プロパティを取得した結果とし、最初に一致する文の サブステップを実行する:

    proxyプロキシ設定 オブジェクトである場合

    抽出された proxy 設定を使用してユーザーエージェントのプロキシを設定するため、 実装定義の手順を行う。定義されたプロキシを設定できない場合は、 エラーエラーコード session not created 付きで返す。そうでなければ、 プロキシ設定を持つフラグを true に設定する。

    そうでなければ
    capabilities のプロパティを、名前 "proxy"、値が新しい JSON Object であるものとして設定する
  4. capabilites に "acceptInsecureCerts" という名前のプロパティがある場合、エンドポイント ノード安全でない TLS を受け入れるフラグを、 capabilities から "acceptInsecureCerts" という名前のプロパティを取得した結果に設定する。

  5. user prompt handler capability を、capabilities から "unhandledPromptBehavior" プロパティを取得した結果とする。

  6. user prompt handler capability が undefined でない場合、user prompt handler capability を用いてユーザープロンプト ハンドラーを更新する。

  7. serialized user prompt handler を、ユーザープロンプトハンドラーをシリアル化したものとする。

  8. capabilities 上に、名前 "unhandledPromptBehavior"、値 serialized user prompt handler のプロパティを設定する。

  9. flags が "http" を含む場合:

    1. strategy を、capabilities から プロパティ "pageLoadStrategy" を取得した結果とする。

      strategy が 文字列である場合、セッションページ読み込み 戦略strategy に設定する。そうでなければ、 ページ読み込み戦略normal に設定し、capabilities のプロパティを、名前 "pageLoadStrategy"、値 "normal" として設定する

    2. strictFileInteractability を、 capabilities からプロパティ "strictFileInteractability" を取得した結果とする。strictFileInteractability が真偽値である場合、セッション厳密なファイル 操作可能性strictFileInteractability に設定する。

    3. timeouts を、capabilities から プロパティ "timeouts" を取得した結果とする。 timeouts が undefined でない場合、 sessionセッションタイムアウトtimeouts に設定する。

    4. capabilities 上に、名前 "timeouts"、値が sessionセッションタイムアウトを用いて タイムアウト設定をシリアル化したものであるプロパティを設定する。

  10. capabilities 内の任意の拡張 capabilityを 実装定義の方法で処理する。

  11. 外部仕様で定義された任意のWebDriver 新規セッションアルゴリズムを、 引数 sessioncapabilities、および flags で実行する。

  12. sessionアクティブセッションに追加する。

  13. flags に "http" が含まれる場合、 sessionアクティブ HTTP セッションに追加する。

  14. webdriver-active フラグを true に設定する。

セッションを 閉じるには、session が与えられたものとして、 リモートエンドは次の手順を行わなければならない:

  1. sessionHTTP フラグが設定されている場合、 sessionアクティブ HTTP セッションから削除する。

  2. sessionアクティブセッションから削除する。

  3. リモートエンドの 種類に基づいて、次のサブステップを実行する:

    リモートエンドエンドポイント ノードである場合
    1. アクティブセッションのリストが 空である場合:

      1. webdriver-active フラグ を false に設定する

      2. ユーザー プロンプトハンドラーを null に設定する。

      3. 安全でない TLS を受け入れるフラグを未設定にする。

      4. プロキシ 設定を持つフラグを、その 既定値にリセットする。

      5. 任意で、すべてのトップレベル 閲覧コンテキストを、 アンロードを促すことなく閉じる

    リモートエンド中間ノードである場合
    1. 関連付けられたセッション閉じる。これにより エラーが発生した場合は、この アルゴリズムの残りを完了してから、そのエラーを返す。

  4. 実装固有のクリーンアップ手順を実行する。

  5. 上記のいずれかの手順でエラーが発生した場合は、 そのエラーを返し、そうでなければ データ null を伴う成功を返す。

セッションを閉じると、関連付けられたブラウザープロセスが kill される可能性がある。 実装固有のクリーンアップ手順は、 接続が早期に閉じられないように、レスポンスがクライアントに返送された に実行されるものと仮定される。

8.2 新規セッション

HTTP メソッド URI テンプレート
POST /session

New Session コマンドは、 エンドポイントノードで新しい WebDriver セッションを作成する。 作成に失敗した場合、session not created エラーが返される。

リモートエンド中継 ノードである場合、 ケイパビリティ処理 アルゴリズムの結果を用いて、 新規セッションリクエストを適切な エンドポイントノードへルーティングしてよい。 中継ノードは、この処理を補助するために 拡張ケイパビリティを自由に定義できる。 ただし、これらの特定のケイパビリティは エンドポイントノードへ転送してはならない。

中継ノードが、ユーザーエージェント機能とは 無関係な追加情報を必要とする場合、 この情報は要求されたケイパビリティの一部としてではなく、 トップレベルパラメーターとして渡すことが推奨される。 中継ノードは、カスタムの トップレベルパラメーター(すなわち非ケイパビリティ)を後続の リモートエンドノードへ 転送しなければならない。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. 実装がエンドポイントノードであり、 アクティブ HTTP セッションの リストが空でない場合、またはそれ以外で 実装が追加のセッションを開始できない場合、 エラーコード session not createdを持つerrorを返す。

  2. リモートエンド中間 ノードである場合、 実装定義の手順を行い、その結果として、 エラーエラーコード session not created 付きで返すか、 またはこのアルゴリズムの残りに従ってリモートエンドが返すものと同型のデータを伴う 成功を返すかのいずれかとする。 エラーが返されない場合、中間 ノードは、後続のコマンドでこの関連付けられたセッションへ コマンドを転送できるように、上流ノードで作成されたセッションへの参照を、関連付けられた セッションとして保持しなければならない。

    注記

    これがどのように行われるかは完全に実装次第であるが、 通常は sessionId、ならびに 上流 リモートエンドURLおよび URL 接頭辞を追跡する必要がある。

  3. flags を、"http" を含む集合とする。

  4. capabilities を、 parameters および flags を用いて ケイパビリティを処理することを tryingした結果とする。

  5. capabilitiesnullである場合、 エラーコード session not createdを持つ errorを返す。

  6. session を、capabilities および flags を用いて セッションを 作成することの結果とする。

  7. body を、次で初期化された JSON Objectとする:

    "sessionId"
    sessionセッション ID
    "capabilities"
    capabilities
  8. session現在のトップレベル 閲覧 コンテキストを、エンドポイントノードトップレベル 閲覧コンテキストのいずれかに設定する。 システム フォーカスを持つトップレベル閲覧 コンテキストを優先し、そうでなければ、 可視性 状態visibleである任意の トップレベル閲覧 コンテキストを優先する。

    注記

    WebDriver 実装は通常、 完全に新しいブラウザーインスタンスを開始するが、 この仕様にはその要件はない(また、WebDriver が Web ブラウザーのみを自動化するためだけに使われるという要件もない)。 実装は、例えば現在フォーカスを持つウィンドウを選択することにより、 既存のブラウザーインスタンスを使用することを選択してもよい。

  9. リクエストキューを新しい キューに設定する。

  10. body をデータとして持つ successを返す。

8.3 セッションを削除

HTTP メソッド URI テンプレート
DELETE /session/{session id}

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. sessionアクティブ HTTP セッションである場合、 session を用いて セッションを閉じることを tryする。

  2. nullをデータとして持つ successを返す。

8.4 ステータス

HTTP メソッド URI テンプレート
GET /status
注記

実装は任意で、 追加のメタ情報を本文の一部として含めてもよいが、 トップレベルプロパティ ready および message は予約されており、上書きしてはならない。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. body を、次のプロパティを持つ新しい JSON Objectとする:

    "ready"

    リモートエンド準備完了状態

    "message"

    リモートエンド準備完了状態を説明する、 実装定義の文字列。

  2. body をデータとして持つ successを返す。

9. タイムアウト

タイマー構造体である。これは タイムアウト発火フラグを持ち、これは 真偽値であり、初期値は false である。

timer および timeout が与えられたとき、 タイマーを 開始するには

  1. Assert: timeout は null でない。

  2. 次の手順を並列に実行する:

    1. 少なくとも timeout ミリ秒が経過するまで待つ。

    2. timerタイムアウト発火フラグを true に設定する。

タイムアウト 構成は、構造体であり、 スクリプト評価ナビゲーション、および要素 取得のタイムアウトを表す。これは、整数または null であり初期値が 30,000 に設定されるスクリプト タイムアウト項目、整数または null であり初期値が 300,000 に設定されるページ読み込み タイムアウト項目、および整数または null であり初期値が 0 に設定される暗黙的 待機タイムアウト項目を持つ。 timeouts が与えられたとき、 タイムアウト構成として逆直列化するには:

  1. timeouts を、timeouts を用いて JSON 派生 JavaScript 値を Infra 値へ変換することの結果に設定する。

  2. configuration を新しいタイムアウト 構成とする。

  3. timeouts 内の各 keyvalue について:

    1. «"script", "pageLoad", "implicit"» が key含まない場合、 continue する。

    2. value が null でなく、かつ 0 以上 最大安全 整数以下の数値でもない場合、 エラーコード invalid argument を持つ error を返す。

    3. key に一致する副手順を実行する:

      "script"

      configurationスクリプトタイムアウトvalue に設定する。

      "pageLoad"

      configurationページ読み込みタイムアウトvalue に設定する。

      "implicit"

      configuration暗黙的待機タイムアウトvalue に設定する。

  4. configuration をデータとして持つ success を返す。

timeouts が与えられたとき、 タイムアウト構成を直列化するには:
  1. serialized を空のマップとする。

  2. serialized["script"] を timeoutsスクリプトタイムアウトに設定する。

  3. serialized["pageLoad"] を timeoutsページ読み込みタイムアウトに設定する。

  4. serialized["implicit"] を timeouts暗黙的待機タイムアウトに設定する。

  5. serialized を用いて Infra 値を JSON 互換 JavaScript 値へ変換することを返す。

9.1 タイムアウトを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/timeouts

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. timeouts を、セッションタイムアウト 設定を用いてタイムアウト 設定をシリアル化したものとする

  2. データ timeouts を伴う成功を返す。

9.2 タイムアウトを設定

HTTP メソッド URI テンプレート
POST /session/{session id}/timeouts

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. timeouts を、 parameters を用いて タイムアウト構成として 逆直列化することを tryingした結果とする。

  2. sessionタイムアウト構成timeouts に設定する。

  3. nullをデータとして持つ success を返す。

11. コンテキスト

多くの WebDriver コマンドは、 session現在の閲覧コンテキストまたは現在の トップレベル閲覧コンテキストのコンテキストで行われる。 session現在のトップレベル閲覧 コンテキストは、 その関連付けられたウィンドウハンドルにより プロトコル内で表される。 トップレベル閲覧コンテキストウィンドウへ切り替えコマンドを用いて選択されると、 特定の閲覧 コンテキストは、フレームへ切り替えコマンドを用いて 選択できる。

注記

「window」という用語を トップレベル閲覧コンテキストを 指すために用いることはレガシーであり、 オペレーティングシステムにおける「window」の概念にも、 DOM のWindowオブジェクトにも対応しない。

閲覧コンテキストは、そのナビゲート可能が破棄されている場合、 もはや開かれていないといわれる。

閲覧コンテキストは、それを一意に識別する 関連付けられたウィンドウハンドルを持つ。これは Stringでなければならず、 "current" であってはならない。

ウェブフレームは、 frameまたはiframeプロトコルを介して、 リモートエンドとローカルエンドの間で転送されるときに、 それを識別するために用いられる抽象化である。

ウェブフレーム 識別子は、 文字列定数 "frame-075b-4da1-b6ba-e579c2d3230a" である。

ECMAScript Object は、 ウェブフレーム識別子自前プロパティを持つ場合、 ウェブフレームを表す

ウェブウィンドウは、 windowプロトコルを介して、 リモートエンドとローカルエンドの間で転送されるときに、 それを識別するために用いられる抽象化である。

ウェブウィンドウ 識別子は、 文字列定数 "window-fcc6-11e5-b4f8-330a88ab9d7f" である。

ECMAScript Object は、 ウェブウィンドウ識別子自前プロパティを持つ場合、 ウェブウィンドウを表す

WindowProxyオブジェクト window を伴う WindowProxy 参照オブジェクトは、 次により与えられる:

  1. window の関連付けられた閲覧コンテキストトップレベル閲覧コンテキストである場合、 identifierウェブウィンドウ識別子とする。

    そうでなければ、それをウェブフレーム識別子とする。

  2. 次のプロパティで初期化された JSON Objectを返す:

    identifier

    window閲覧コンテキストに関連付けられた ウィンドウハンドル

ウェブフレームを表す JSON Object object により ウェブフレームを 逆直列化するには:

  1. objectウェブフレーム 識別子自前プロパティを持たない場合、 エラーコード invalid argumentを持つ errorを返す。

  2. reference を、 object から ウェブフレーム識別子プロパティを 取得することの結果とする。

  3. referenceStringでない場合、 エラーコード invalid argumentを持つ errorを返す。

  4. browsing context を、その ウィンドウハンドルreference である 閲覧コンテキスト、またはそのような 閲覧コンテキストが存在しない場合は null とする。

  5. browsing context が null、または トップレベル閲覧コンテキストである場合、 エラーコード no such frameを持つ errorを返す。

  6. browsing context の関連付けられた window をデータとして持つ successを返す。

ウェブ ウィンドウを表す JSON Object object により ウェブウィンドウを 逆直列化するには:

  1. objectウェブウィンドウ 識別子自前プロパティを持たない場合、 エラーコード invalid argumentを持つ errorを返す。

  2. reference を、 object から ウェブウィンドウ識別子プロパティを 取得することの結果とする。

  3. referenceStringでない場合、 エラーコード invalid argumentを持つ errorを返す。

  4. browsing context を、その ウィンドウハンドルreference である 閲覧コンテキスト、またはそのような 閲覧コンテキストが存在しない場合は null とする。

  5. browsing context が null、または トップレベル閲覧コンテキストでない場合、 エラーコード no such windowを持つ errorを返す。

  6. browsing context の関連付けられた window をデータとして持つ successを返す。

session および context が与えられて、 現在の閲覧コンテキストを設定することが要求された場合、 実装は次の手順に従わなければならない:

  1. session現在の閲覧 コンテキストcontext に設定する。

  2. session現在の親閲覧 コンテキストを、存在する場合は context親閲覧コンテキストに、 そうでなければnullに設定する。

session および context が与えられて、 現在のトップレベル閲覧 コンテキストを設定することが要求された場合、実装は次を行わなければならない:

  1. Assert: contextトップレベル閲覧コンテキストである。

  2. session現在のトップレベル 閲覧 コンテキストcontext に設定する。

  3. session および context を用いて 現在の閲覧コンテキストを設定する

注記

[HTML] 仕様の focus 節に従い、コマンドはオペレーティングシステムのウィンドウがフォーカスを持つかどうかの影響を受けない。

11.1 ウィンドウハンドルを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/window

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、 エラーコード no such windowを持つ errorを返す。

  2. session現在のトップレベル閲覧 コンテキストに関連付けられた ウィンドウハンドルを データとして持つsuccessを返す。

11.2 ウィンドウを閉じる

HTTP メソッド URI テンプレート
DELETE /session/{session id}/window

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. session現在の トップレベル 閲覧コンテキスト閉じる

  4. 開いているトップレベル閲覧コンテキストが もうない場合、 セッションを閉じることを 試みる

  5. sessionURL variables および parameters を用いて、 ウィンドウハンドル群を取得 コマンドリモートエンド手順を 実行した結果を返す。

11.3 ウィンドウへ切り替え

HTTP メソッド URI テンプレート
POST /session/{session id}/window
注記

ウィンドウを切り替えると、以降のすべての コマンドのターゲットとして使用される session現在のトップレベル 閲覧コンテキストが選択される。タブ付きブラウザーでは、これは通常 その閲覧コンテキストを含むタブを 選択されたタブにする。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. handle を、parameters から "handle" プロパティを取得することの結果とする。

  2. handleundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  3. 別のトップレベル閲覧コンテキストへの フォーカスを妨げるアクティブなユーザープロンプトが存在する場合、 errorエラーコード unexpected alert openとともに返す。

  4. handle が、あるトップレベル閲覧コンテキストに 関連付けられたウィンドウ ハンドルと等しい場合、 context をその閲覧コンテキストとし、 session および context を用いて 現在の トップレベル閲覧コンテキストを設定する

    そうでなければ、errorエラーコード no such windowとともに返す。

  5. OS レベルのフォーカスを変更することなく、ユーザーが session現在の閲覧コンテキストを 相互作用のために選択したことから生じる、任意の実装固有の状態を更新する。

  6. nullをデータとして持つ successを返す。

11.4 ウィンドウハンドル群を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/window/handles

ウィンドウハンドルが返される順序は任意である。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. handlesListとする。

  2. リモートエンド内の各 トップレベル閲覧コンテキストについて、 関連付けられたウィンドウハンドルhandles に push する。

  3. handles をデータとして持つsuccessを返す。

11.5 新規ウィンドウ

HTTP メソッド URI テンプレート
POST /session/{session id}/window/new

新しいトップレベル閲覧コンテキストを作成する。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. 実装が新しいトップレベル 閲覧コンテキストの作成をサポートしない場合、errorエラーコード unsupported operationとともに返す。

  2. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. type hint を、parameters から "type" プロパティを取得することの結果とする。

  5. URL を "about:blank" に設定し、 target を空 文字列に設定し、features を "noopener" に設定し、 ユーザーエージェントを新しい閲覧コンテキストを作成するよう構成して、 window open stepsを実行することにより、 新しいトップレベル閲覧コンテキストを作成する。 これは、作成された閲覧 コンテキストに対してフォーカス手順を呼び出さずに 行われなければならない。type hint が "tab" という値を持ち、 かつ実装が同じ OS ウィンドウ内に複数の閲覧コンテキストをサポートする場合、 新しい閲覧コンテキストは session現在の閲覧 コンテキストと OS ウィンドウを共有するべきである。type hint が "window" であり、かつ実装が別々の OS ウィンドウに複数の 閲覧コンテキストをサポートする場合、作成された閲覧 コンテキストは新しい OS ウィンドウ内にあるべきである。その他すべての場合において、 閲覧コンテキストがユーザーにどのように提示されるかの詳細は 実装定義である。

  6. handle を、 新しく作成された window に関連付けられたウィンドウハンドルとする。

  7. 新しく作成された window が session現在の閲覧 コンテキストと OS レベルのウィンドウを共有する場合、 type を "tab" とし、そうでなければ "window" とする。

  8. result を、次で初期化された新しい JSON Objectとする:

    "handle"
    handle の値。
    "type"
    type の値。
  9. result をデータとして持つsuccessを返す。

11.6 フレームへ切り替え

HTTP メソッド URI テンプレート
POST /session/{session id}/frame
注記

フレームへ切り替えコマンドは、 後続のコマンドに対する session現在の 閲覧コンテキストとして用いるために、 session現在のトップレベル 閲覧コンテキスト、または session現在の 閲覧コンテキスト子閲覧コンテキストを選択するために用いられる。 sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. id を、parameters から "id" プロパティを取得することの結果とする。

  2. idnullでも、 Number オブジェクトでも、 ウェブ要素を表す Objectでもない場合、 errorエラーコード invalid argumentとともに返す。

  3. 最初に一致する条件の副手順を実行する:

    idnullである
    1. session現在のトップレベル 閲覧 コンテキストもはや開かれていない場合、 errorエラーコード no such windowとともに返す。

    2. session を用いて 任意のユーザープロンプトを処理することを 試行する

    3. session および session現在の トップレベル閲覧コンテキストを用いて、 現在の 閲覧コンテキストを設定する

    idNumber オブジェクトである
    1. id が 0 未満、または 216 – 1 より大きい場合、 errorエラーコード invalid argumentとともに返す。

    2. session現在の閲覧コンテキストもはや 開かれていない場合、errorエラーコード no such windowとともに返す。

    3. session を用いて 任意のユーザープロンプトを処理することを 試行する

    4. window を、session現在の閲覧コンテキストアクティブ文書関連付けられた windowとする。

    5. idwindowサポートされる プロパティインデックスでない場合、 errorエラーコード no such frameとともに返す。

    6. child window を、 window.[[GetOwnProperty]] (id) を呼び出すことにより取得された WindowProxyオブジェクトとする。

    7. session および child window閲覧コンテキストを用いて 現在の 閲覧コンテキストを設定する

    idウェブ要素を 表す
    1. session現在の閲覧コンテキストもはや 開かれていない場合、errorエラーコード no such windowとともに返す。

    2. session を用いて 任意のユーザープロンプトを処理することを 試行する

    3. element を、 session および id を用いて 既知の要素を取得することを 試みることの結果とする。

    4. elementframe または iframe 要素でない場合、 errorエラーコード no such frameとともに返す。

    5. session および elementコンテンツ ナビゲート可能アクティブ 閲覧コンテキストを用いて、 現在の 閲覧コンテキストを設定する

  4. OS レベルのフォーカスを変更することなく、ユーザーが session現在の閲覧コンテキストを 相互作用のために選択したことから生じる、任意の実装固有の状態を更新する。

  5. nullをデータとして持つ successを返す。

注記

WebDriver は同一オリジンポリシーに拘束されないため、 子閲覧コンテキストが現在の閲覧コンテキストと異なるオリジンであっても、 常にその子閲覧コンテキストへ切り替えることが可能である。

11.7 親フレームへ切り替え

HTTP メソッド URI テンプレート
POST /session/{session id}/frame/parent
注記

親フレームへ切り替え コマンドは、 将来のコマンドに対する session現在の閲覧コンテキストを、 session現在の閲覧コンテキストの 親に設定する。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストが、すでに トップレベル閲覧コンテキストである場合:

    1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

    2. nullをデータとして持つ successを返す。

  2. session現在の親 閲覧コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. セッション現在の親閲覧コンテキストnullでない場合、session現在の親 閲覧コンテキスト現在の閲覧コンテキストを設定する。

  5. OS レベルのフォーカスを変更することなく、ユーザーが session現在の閲覧コンテキストを 相互作用のために選択したことから生じる、任意の実装固有の状態を更新する。

  6. nullをデータとして持つ successを返す。

11.8 ウィンドウのサイズ変更および位置指定

WebDriver は、session現在のトップレベル 閲覧コンテキストを含むオペレーティングシステムウィンドウと相互作用するための コマンドを提供する。 異なるオペレーティングシステムのウィンドウマネージャーは異なる能力を提供するため、 この節のすべてのコマンドがすべてのリモートエンドで サポートされるわけではない。 これらのコマンドのサポートは、ウィンドウ 寸法指定/位置指定ケイパビリティにより決定される。 コマンドがサポートされない場合、 unsupported operation errorが返される。

トップレベル閲覧コンテキストは、 関連付けられたウィンドウ状態を持つ。 これは、その OS ウィジェットウィンドウがどの可視性状態にあるかを記述する。 これは次の状態のいずれかになり得る:

状態 キーワード 既定 説明
最大化ウィンドウ状態 "maximized" ウィンドウは最大化されている。
最小化ウィンドウ状態 "minimized" ウィンドウはアイコン化されている。
通常ウィンドウ状態 "normal" ウィンドウは通常どおり表示されている。
全画面ウィンドウ状態 "fullscreen" ウィンドウは全画面モードである。

何らかの理由により、トップレベル閲覧コンテキストの OS ウィンドウがいずれかのウィンドウ状態に入れない場合、 またはこの概念が現在のシステムに適用できない場合、既定状態は normalでなければならない。

WindowProxy window に対する WindowRect オブジェクトは、次のプロパティで初期化された Objectである:

"x"

windowscreenX属性。

"y"

windowscreenY属性。

"width"

windowsouterWidth属性。

"height"

windowouterHeight属性。

関連付けられたトップレベル閲覧コンテキストを持つ オペレーティングシステムレベルのウィンドウが与えられたとき、 ウィンドウを 最大化するには、 オペレーティングシステムレベルのウィンドウを 最大化ウィンドウ状態へ遷移させるための 実装固有の手順を実行する。 ウィンドウマネージャーがウィンドウのサイズ変更をサポートするが、 ウィンドウ最大化の概念を持たない場合、 ウィンドウ寸法は現在のスクリーンについて ウィンドウマネージャーが許可する最大利用可能サイズまで増加されなければならない。 ウィンドウが遷移を完了したとき、または実装定義のタイムアウト内に返す。

関連付けられたトップレベル閲覧コンテキストを持つ オペレーティングシステムレベルのウィンドウが与えられたとき、 ウィンドウを アイコン化するには、 オペレーティングシステムレベルのウィンドウを 最小化ウィンドウ状態へ遷移させるための 実装固有の手順を実行する。 トップレベル閲覧コンテキストアクティブ文書可視性状態hidden状態に到達するか、 操作がタイムアウトするまで、この操作から返ってはならない。

関連付けられたトップレベル閲覧コンテキストを持つ オペレーティングシステムレベルのウィンドウが与えられたとき、 ウィンドウを 復元するには、 ウィンドウを可視スクリーンへ復元または再表示するための 実装固有の手順を実行する。 トップレベル閲覧コンテキストアクティブ文書可視性状態visible状態に到達するか、 操作がタイムアウトするまで、この操作から返ってはならない。

11.8.1 ウィンドウ矩形を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/window/rect
注記

ウィンドウ矩形を取得 コマンドは、 session現在の トップレベル閲覧コンテキストに対応するオペレーティングシステムウィンドウの スクリーン上のサイズおよび位置を返す。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の トップレベル閲覧コンテキストもはや開かれていない場合、 errorエラーコード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. session現在のトップレベル閲覧 コンテキストに対する WindowRect オブジェクトにデータを設定した successを返す。

11.8.2 ウィンドウ矩形を設定

HTTP メソッド URI テンプレート
POST /session/{session id}/window/rect
注記

ウィンドウ矩形を設定 コマンドは、 session現在のトップレベル閲覧 コンテキストに対応するオペレーティングシステムウィンドウの サイズおよび位置を変更する。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. width を、parameters から "width" という名前のプロパティを取得することの結果とする。

  2. widthundefinedである場合、width を null とする。

  3. height を、 parameters から "height" という名前のプロパティを取得することの結果とする。

  4. heightundefinedである場合、height を null とする。

  5. x を、parameters から "x" という名前の プロパティを取得することの結果とする。

  6. xundefinedである場合、x を null とする。

  7. y を、parameters から "y" という名前の プロパティを取得することの結果とする。

  8. yundefinedである場合、y を null とする。

  9. width または height が null でも、 0 から 231 − 1 までの Numberでもない場合、errorエラーコード invalid argumentとともに返す。

  10. x または y が null でも、 −(231) から 231 − 1 までの Numberでもない場合、 errorエラーコード invalid argumentとともに返す。

  11. リモートエンドが何らかの理由により、 session現在の トップレベル閲覧コンテキストに対する ウィンドウ矩形を設定 コマンドを サポートしない場合、errorエラー コード unsupported operationとともに返す。

    注記

    ウィンドウ矩形を設定コマンドが 部分的にサポートされている場合(すなわち、引数のいくつかの組み合わせは サポートされるが他はサポートされない場合)、実装は残りの手順を継続することが 期待される。

  12. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  13. session を用いて 任意のユーザープロンプトを処理することを 試行する

  14. 全画面を完全に終了する

  15. ウィンドウを復元する

  16. window を、session現在の トップレベル閲覧コンテキストを含むオペレーティングシステムウィンドウとする

  17. 実装が window の寸法を設定できる場合:

    1. width が null でない場合、任意の ブラウザークロームおよび外部描画されたウィンドウ装飾を含む window の幅を、 CSS ピクセル単位で、 可能な限り width に近い値に設定する。

    2. height が null でない場合、任意の ブラウザークロームおよび外部描画されたウィンドウ装飾を含む window の高さを、 CSS ピクセル単位で、 可能な限り height に近い値に設定する。

    注記
  18. 実装が window の位置を設定できる場合:

    1. x が null でない場合、window の左端の x 座標を、可能な限り x に近い値に設定する。

    2. y が null でない場合、window の上端の y 座標を、可能な限り y に近い値に設定する。

    注記
  19. session現在のトップレベル閲覧 コンテキストに対する WindowRect オブジェクトにデータを設定した successを返す。

11.8.3 ウィンドウを最大化

HTTP メソッド URI テンプレート
POST /session/{session id}/window/maximize
注記

ウィンドウを最大化コマンドは、 session現在のトップレベル閲覧 コンテキストを含むウィンドウ上で、 もしあればウィンドウマネージャー固有の「最大化」操作を呼び出す。 これは通常、全画面にすることなく、ウィンドウを最大利用可能サイズまで拡大する。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. リモートエンドが何らかの理由により、 session現在のトップレベル 閲覧コンテキストに対するウィンドウを 最大化コマンドをサポートしない場合、errorエラーコード unsupported operationとともに返す。

  2. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. 全画面を完全に終了する

  5. ウィンドウを復元する

  6. session現在のトップレベル閲覧 コンテキストウィンドウを最大化する

  7. session現在のトップレベル閲覧 コンテキストに対する WindowRect オブジェクトにデータを設定した successを返す。

11.8.4 ウィンドウを最小化

HTTP メソッド URI テンプレート
POST /session/{session id}/window/minimize
注記

ウィンドウを最小化コマンドは、 session現在のトップレベル閲覧 コンテキストを含むウィンドウ上で、 もしあればウィンドウマネージャー固有の「最小化」操作を呼び出す。 これは通常、ウィンドウをシステムトレイ内に隠す。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. リモートエンドが何らかの理由により、 session現在のトップレベル 閲覧コンテキストに対するウィンドウを 最小化コマンドをサポートしない場合、errorエラーコード unsupported operationとともに返す。

  2. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. 全画面を完全に終了する

  5. ウィンドウをアイコン化する

  6. session現在のトップレベル閲覧 コンテキストに対する WindowRect オブジェクトにデータを設定した successを返す。

11.8.5 ウィンドウを全画面化

HTTP メソッド URI テンプレート
POST /session/{session id}/window/fullscreen

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. リモートエンド全画面をサポートしない場合、 errorエラーコード unsupported operationとともに返す。

  2. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. ウィンドウを復元する

  5. session現在のトップレベル閲覧 コンテキストアクティブ文書文書要素を用いて、 要素を全画面化するを呼び出す。

    注記

    ウィンドウは現在 全画面ウィンドウ状態にある。

  6. session現在のトップレベル閲覧 コンテキストに対する WindowRect オブジェクトにデータを設定した successを返す。

12. 要素

ウェブ要素は、 要素プロトコルを介して、 リモートエンドとローカルエンドの間で転送されるときに、 それを識別するために用いられる抽象化である。

ウェブ要素 識別子は、文字列定数 "element-6066-11e4-a52e-4f735466cecf" である。

ECMAScript Object は、 ウェブ要素識別子自前プロパティを持つ場合、 ウェブ要素を表す

WebDriver ノード id は、特定の WebDriver セッション内の DOM ノードへのハンドルを表す、グローバルに一意な文字列である。

弱マップは、キーが弱く保持されるマップである。すなわち、キーオブジェクトがガベージコレクトされた場合に項目は削除され、 マップ内に存在してもガベージコレクションは妨げられない。これは、キーオブジェクト上に直接プロパティを定義することの 代替として機能する。

注記

ECMAScript の WeakMap と異なり、 弱 マップは、Map で利用可能な操作の完全な集合に参加できる。

WebDriver セッションは、閲覧コンテキストグループノード マップを持つ。これは、閲覧コンテキスト グループノード id マップとの間の弱マップである。

ノード id マップは、ノードとそれに 対応する WebDriver ノード idとの間の弱マップである。

WebDriver セッションは、navigable が見たノードマップを持つ。 これは、navigable と集合との間の弱 マップである。

ノードを取得するには、 sessionbrowsing context、および reference が与えられたものとして:

  1. browsing context group node mapsession閲覧コンテキストグループノード マップとする。
  2. browsing context group を、browsing context閲覧コンテキストグループとする。
  3. browsing context group node mapbrowsing context group を含まない場合、null を返す。
  4. node id mapbrowsing context group node map[browsing context group] とする。
  5. node を、存在する場合は 値が reference である node id map 内のエントリとし、 そうでなければ null とする。
  6. node を返す。

sessionbrowsing context、および node が与えられたとき、 ノード参照を 取得または作成するには:

  1. browsing context group node mapsession閲覧コンテキストグループノード マップとする。
  2. browsing context group を、browsing context閲覧コンテキストグループとする。
  3. browsing context group node mapbrowsing context group を含まない場合、browsing context group node map[browsing context group] を新しい弱マップに設定する。
  4. node id mapbrowsing context group node map[browsing context group] とする。
  5. node id mapnode を含まない場合:
    1. node id を新しいグローバルに一意な文字列とする。
    2. node id map[node] を node id に設定する。
    3. navigable を、browsing contextアクティブ文書ノードナビゲート可能とする。
    4. navigable seen nodes mapsessionナビゲート可能の既出ノード マップとする。
    5. navigable seen nodes mapnavigable を含まない場合、navigable seen nodes map[navigable] を空集合に設定する。
    6. node idnavigable seen nodes map[navigable] に追加する。
  6. node id map[node] を返す。

sessionbrowsing context、および reference が与えられたとき、 次の手順が true を返す場合、 ノード 参照は既知である

  1. navigable を、browsing contextアクティブ文書ノードナビゲート可能とする。
  2. navigable seen nodes mapsessionナビゲート可能の既出ノードマップとする。
  3. navigable seen nodes mapnavigable含み、かつ navigable seen nodes map[navigable] が reference含む場合、 true を返し、そうでなければ false を返す。

session および reference が与えられたとき、 既知の 要素を取得するには:

  1. sessionsession現在の閲覧コンテキスト、 および reference を用いて、 ノード参照が既知であるでない場合、 errorエラー コード no such elementとともに返す。
  2. node を、 sessionsession現在の閲覧 コンテキスト、および reference を用いて ノードを取得することの結果とする。
  3. node が null でなく、かつ nodeElementを実装しない場合、 errorエラー コード no such elementとともに返す。
  4. node が null、または node古い場合、 errorエラー コード stale element referenceとともに返す。
  5. node をデータとして持つsuccessを返す。

session およびelementが与えられたとき、 ウェブ要素参照を取得または作成するには:

  1. 表明:elementElementを実装する。
  2. sessionsession現在の 閲覧コンテキスト、および element が与えられたとき、 ノード 参照を取得または作成することを 試みることの結果を返す。

session および element に対するウェブ 要素参照オブジェクトは次である:

  1. identifierウェブ要素識別子とする。

  2. reference を、session および element を用いて ウェブ要素参照を 取得または作成することの結果とする。

  3. 名前 identifier および値 reference のプロパティで 初期化された JSON Objectを返す。

ウェブ 要素を表す JSON Object object により、 ウェブ要素を逆直列化するには:

  1. objectウェブ要素 識別子自前プロパティを持たない場合、 errorエラーコード invalid argumentとともに返す。

  2. reference を、 object からウェブ要素 識別子プロパティを 取得することの結果とする。

  3. referenceStringでない場合、 errorエラーコード invalid argumentとともに返す。

  4. element を、 session および reference を用いて 既知の要素を取得することを 試みることの 結果とする。

  5. element をデータとして持つsuccessを返す。

要素は、 そのノード文書アクティブ文書でない場合、 または接続されていない場合、 古い

要素ビュー内へスクロールするには、 その要素がまだビュー内でない場合に限り、 次の手順を実行する:

  1. options を 次のScrollIntoViewOptionsとする:

    "behavior"
    "instant"
    論理スクロール位置 "block"
    "end"
    論理スクロール位置 "inline"
    "nearest"
  2. element を this 値として、 Function.[[Call]](scrollIntoView, options) を実行する。

編集可能要素は、 入力 および消去に用いることができる要素であり、 それらは 2 つの下位カテゴリに分類される:

可変フォームコントロール要素

可変である(例えば、読み取り専用または 無効でない)、 かつその type 属性が次の状態のいずれかにある input 要素を指す:

および textarea 要素を指す。

可変要素

編集ホストまたはコンテンツ 編集可能である要素を指す。

要素は、その "pointer-events" スタイルプロパティの 解決値が "none" である場合、 ポインター イベント無効を持つといわれる。

要素は、それが input 要素であり、 その readonly 属性が設定されている場合、 読み取り専用とみなされる。

12.1 相互作用可能性

要素が ポインターアクションを用いて相互作用できるかどうかを判定するために、 WebDriver はヒットテストを実行して、 その相互作用が要求された要素に到達できるかどうかを見つける。

相互作用可能な要素は、 ポインター相互作用可能またはキーボード相互作用可能のいずれかである 要素である。

ポインター相互作用可能な要素は、 ビューポート内にあるその矩形の 中心点で見つかる 描画順序により定義される最初の 要素として定義される。 ただし、レンダリングされたスクロールバーのサイズは除外する。

キーボード相互作用可能な要素は、 フォーカス可能領域を持つ 任意の要素body 要素、 または文書要素である。

要素ビュー内中心 点は、 その要素の getClientRects() の 最初のDOMRect初期ビューポートとの交差である矩形の 原点位置である。 これは次のように計算できる:

  1. rectangle を、 element上で getClientRects()を 呼び出すことにより返される DOMRectコレクションの 最初のオブジェクトとする。

  2. leftmax(0, min(x 座標, x 座標 + 幅 寸法)) とする。

  3. rightmin(innerWidth, max(x 座標, x 座標 + 幅 寸法)) とする。

  4. topmax(0, min(y 座標, y 座標 + 高さ 寸法)) とする。

  5. bottommin(innerHeight, max(y 座標, y 座標 + 高さ 寸法)) とする。

  6. xfloor((left + right) ÷ 2.0) とする。

  7. yfloor((top + bottom) ÷ 2.0) とする。

  8. (x, y) の組を返す。

要素 element は、次の手順が true を返す場合、 無効である:

  1. elementoption要素である、または elementoptgroup要素である場合:

    1. element の各包含祖先 ancestor について:

      1. ancestoroptgroup要素である、または ancestorselect 要素であり、かつ ancestor実際に無効である場合、true を返す。

    2. false を返す。

  2. element実際に無効であるかどうかを返す。

要素は、その ポインターイベントが無効でない という仮定の下で、自身のポインター相互作用可能な描画 ツリーのメンバーである場合、 ビュー内にある。

要素は、その 中心点における ポインター相互作用可能な描画ツリーが空である場合、 またはこのツリー内の最初の要素が自身の 包含子孫でない場合、 遮蔽されている

要素 elementポインター操作可能ペイントツリー は次のように生成される:

  1. element が、session現在の閲覧 コンテキストアクティブな文書同じツリー内にない 場合、空のシーケンスを返す。

  2. rectangles を、 element 上で getClientRects() を呼び出すことによって返される DOMRect シーケンスとする。

  3. rectangles の長さが 0 の場合、 空のシーケンスを返す。

  4. center point を、elementビュー内中心点 とする。

  5. 座標 center point が与えられたものとして、 point からの要素 を返す。

12.2 シャドウルート

シャドウルートは、 シャドウルートプロトコルを介して、 リモートエンドとローカルエンドの間で転送されるときに、 それを識別するために用いられる抽象化である。

シャドウ ルート識別子は、文字列定数 "shadow-6066-11e4-a52e-4f735466cecf" である。

ECMAScript Object は、 シャドウルート識別子自前プロパティを持つ場合、 シャドウルートを表す

session および reference が与えられたとき、 既知の シャドウルートを取得するには:

  1. sessionsession現在の閲覧コンテキスト、 および reference を用いて ノード参照が既知であるでない場合、 errorエラーコード no such shadow rootとともに返す。
  2. node を、 sessionsession現在の閲覧 コンテキスト、および reference を用いて ノードを取得することの結果とする。
  3. node が null でなく、かつ nodeShadowRootを実装しない場合、 errorエラーコード no such shadow rootとともに返す。
  4. node が null、または node切り離されている場合、 errorエラーコード detached shadow rootとともに返す。
  5. node をデータとして持つsuccessを返す。

session および shadow root が与えられたとき、 シャドウルート参照を取得または作成するには:

  1. 表明:elementShadowRootを実装する。
  2. sessionsession現在の 閲覧コンテキスト、および element を用いて ノード 参照を取得または作成することを 試みることの結果を返す。

session および shadow root に対するシャドウルート参照オブジェクトは、次により与えられる:

  1. identifierシャドウルート識別子とする。

  2. reference を、session および shadow root を用いて シャドウルート参照を 取得または作成することの結果とする。

  3. 名前 identifier および値 reference のプロパティで 初期化された JSON Objectを返す。

シャドウ ルートを表す JSON Object object により シャドウルートを逆直列化することが要求された場合:

  1. objectシャドウルート識別子自前プロパティを持たない場合、 errorエラーコード invalid argumentとともに返す。

  2. reference を、 object から シャドウルート識別子プロパティを 取得することの結果とする。

  3. referenceStringでない場合、 errorエラーコード invalid argumentとともに返す。

  4. shadow を、 session および reference を用いて 既知の シャドウルートを取得することを 試みることの結果とする。

  5. shadow をデータとして持つsuccessを返す。

シャドウルートは、 そのノード文書アクティブ文書でない場合、 またはそのホストとして参照される要素ノードが 古い場合、 切り離されている

12.3 取得

要素を検索要素群を検索要素から要素を検索要素から要素群を検索シャドウルートから要素を検索、 およびシャドウルートから要素群を検索コマンドは、 個々の要素および要素のコレクションの検索を可能にする。 要素取得検索は、与えられたセレクターの式に一致する 文書のノードを前順走査することにより実行される。

sessionstart nodeusing および value が与えられ、 検索することが 要求された場合、リモート エンドは次の手順を実行しなければならない:

  1. location strategyusing と等しくする。

  2. selectorvalue と等しくする。

  3. timeoutsessionセッションタイムアウト暗黙的待機タイムアウトとする。

  4. timer を新しいタイマーとする。

  5. timeout が null でない場合:

    1. timer および timeout を用いて タイマーを開始する

  6. elements returned を空のListとする。

  7. elements returned が空であり、 timerタイムアウト発火フラグが 設定されていない間:

    1. elements returned を、引数 start node および selector を用いて、 関連する要素位置特定戦略を呼び出すことを 試みることの結果に設定する。

    2. 要素位置特定戦略の実行中に DOMExceptionSyntaxErrorXPathException、またはその他のエラーが 発生した場合、 invalid selector errorを返す。
  8. result を空のListとする。

  9. elements returned 内の各 element について、 session および element に対する ウェブ要素参照オブジェクトresult に追加する。

  10. result をデータとして持つsuccessを返す。

12.3.1 ロケーター戦略

要素位置特定戦略は、 session現在の 閲覧コンテキスト内で 要素を検索するために どの技法を用いるべきかを決定する列挙属性である。次の 位置特定戦略の表は、この 属性について定義されたキーワードおよび状態を列挙する:

状態 キーワード
CSS セレクター "css selector"
リンクテキストセレクター "link text"
部分リンクテキストセレクター "partial link text"
タグ名 "tag name"
XPath セレクター "xpath"
12.3.1.1 CSS セレクター

CSS セレクター戦略ウェブ要素を検索するには、 次の手順を完了する必要がある:

  1. elements を、 start nodethisとし、 selector を引数として querySelectorAll() を呼び出すことの結果とする。これにより例外が投げられる場合、 errorエラー コード invalid selectorとともに返す。

  2. elements をデータとして持つsuccessを返す。

12.3.1.4 タグ名

タグ名 戦略ウェブ要素を検索するには、 start nodethisとし、selector を 引数として getElementsByTagName() を呼び出した結果にデータを設定した successを返す。

12.3.1.5 XPath

XPath セレクター戦略ウェブ要素を検索するには、 次の手順を完了する必要がある:

  1. evaluateResult を、 引数 selectorstart nodenullORDERED_NODE_SNAPSHOT_TYPE、 およびnullを用いて evaluateを呼び出すことの結果とする。

    注記

    スナップショットは操作の原子性を高めるために用いられる。

  2. index を 0 とする。

  3. length を、evaluateResult から "snapshotLength" プロパティを 取得することの結果とする。これが XPathExceptionを投げる場合、 errorエラー コード invalid selectorとともに返し、そうではなく これがその他の 例外を投げる場合、errorエラー コード unknown errorとともに返す。

  4. result を空のNodeListとする。

  5. indexlength より小さい間、繰り返す:

    1. node を、 evaluateResultthisとし、 index を引数として snapshotItemを呼び出すことの結果とする。
    2. node要素でない場合、 errorエラーコード invalid selectorとともに返す。

    3. noderesult に追加する。
    4. index を 1 増加させる。
  6. result をデータとして持つsuccessを返す。

12.3.2 要素を検索

HTTP メソッド URI テンプレート
POST /session/{session id}/element
注記

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. location strategy を、parameters から "using" という名前のプロパティを 取得することの結果とする。

  2. location strategy位置特定戦略の表に キーワードとして存在しない場合、errorエラーコード invalid argumentとともに返す。

  3. selector を、parameters から "value" という名前のプロパティを 取得することの結果とする。

  4. selectorundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  5. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  6. session を用いて 任意のユーザープロンプトを処理することを 試行する

  7. start node を、 session現在の閲覧 コンテキスト文書要素とする。

  8. start nodenullである場合、 errorエラーコード no such elementとともに返す。

  9. result を、sessionstart nodelocation strategy、および selector を用いて 検索することを 試みることの結果とする。

  10. result が空である場合、errorエラーコード no such elementとともに返す。そうでなければ、 result の最初の要素を返す。

12.3.3 要素群を検索

HTTP メソッド URI テンプレート
POST /session/{session id}/elements

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. location strategy を、parameters から "using" という名前のプロパティを 取得することの結果とする。

  2. location strategy位置特定戦略の表に キーワードとして存在しない場合、errorエラーコード invalid argumentとともに返す。

  3. selector を、parameters から "value" という名前のプロパティを 取得することの結果とする。

  4. selectorundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  5. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  6. session を用いて 任意のユーザープロンプトを処理することを 試行する

  7. start node を、 session現在の閲覧 コンテキスト文書 要素とする。

  8. start nodenullである場合、 errorエラーコード no such elementとともに返す。

  9. sessionstart nodelocation strategy、および selector を用いて 検索することを 試みることの結果を返す。

12.3.4 要素から要素を検索

HTTP メソッド URI テンプレート
POST /session/{session id}/element/{element id}/element

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. location strategy を、parameters から "using" という名前のプロパティを 取得することの結果とする。

  2. location strategy位置特定戦略の表に キーワードとして存在しない場合、errorエラーコード invalid argumentとともに返す。

  3. selector を、parameters から "value" という名前のプロパティを 取得することの結果とする。

  4. selectorundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  5. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  6. session を用いて 任意のユーザープロンプトを処理することを 試行する

  7. start node を、 session および URL variables["element id"] を用いて 既知の 要素を取得することを 試みることの結果とする。

  8. result を、sessionstart nodelocation strategy、 および selector を用いて 検索することを 試みることの値とする。
  9. result が空である場合、errorエラーコード no such elementとともに返す。そうでなければ、 result の最初の要素を返す。

12.3.5 要素から要素群を検索

HTTP メソッド URI テンプレート
POST /session/{session id}/element/{element id}/elements

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. location strategy を、parameters から "using" という名前のプロパティを 取得することの結果とする。

  2. location strategy位置特定戦略の表に キーワードとして存在しない場合、errorエラーコード invalid argumentとともに返す。

  3. selector を、parameters から "value" という名前のプロパティを 取得することの結果とする。

  4. selectorundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  5. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  6. session を用いて 任意のユーザープロンプトを処理することを 試行する

  7. start node を、 session および URL variables["element id"] を用いて 既知の 要素を取得することを 試みることの結果とする。

  8. sessionstart nodelocation strategy、および selector を用いて 検索することを 試みることの結果を返す。

12.3.6 シャドウルートから要素を検索

HTTP メソッド URI テンプレート
POST /session/{session id}/shadow/{shadow id}/element

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. location strategy を、 "using" と呼ばれる プロパティを取得することの結果とする。

  2. location strategy位置特定戦略の表に キーワードとして存在しない場合、errorエラーコード invalid argumentとともに返す。

  3. selector を、 "value" と呼ばれる プロパティを取得することの結果とする。

  4. selectorundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  5. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  6. 任意のユーザープロンプトを処理する。 それがerrorである場合、その値を返す。

  7. start node を、 session および URL variables["shadow id"] を用いて 既知のシャドウルートを取得することを 試みることの結果とする。

  8. result を、sessionstart nodelocation strategy、 および selector を用いて 検索することを 試みることの値とする。
  9. result が空である場合、errorエラーコード no such elementとともに返す。そうでなければ、 result の最初の要素を返す。

12.3.7 シャドウルートから要素群を検索

HTTP メソッド URI テンプレート
POST /session/{session id}/shadow/{shadow id}/elements

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. location strategy を、 "using" と呼ばれる プロパティを取得することの結果とする。

  2. location strategy位置特定戦略の表に キーワードとして存在しない場合、errorエラーコード invalid argumentとともに返す。

  3. selector を、 "value" と呼ばれる プロパティを取得することの結果とする。

  4. selectorundefinedである場合、 errorエラーコード invalid argumentとともに返す。

  5. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  6. 任意のユーザープロンプトを処理する。 それがerrorである場合、その値を返す。

  7. start node を、 session および URL variables["shadow id"] を用いて 既知の シャドウルートを取得することを 試みることの結果とする。

  8. sessionstart nodelocation strategy、および selector を用いて 検索することを 試みることの結果を返す。

12.3.8 アクティブ要素を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/active

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. active element を、 session現在の閲覧 コンテキスト文書要素アクティブ要素とする。

  4. active element が null でない要素である場合、 session および active element に対するウェブ要素参照 オブジェクトにデータを設定したsuccessを返す。

    そうでなければ、errorエラーコード no such elementとともに返す。

12.3.9 要素の シャドウルートを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/shadow

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. 任意のユーザープロンプトを処理する。 それがerrorである場合、その値を返す。

  3. element を、session および URL variables[element id] を用いて 既知の要素を取得することを 試みることの結果とする。

  4. shadow rootelementシャドウ ルートとする。

  5. shadow root が null である場合、errorエラーコード no such shadow rootとともに返す。

  6. serialized を、session および shadow root に対する シャドウルート参照オブジェクトとする。

  7. serialized をデータとして持つsuccessを返す。

12.4 状態

session および element が与えられたとき、 絶対位置を計算するには:

  1. rect を、 getBoundingClientRect()を 呼び出すことにより返される値とする。

  2. window を、session現在の トップレベル閲覧コンテキスト関連付けられた window とする。

  3. x を (windowscrollX + rectx 座標)とする。

  4. y を (windowscrollY + recty 座標)とする。

  5. 組 (x, y) を返す。

ノードが、別のノード other同じツリー内にないかどうかを判定するには、 次の副手順を実行する:

  1. そのノードノード文書otherノード文書でない場合、 true を返す。

  2. そのノードcompareDocumentPosition()を、 other を引数として呼び出した結果が DOCUMENT_POSITION_DISCONNECTED (1) である場合 true を返し、 そうでなければ false を返す。

elementコンテナーは次である:

有効な要素コンテキスト内の option 要素
有効な要素コンテキスト内の optgroup 要素

element要素 コンテキストであり、 これは次により決定される:

  1. datalist parent を、 element から逆順にツリーを走査して最初に到達する datalist 要素、 またはツリーの根に到達した場合はundefinedとする。

  2. select parent を、 element から逆順にツリーを走査して最初に到達する select 要素、 またはツリーの根に到達した場合はundefinedとする。

  3. datalist parentundefinedである場合、 要素コンテキストselect parent である。 そうでなければ、要素コンテキストdatalist parent である。

無効な要素コンテキスト内の option 要素

その要素はコンテナーを持たない。

その他の場合

コンテナーは要素自身である。

12.4.1 要素が 選択されているか

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/selected
注記

要素が選択されているかコマンドは、 参照された要素が選択されているかどうかを判定する。 この操作が意味を持つのは、 Checkbox および Radio Button 状態の input 要素、 または option 要素に対してのみである。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および URL variables[element id] を用いて 既知の要素を取得することを 試みることの結果とする。

  4. selected を、最初に一致する文に対応する値とする:

    element が、 Checkbox または Radio Button 状態の type 属性を持つ input 要素である

    elementcheckednessの結果。

    elementoption 要素である

    elementselectednessの結果。

    その他の場合
    False。
  5. selected をデータとして持つsuccessを返す。

12.4.2 要素 属性を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/attribute/{name}

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および URL variables の element id を用いて 既知の要素を取得することを 試みることの結果とする。

  4. nameURL variables["name"] とする。

  5. result を、最初に一致する条件の結果とする:
    name真偽属性である場合

    elementnamehasAttribute()を持つ場合は "true"(文字列)、 そうでなければnull

    その他の場合

    name名前で属性を取得することの結果。

  6. result をデータとして持つsuccessを返す。

注記

このコマンドの振る舞いは、 [DOM] における getAttribute()の振る舞いとは異なることに注意されたい。 これは、設定された真偽属性の場合、 空文字列を返す。 このコマンドが文字列として true を返す理由は、 これがほとんどの動的型付けプログラミング言語で true と評価される一方で、 期待される型情報も保持するためである。

12.4.3 要素 プロパティを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/property/{name}

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および URL variables の element id を用いて 既知の要素を取得することを 試みることの結果とする。

  4. nameURL variables["name"] とする。

  5. property を、 element 上でObject.[[GetProperty]](name) を 呼び出すことの結果とする。

  6. result を、 undefinedでない場合は property の値とし、そうでなければnullとする。

  7. result をデータとして持つsuccessを返す。

12.4.4 要素の CSS 値を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/css/{property name}

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、 URL variables["element id"] を用いて 既知の 要素を取得することを 試みることの結果とする。

  4. computed value を、最初に一致する条件の結果とする:

    session現在の閲覧 コンテキストアクティブ文書が "xml" でない
    element のスタイル宣言から得られる、 パラメーター URL variables["property name"] の 計算値
    その他の場合
    ""(空文字列)
  5. computed value をデータとして持つsuccessを返す。

12.4.5 要素テキストを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/text
注記

テキストを処理するとき、 空白は、 Unicode Character Database において Unicode 文字プロパティ "WSpace=Y" または "WS" を持つ文字として定義される。 [UAX44]

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および URL variables[element id] を用いて 既知の要素を取得することを 試みることの結果とする。

  4. rendered text を、 bot.dom.getVisibleTextを this 値として、 Function.[[Call]](null, element) の結果と正確に同じ結果になる、 実装固有の手順を実行した結果とする。

  5. rendered text をデータとして持つsuccessを返す。

12.4.6 要素 タグ名を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/name

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、 URL variables["element id"] を用いて 既知の 要素を取得することを 試みることの結果とする。

  4. qualified name を、 elementtagName IDL 属性を取得した結果とする。

  5. qualified name をデータとして持つsuccessを返す。

12.4.7 要素矩形を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/rect
注記

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、 session および URL variables["element id"] を用いて 既知の 要素を取得することを 試みることの結果とする。

  4. coordinates を、session および element を用いて 絶対位置を計算することの結果とする。

  5. rectelement境界矩形とする。

  6. body を、次で初期化された新しい JSON Objectとする:

    "x"
    coordinates の最初の値。
    "y"
    coordinates の 2 番目の値。
    "width"
    rect幅寸法の値。
    "height"
    rect高さ寸法の値。
  7. body をデータとして持つsuccessを返す。

12.4.8 要素が有効か

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/enabled

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および URL variables[element id] を用いて 既知の要素を取得することを 試みることの結果とする。

  4. enabled を、 session現在の閲覧 コンテキストアクティブ文書が "xml" でない場合、初期値 true に設定された真偽値とする。

    そうでなければ、enabled を false とし、 このアルゴリズムの最後の手順へジャンプする。

  5. フォームコントロールが無効である場合、 enabled を false に設定する。

  6. enabled をデータとして持つsuccessを返す。

12.4.9 計算済みロールを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/computedrole

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、 errorエラーコード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、 URL variables["element id"] を用いて 既知の 要素を取得することを 試みることの結果とする。

  4. role を、elementWAI-ARIA ロールを計算した結果とする。

  5. role をデータとして持つsuccessを返す。

12.4.10 計算済み ラベルを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/computedlabel

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、 errorエラーコード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および URL variables["element id"] を用いて 既知の要素を取得することを 試みることの結果とする。

  4. label を、elementアクセシブル 名前に対する アクセシブルな 名前および説明の計算の結果とする。

  5. label をデータとして持つsuccessを返す。

12.5 相互作用

要素相互作用コマンドは、 フォームコントロールを操作するための高水準の命令セットを提供する。 Actionsとは異なり、 これらは暗黙に要素をビュー内へスクロールし、 それが相互作用可能な要素であることを検査する。

一部のリセット可能要素は、それら自身の消去 アルゴリズムを定義する。 それらに関連付けられたリセットアルゴリズムとは異なり、 これらのアルゴリズムの一部としてフォームコントロールに加えられる変更は、 ユーザーにより引き起こされた変更として数えられる (したがって、例えば input イベントの発火を引き起こす)。 独自の消去アルゴリズムを定義しない 要素に対して消去アルゴリズムが呼び出されるとき、 代わりにそのリセットアルゴリズムが呼び出されなければならない。

input 要素に対する消去アルゴリズムは、 ダーティ値フラグおよびダーティ checkedness フラグを false に戻し、 要素のを 空文字列に設定し、 要素が checked 内容属性を持つ場合は要素のcheckednessを true に設定し、 持たない場合は false に設定し、 選択されたファイルのリストを空にし、 その後、 type 属性の現在の状態が 値サニタイズアルゴリズムを定義する 場合に限りそれを呼び出すことである。

textarea 要素に対する消去アルゴリズムは、 ダーティ値フラグを false に戻し、 要素の生の値を空文字列に設定することである。

output 要素に対する消去アルゴリズムは、要素の 値モードフラグを default に設定し、 その後、要素のtextContent IDL 属性を 空文字列に設定する(したがって要素の子ノードを消去する)ことである。

12.5.1 要素クリック

HTTP メソッド URI テンプレート
POST /session/{session id}/element/{element id}/click
注記

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、session および element id を用いて 既知の要素を取得することを 試みることの結果とする。

  4. elementファイルアップロード状態input 要素である場合、 errorエラーコード invalid argumentとともに返す。

  5. elementコンテナービュー内へスクロールする

  6. elementコンテナーが依然としてビュー内にない場合、 errorエラーコード element not interactableとともに返す。

  7. elementコンテナーが別の要素により 遮蔽されている場合、 errorエラーコード element click interceptedとともに返す。

  8. element に対して照合する:

    option 要素
    1. parent nodeelementコンテナーとする。

    2. parent node において mouseOver イベント発火する

    3. parent node において mouseMove イベント発火する

    4. parent node において mouseDown イベント発火する

    5. parent node に対してフォーカス 手順を実行する。

    6. element無効でない場合:

      1. parent node において input イベントを 発火する

      2. previous selectednesselementselectedness と等しくする。

      3. elementコンテナーmultiple 属性を持つ場合、 elementselectedness状態を、 その現在のselectednessの反対の値に 設定することによりトグルする。

        そうでなければ、 elementselectedness状態を true に設定する。

      4. previous selectedness が false である場合、 parent node において change イベントを 発火する

    7. parent node において mouseUp イベント発火する

    8. parent node において click イベント発火する

    その他の場合
    1. input state を、session および session現在のトップレベル 閲覧 コンテキストが与えられたときの 入力状態を取得することの結果とする。

    2. actions options を、 要素 オリジンである手順をウェブ 要素を表すに設定し、要素オリジンを取得手順を WebElement オリジンを取得するに設定した、新しいアクションオプションとする。

    3. input id を、UUID を 生成することの結果とする。

    4. source を、input state および "pointer" を用いて 入力ソースを 作成することの結果とする。

    5. input stateinput id および source を用いて 入力ソースを追加する

    6. click pointelementビュー内中心 点とする。

    7. pointer move action を、引数 input id、 "pointer"、および "pointerMove" で構築された アクション オブジェクトとする。

    8. pointer move action 上で プロパティを設定することにより、 x0 にする。

    9. pointer move action 上で プロパティを設定することにより、 y0 にする。

    10. pointer move action 上で プロパティを設定することにより、 originelement にする。

    11. pointer down action を、引数 input id、 "pointer"、および "pointerDown" で構築された アクション オブジェクトとする。

    12. pointer down action 上で プロパティを設定することにより、 button0 にする。

    13. pointer up action を、引数 input id、 "pointer"、および "pointerUp" で構築された アクション オブジェクトとする。

    14. pointer up action 上で プロパティを設定することにより、 button0 にする。

    15. actions をリスト «pointer move action, pointer down action, pointer up action» とする。

    16. input stateactionssession現在の 閲覧コンテキスト、および actions options を用いて、 アクションのリストを 配送する

    17. input state および input id を用いて 入力ソースを 削除する

  9. 前の手順で生成された DOM イベントを処理するのに十分な回数、 ユーザーエージェントのイベントループが回るまで待機する。

  10. クリックにより発生した任意のナビゲーションの開始を許可するため、 実装定義の手順を実行する。

    注記

    これによりアルゴリズムがどれだけ長く待機することになるかは 常に明確であるとは限らず、一部の実装には避けられない競合状態が あり得ることが認められている。意図は、アルゴリズム内の次の手順が 意味を持つよう、新しいナビゲートの試行が開始できるようにすることである。 クリックがナビゲートの試行を引き起こさない可能性があり、 その場合、実装定義の手順は直ちに返ることができ、 次の手順も直ちに返ることになる。

  11. session を用いて ナビゲーションの完了を待機することを 試行する

  12. ナビゲーション後検査を実行することを 試行する

  13. nullをデータとして持つ successを返す。

12.5.2 要素消去

HTTP メソッド URI テンプレート
POST /session/{session id}/element/{element id}/clear

content editable 要素を消去するには:

  1. elementinnerHTML IDL 属性が空文字列である場合、何もせずに返る。

  2. element に対するフォーカス手順を実行する。

  3. elementinnerHTML IDL 属性を 空文字列に設定する。

  4. element に対するフォーカス解除手順を実行する。

リセット可能要素を消去するには:

  1. empty を、最初に一致する条件の結果とする:

    element が、 File Upload 状態にある type 属性を持つ input 要素である
    選択されたファイルのリストの 長さが 0 である場合は True、 そうでなければ false。
    その他の場合
    そのvalue IDL 属性が空文字列である場合は True、 そうでなければ false。
  2. element制約検証の候補であり、 それがその制約を満たし、 かつ empty が true である場合、 これらの副手順を中止する。

  3. element に対するフォーカス手順を呼び出す。

  4. element に対する消去アルゴリズムを呼び出す。

  5. element に対するフォーカス解除手順を呼び出す。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. element を、 session および element id を用いて 既知の 要素を取得することを 試みることの結果とする。

  4. element編集可能でない場合、 errorエラーコード invalid element stateとともに返す。

  5. elementビュー内へスクロールする

  6. timeoutsessionセッションタイムアウト暗黙的待機タイムアウトとする。

  7. timer を新しいタイマーとする。

  8. timeout が null でない場合:

    1. timer および timeout を用いて タイマーを開始する

  9. element相互作用可能になるか、 timerタイムアウト発火フラグが 設定されるまで、 いずれか先に起こる方を待機する。

  10. element相互作用可能でない場合、 errorエラーコード element not interactableとともに返す。

  11. 最初に一致する文の副手順を実行する:

    element可変フォーム コントロール要素である

    リセット可能 要素を消去する手順を呼び出す。

    element可変要素である

    content editable 要素を消去する手順を呼び出す。

    その他の場合

    errorエラー コード invalid element stateとともに返す。

  12. nullをデータとして持つ successを返す。

12.5.3 要素へキーを送信

HTTP メソッド URI テンプレート
POST /session/{session id}/element/{element id}/value
注記

要素へキーを送信コマンドは、 フォームコントロール要素ビュー内へスクロールし、 その後、提供されたキーをその要素へ送信する。 要素キーボード相互作用可能でない場合、 element not interactable errorが返される。

型入力不可フォームコントロールとは、 その type 属性状態により、 主要な入力機構が仮想または物理キーボードによる手段ではなくなる input 要素である。

型入力不可フォームコントロールは、 ユーザーエージェントによりテキスト入力コントロール以外のものとして レンダリングされるフォームコントロール要素を指すことを意味する。 色ホイールとして提示される color 状態input 要素を対象とする場合、 それとの相互作用は、 actions によるキーエミュレーションを用いて型入力されるのではなく、 シミュレートされる。

型入力不可フォーム コントロールの他の例には、 システムネイティブウィジェットを介して相互作用されるフォームコントロール、 例えば select 要素のスクロールされた option リストや、 非デスクトップデバイス上の number 状態input 要素の数値キーパッドが含まれる。

入力に用いられるキー入力ソースは、 U+E000 (NULL) であるnull キーを送信することにより、 「型入力」の途中で消去され得る。

input stateinput idsourceundo actions、および browsing context が与えられたとき、 修飾キー状態を消去するには:

  1. sourceキー入力ソースでない場合、 errorエラーコード invalid argumentとともに返す。

  2. actions options を、 要素オリジンである手順を ウェブ 要素を表すに設定し、要素オリジンを取得手順を WebElement オリジンを取得するに 設定した、新しいアクションオプションとする。

  3. undo actions の辞書順にソートされたキー内の各 entry key について:

    1. action を、キー entry key と等しい undo actions の値とする。

    2. action が型 "key" かつサブ型 "keyUp" の アクションオブジェクトでない場合、 errorエラー コード invalid argumentとともに返す。

    3. actions をリスト «action» とする

    4. input stateactionsbrowsing context、 およびアクションオプションを用いて、 アクションのリストを配送する

拡張書記素クラスターは、 単一のUnicode コードポイントからなり、 かつ codeundefinedでない場合、 型入力可能である。

keyboard に対するシフト状態は、 keyboardshift プロパティの値である。

input stateinput idsourcetext、および browsing context が与えられたとき、 型入力可能文字列に対するイベントを配送するには:

  1. actions options を、 要素オリジンである手順を ウェブ 要素を表すに設定し、要素オリジンを取得手順を WebElement オリジンを取得するに 設定した、新しいアクションオプションとする。

  2. text の各 char について:
    1. global key state を、input state を用いて グローバルキー状態を取得することの結果とする。

    2. charシフト文字であり、 かつ sourceシフト状態が false である場合:

      1. action を、input id、"key"、 および "keyDown" で構築された アクションオブジェクトとし、 その value プロパティを U+E008 ("left shift") に設定する。

      2. actions をリスト «action» とする。

      3. input stateactions、および browsing context を用いて、 アクションのリストを 配送する

    3. charシフト文字でなく、 かつ sourceシフト状態が true である場合:

      1. action を、input id、"key"、 および "keyUp" で構築された アクションオブジェクトとし、 その value プロパティを U+E008 ("left shift") に設定する。

      2. tick actions をリスト «action» とする。

      3. input stateactionsbrowsing context、 および actions options を用いて、 アクションのリストを 配送する

    4. keydown action を、引数 input id、"key"、 および "keyDown" で構築されたアクションオブジェクトとする。

    5. keydown actionvalue プロパティを char に設定する。

    6. keyup action を、サブ型プロパティを "keyUp" に変更した keydown action のコピーとする。

    7. actions をリスト «keydown action, keyup action» とする。

    8. input stateactionsbrowsing context、 および actions options を用いて、 アクションのリストを配送する

type および cluster、ならびに browsing context が与えられたとき、 composition イベントを配送することが要求された場合、 リモートエンドは、 [UI-EVENTS] の要件に従って composition イベントを送信することに 相当し、かつ指定されたプロパティを持つ次のイベントを生成する、 browsing context 上で実装固有のアクション配送手順を 実行する必要がある。

input stateinput idsourcetextbrowsing context、および actions options が与えられたとき、 文字列に対するアクションを配送するには:

  1. clusters を、 text を 拡張書記素クラスターに分割することにより作成される配列とする。

  2. undo actions を空のマップとする。

  3. current typeable text を空のリストとする。

  4. clusters 内のインデックス付きプロパティに対応する各 cluster について、最初に一致する文の副手順を実行する:

    clusternull キーである
    1. input stateinput idsourcecurrent typeable text、 および browsing context を用いて、 型入力可能文字列に対する イベントを配送するcurrent typeable text を空にする。

    2. input stateinput idsourceundo actions および browsing context を用いて、 修飾キー状態を 消去することを 試行する

    3. undo actions を消去する。

    cluster修飾キーである
    1. input stateinput idsourcecurrent typeable text、および browsing context を用いて、 型入力可能文字列に対する イベントを配送する

    2. current typeable text を空にする。

    3. keydown action を、引数 input id、 "key"、および "keyDown" で構築された アクションオブジェクトとする。

    4. keydown actionvalue プロパティを cluster に設定する。

    5. actions をリスト «keydown action» とする

    6. input stateactionsbrowsing context、および actions options を用いて、 アクションのリストを 配送する

    7. undo actions に、 キーを cluster とし、値を keydown action のサブ型プロパティを "keyUp" に変更したコピーとするエントリを追加する。

    cluster型入力可能である

    clustercurrent typeable text に追加する。

    その他の場合
    1. input stateinput idsourcecurrent typeable text、および browsing context を用いて、 型入力可能文字列に対する イベントを配送する

    2. current typeable text を空にする。

    3. 引数 "compositionstart"、undefined、 および browsing context を用いて、 composition event を配送する

    4. 引数 "compositionupdate"、cluster、 および browsing context を用いて、 composition event を配送する

    5. 引数 "compositionend"、cluster、 および browsing context を用いて、 composition event を配送する

  5. input stateinput id および sourcecurrent typeable text、 および browsing context を用いて、 型入力可能文字列に対する イベントを配送する

  6. input stateinput idsourceundo actions、および browsing context を用いて 修飾キー状態を消去することを 試行する

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. text を、 parameters から "text" という名前の プロパティを取得することの結果とする。

  2. textStringでない場合、 errorエラーコード invalid argumentとともに返す。

  3. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  4. session を用いて 任意のユーザープロンプトを処理することを 試行する

  5. element を、session および URL variables[element id] を用いて 既知の要素を取得することを 試みることの結果とする。

  6. file を、elementファイルアップロード状態input 要素である場合は true、そうでなければ false とする。

  7. file が false である、またはセッション厳密なファイル操作可能性が true である場合、次のサブステップを実行する:

    1. elementビュー内へスクロールする

    2. timeoutsessionセッションタイムアウト暗黙的待機 タイムアウトとする。

    3. timer を新しいタイマーとする。

    4. timeout が null でない場合:

      1. timer および timeout を用いて タイマーを開始する

    5. elementキーボード相互作用可能になるか、 timerタイムアウト発火 フラグが設定されるまで、 いずれか先に起こる方を待機する。

    6. elementキーボード相互作用可能でない場合、 errorエラー コード element not interactableとともに返す。

    7. elementアクティブ要素でない場合、 element に対するフォーカス手順を実行する。

  8. 最初に一致する条件の副手順を実行する:

    file が true である
    1. files を、text を改行 (\n) 文字で 分割した結果とする。

    2. files の長さが 0 である場合、 errorエラーコード invalid argumentとともに返す。

    3. multiple を、 element 上で "multiple" を用いて hasAttribute() を呼び出すことの結果と等しくする。

    4. multiplefalse であり、 files の長さが 1 と等しくない場合、 errorエラーコード invalid argumentとともに返す。

    5. ユーザーにより与えられた各ファイルが存在することを検証する。 いずれかが存在しない場合、errorエラーコード invalid argumentとともに返す。

    6. input 要素上の選択された ファイルを設定することに相当する、 実装固有の手順を完了する。 multipletrue である場合、 fileselement選択されたファイルに追加される。

    7. element 上で、これらのイベントを順に 発火する

      1. input
      2. change
    8. nullをデータとして持つ successを返す。

    element型入力不可フォームコントロールである
    1. elementvalue という名前の 自前プロパティを持たない場合、 errorエラー コード element not interactableとともに返す

    2. element可変でない場合、 errorエラーコード element not interactableとともに返す。

    3. element 上で プロパティを設定することにより、 valuetext にする。

    4. elementbad input に苦しんでいる場合、 errorエラーコード invalid argumentとともに返す。

    5. nullをデータとして持つ successを返す。

    elementcontent editableである
    element が現在フォーカスを持たない場合、 任意の子内容の後ろにテキスト挿入キャレットを設定する。
    その他の場合
    1. element が現在フォーカスを持たない場合、 current text lengthelementAPI 値長さとする。

    2. start および end パラメーターの両方に current text length を用いて、 選択範囲を設定することにより テキスト挿入キャレットを設定する。

  9. input state を、session および session現在のトップレベル閲覧 コンテキストを用いて 入力 状態を取得することの結果とする。

  10. input id を、UUID を 生成することの結果とする。

  11. source を、input state および "key" を用いて 入力 ソースを作成することの結果とする。

  12. input stateinput id および source を用いて 入力ソースを追加する

  13. 引数 input stateinput id、および sourcetext、ならびに session現在の閲覧 コンテキストを用いて、 文字列に対するアクションを配送する

  14. input state および input id を用いて 入力ソースを削除する

  15. nullをデータとして持つ successを返す。

13. 文書

13.1 ページソースを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/source
注記

ページソースを取得コマンドは、 session現在の 閲覧 コンテキストアクティブ文書の DOM の文字列直列化を返す。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. source を、 require well-formed フラグに true を与え、 唯一の子が文書要素である 架空のノードに対して フラグメント直列化アルゴリズムを 呼び出すことの結果とする。これにより例外が投げられる場合、 sourcenullとする。

  4. sourcenullである場合、 source を、session現在の閲覧 コンテキストアクティブ文書文字列へ直列化することの結果とする。

  5. source をデータとして持つsuccessを返す。

13.2 スクリプトの実行

コレクションは、 Iterable インターフェイスを実装する Object であり、かつ次のいずれかである:

sessionvalue および任意の引数 seen が与えられたとき、 JSON 逆直列化するには、 リモートエンドは次の手順を実行しなければならない:

  1. seen が提供されていない場合、 seen を空のListとする。

  2. 下の最初の適切な手順へジャンプする:

  3. value に対して照合する:

    undefined
    null
    Boolean
    Number
    String

    value をデータとして持つsuccessを返す。

    ウェブ要素を表す Object

    value逆直列化された ウェブ要素を返す。

    シャドウルートを表す Object

    value逆直列化された シャドウルートを返す。

    ウェブフレームを表す Object

    value逆直列化された ウェブフレームを返す。

    ウェブウィンドウを表す Object

    value逆直列化された ウェブウィンドウを返す。

    Array のインスタンス
    Object のインスタンス

    sessionvalue および seen と、 複製アルゴリズムとして JSON 逆直列化アルゴリズムを用いた オブジェクトを複製するアルゴリズムを返す。

session および value が与えられたとき、 JSON 複製するには、 sessionvalue および空のListを用いた 内部 JSON 複製の結果を返す。

sessionvalue および seen が与えられたとき、 内部 JSON 複製するには、 value に対して照合して、 最初に一致する文の値を返す:

undefined
null

nullをデータとして持つ successを返す。

Boolean
Number
String

value をデータとして持つsuccessを返す。

Element のインスタンス

element古い場合、 errorエラーコード stale element referenceとともに返す。

そうでなければ:

  1. reference を、session および value に対する ウェブ要素参照オブジェクトとする。

  2. reference をデータとして持つsuccessを返す。

ShadowRoot のインスタンス

shadow root切り離されている場合、 errorエラーコード detached shadow rootとともに返す。

そうでなければ:

  1. reference を、session および value に対する シャドウルート参照オブジェクトとする。

  2. reference をデータとして持つsuccessを返す。

WindowProxy オブジェクト

value 内の WindowProxy オブジェクトの 関連する閲覧コンテキストが破棄されている場合、 errorエラーコード stale element referenceとともに返す。

そうでなければ:

  1. reference を、 value に対する WindowProxy 参照 オブジェクトとする。

  2. reference をデータとして持つsuccessを返す。

Functionである "toJSON" という名前の自前プロパティを持つ
value を this 値として Function.[[Call]](toJSON) により返された値を持つ successを返す。
その他の場合
  1. result を、sessionvalue および seen と、clone algorithm として 内部 JSON 複製を用いて オブジェクトを複製することの結果とする。

  2. result をデータとして持つsuccessを返す。

sessionvalueseen、および clone algorithm が与えられたとき、 オブジェクトを 複製するには:

  1. valueseen 内にある場合、 errorエラーコード javascript errorとともに返す。

  2. valueseen に追加する。

  3. result を、 value に対して照合して、最初に一致する文の値とする:

    コレクション

    length プロパティが valuelength プロパティを取得することの結果と 等しい、新しいArray

    その他の場合

    新しいObject

  4. value 内の各列挙可能プロパティについて、 次の副手順を実行する:

    1. name をそのプロパティの名前とする。

    2. source property value を、 value から name という名前の プロパティを取得することの結果とする。 そうすることでスクリプトが実行され、そのスクリプトがエラーを投げる場合、 errorエラー コード javascript errorとともに返す。

    3. cloned property result を、 sessionsource property value および seen を用いて clone algorithm を呼び出すことの結果とする。

    4. cloned property resultsuccessである場合、 名前 name および値を cloned property result のデータと等しくして、 resultプロパティを設定する

    5. そうでなければ、cloned property result を返す。

  5. seen の最後の要素を削除する。

  6. result をデータとして持つsuccessを返す。

引数 parameters を用いて リクエストからスクリプト引数を抽出することが要求された場合、 実装は次を行わなければならない:

  1. script を、parameters から "script" という名前の プロパティを取得することの結果とする。

  2. scriptStringでない場合、 errorエラーコード invalid argumentとともに返す。

  3. args を、parameters から "args" という名前のプロパティを取得することの結果とする。

  4. argsArrayでない場合、errorエラーコード invalid argumentとともに返す。

  5. arguments を、session および args を用いて JSON 逆直列化したものとする。

  6. script および arguments をデータとして持つsuccessを返す。

関数本体を実行するための規則は次の通りである。 このアルゴリズムはECMAScript 完了レコードを返す。

このアルゴリズム中の任意の時点でユーザープロンプトが現れた場合、 直ちに Completion { [[Type]]: normal, [[Value]]: null, [[Target]]: empty } を返すが、このアルゴリズムの他の手順は 並列に実行し続ける。

  1. window を、session現在の閲覧 コンテキストアクティブ 文書関連付けられた window とする。

  2. environment settingswindow関連設定オブジェクトとする。

  3. global scope を、 environment settingsrealmグローバル環境とする。
  4. bodyFunctionBodyとして構文解析できない場合、 または構文解析により早期エラーが検出される場合、 Completion { [[Type]]: normal, [[Value]]: null, [[Target]]: empty } を返す。

  5. bodyuse strict 指令を含む 指令プロローグで始まる場合、 strict を true とし、 そうでなければ strict を false とする。

  6. environment settings を用いて スクリプト実行の準備をする

  7. environment settings を用いて コールバック実行の準備をする

  8. function を、次の引数で FunctionCreate を呼び出すことの結果とする:

    kind
    Normal。
    list
    空のList
    body
    上で body を構文解析した結果。
    global scope
    上で global scope を構文解析した結果。
    strict
    上で strict を構文解析した結果。
  9. completion を、 function を this 値として Function.[[Call]](window, parameters) とする。

  10. environment settings を用いて コールバック実行後に クリーンアップする

  11. environment settings を用いて スクリプト実行後にクリーンアップする

  12. completion を返す。

注記

上記のアルゴリズムは特定の要素に関連付けられていないため、 文書 CSP 指令の対象ではない。

13.2.1 スクリプトを実行

HTTP メソッド URI テンプレート
POST /session/{session id}/execute/sync

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. body および arguments を、 引数 parameters を用いて リクエストからスクリプト 引数を抽出することを 試みることの結果とする。

  2. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. timeoutsessionセッションタイムアウトスクリプトタイムアウトとする。

  5. timer を新しいタイマーとする。

  6. timeout が null でない場合:

    1. timer および timeout を用いて タイマーを開始する

  7. promise新しい Promiseとする。

  8. 次の副手順を並列に実行する:

    1. scriptPromise を、引数 body および arguments を用いて 関数本体を実行するpromise 呼び出しすることの結果とする。

    2. scriptPromise が値 v で充足されたら、 promise を値 v解決する

    3. scriptPromise が値 r で拒否されたら、 promise を値 r拒否する

  9. promise が解決されるか、 timerタイムアウト発火フラグが 設定されるまで、 いずれか先に起こる方を待機する。

  10. promise がまだ保留中であり、かつ timerタイムアウト発火フラグが 設定されている場合、 errorエラーコード script timeoutとともに返す。

  11. promise が値 v で充足された場合、 result を、session および v を用いて JSON 複製することの結果とし、 result をデータとして持つsuccessを返す。

  12. promise が理由 r で拒否された場合、 result を、session および r を用いて JSON 複製することの結果とし、 errorエラー コード javascript errorおよびデータ result とともに返す。

13.2.2 非同期スクリプトを実行

HTTP メソッド URI テンプレート
POST /session/{session id}/execute/async
注記

非同期スクリプトを実行コマンドは、 JavaScript を匿名関数として実行させる。 追加の値が関数への最後の引数として提供される。 これは非同期操作の完了を通知するために呼び出され得る関数である。 関数に提供された最初の引数は JSON に直列化され、 非同期スクリプトを実行により返される。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. body および arguments を、引数 parameters を用いて リクエストからスクリプト 引数を抽出することを 試みることの結果とする。

  2. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  3. session を用いて 任意のユーザープロンプトを処理することを 試行する

  4. timeoutsessionセッションタイムアウトスクリプトタイムアウトとする。

  5. timer を新しいタイマーとする。

  6. timeout が null でない場合:

    1. timer および timeout を用いて タイマーを開始する

  7. promise新しい Promiseとする。

  8. 次の副手順を並列に実行する:

    1. resolvingFunctionsCreateResolvingFunctions(promise) とする。

    2. resolvingFunctions.[[Resolve]]arguments に追加する。

    3. scriptResult を、引数 body および arguments を用いて 関数本体を実行するを呼び出すことの結果とする。

    4. scriptResult.[[Type]] が normal でない場合、 promisescriptResult.[[Value]] の値で 拒否し、 これらの手順を中止する。

      注記

      この仕様の以前の改訂では、提供されたスクリプトの 返値を認識していなかった。従来の挙動を維持するため、 返値がコマンドに影響するのは、それが "thenable" オブジェクトである場合、 またはこれを判定することで例外が生じる場合に限られる。

    5. Type(scriptResult.[[Value]]) が Objectでない場合、 これらの手順を中止する。

    6. thenGet(scriptResult.[[Value]], "then") とする。

    7. then.[[Type]] が normal でない場合、 promisethen.[[Value]] の値で 拒否し、 これらの手順を中止する。

    8. IsCallable(then.[[Type]]) が falseである場合、 これらの手順を中止する。

    9. scriptPromisePromiseResolve(Promise, scriptResult.[[Value]]) とする。

    10. scriptPromise が値 v で充足されたら、 promise を値 v解決する

    11. scriptPromise が値 r で拒否されたら、 promise を値 r拒否する

  9. promise が解決されるか、 timerタイムアウト発火フラグが 設定されるまで、 いずれか先に起こる方を待機する。

  10. promise がまだ保留中であり、かつ timerタイムアウト発火フラグが 設定されている場合、 errorエラーコード script timeoutとともに返す。

  11. promise が値 v で充足された場合、 result を、session および v を用いて JSON 複製することの結果とし、 result をデータとして持つsuccessを返す。

  12. promise が理由 r で拒否された場合、 result を、session および r を用いて JSON 複製することの結果とし、 errorエラー コード javascript errorおよびデータ result とともに返す。

14. Cookie

この節は、[RFC6265] で説明される Cookieとの相互作用について説明する。

Cookieは、 [RFC6265] では Cookie のデータを保持する名前-値ペア、 それに続くその特性を説明する 0 個以上の属性-値ペアにより説明される。

次のCookie 変換用の表は、 WebDriver に関連する Cookie 概念、 それらが [RFC6265] でどのように参照されるか、 直列化された Cookie内でどのキーに写像されるか、 およびCookie を作成するための 引数リストを構築するときに必要な属性-値キーを定義する。

参考情報として、 この表には、Cookie を追加に提供される 直列化された Cookieにおいてそのフィールドが任意かどうかを示す凡例、 およびそのフィールドの短い非規範的な説明と、 関連付けられた値の期待される入力型も含まれる。

概念 RFC 6265 フィールド JSON キー 属性キー 任意 説明
Cookie 名 name "name" Cookie の名前。
Cookie 値 value "value" Cookie 値。
Cookie パス path "path" "Path" Cookie パス。 Cookie を追加するときに省略された場合、 既定値は "/"。
Cookie ドメイン domain "domain" "Domain" Cookie が可視となるドメイン。 Cookie を追加するときに省略された場合、 既定値は session現在の閲覧 コンテキストアクティブ文書URL ドメイン
Cookie secure only secure-only-flag "secure" "Secure" Cookie が secure cookie であるかどうか。 Cookie を追加するときに省略された場合、 既定値は false。
Cookie HTTP only http-only-flag "httpOnly" "HttpOnly" Cookie が HTTP only cookie であるかどうか。 Cookie を追加するときに省略された場合、 既定値は false。
Cookie 有効期限時刻 expiry-time "expiry" "Max-Age" Cookie が期限切れになる時刻で、Unix Epoch からの秒数で指定される。 Cookie を追加するときに省略された場合、設定されてはならない。
Cookie same site samesite "sameSite" "SameSite" Cookie が SameSite ポリシーに適用されるかどうか。 Cookie を追加するときに省略された場合、 既定値は None。 Lax または Strict のいずれかに 設定できる。

直列化された Cookieは JSON Objectであり、 Cookie 変換用の表に列挙された Cookieの [RFC6265] フィールドは、 JSON キーおよびCookie ストアからの関連フィールドの値を用いて 写像される。 任意フィールドは省略してよい。

文書に対して すべての関連 Cookieを取得するには、 ユーザーエージェントは、与えられた文書アドレスCookie ストアから、 ‘HTTP API’ のために cookie-string を計算するための [RFC6265] のアルゴリズムの第 1 手順で 定められた要件を満たす Cookieの列挙集合を返さなければならない。 返される Cookie は HttpOnly Cookieを含まなければならない。

リモートエンドCookie を作成するよう指示された場合、 これは [RFC6265] section 5.3Cookie を受信するにおいて説明される手順を実行することと同義であるが、 ユーザーエージェントは受信した Cookie 全体を無視してはならない (手順 1 は無視する)。

文字列である任意のフィルター引数 name が与えられたとき、 Cookie を削除するには:

  1. session現在の閲覧コンテキストアクティブ 文書すべての関連 Cookieのうち、各Cookieについて、 最初に一致する条件の副手順を実行する:

    nameundefinedである
    nameCookie 名と等しい

    Cookie 有効期限時刻を 過去のUnix タイムスタンプに設定する。

    その他の場合
    何もしない。

14.1 すべての Cookie を取得

HTTP メソッド URI テンプレート
GET /session/{session id}/cookie

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. cookies を新しいListとする。

  4. session現在の閲覧 コンテキストアクティブ 文書すべての関連 Cookie内の 各 cookie について:

    1. serialized cookiecookie直列化することの 結果とする。

    2. serialized cookiecookies に追加する。

  5. cookies をデータとして持つsuccessを返す。

14.5 すべての Cookie を削除

HTTP メソッド URI テンプレート
DELETE /session/{session id}/cookie

sessionURL variables および parameters が与えられたときの リモートエンド手順は次の通りである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such windowとともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試行する

  3. フィルター引数を与えずに、 Cookie を削除する

  4. nullをデータとして持つ successを返す。

15. アクション

Actions API は、ウェブブラウザーに仮想化されたデバイス入力を提供するための 低水準インターフェイスを提供する。 概念的には、Actions コマンドは時間を一連のティックに分割する。 ローカル エンドは、各ティック中の各入力デバイスの状態変化(存在する場合)に対応する 一連のアクションを送信する。 例えば、キーを押すことは、 単一のキー入力デバイスと 2 つのティックからなるアクションシーケンスにより表され、 1 つ目は keyDown アクションを含み、 2 つ目は keyUp アクションを含む。 一方、ピンチズーム入力は、3 つのティックと、 touch 型の 2 つのポインター入力デバイスからなるアクションシーケンスにより表され、 それぞれが pointerDown、 それに続く pointerMove、そして pointerUp の一連のアクションを実行する。

15.1 アクションオプション

アクション配送の構成は、 アクション オプションオブジェクトにより制御される。これは、 プロトコルオブジェクトが要素オリジンを表すかどうかを検証する手順の集合である 要素 オリジンであるという名前のフィールドと、 要素を逆直列化するために用いられる手順の集合である 要素 オリジンを取得を持つ 構造体である。

sessionorigin および browsing context が与えられたとき、 WebElement オリジンを取得するには:,

  1. 表明:browsing context現在の 閲覧コンテキストである。

  2. element を、 session および origin を用いて 既知の 要素を取得することを 試みることの結果と等しくする。

  3. element をデータとして持つsuccessを返す。

15.2 入力ソース

入力ソースは、入力イベントを提供する仮想デバイスである。 各入力ソースは、その入力ソースの型に固有の 構造体により 表される。各入力ソースは、入力状態マップ内のキーとして格納される 入力 IDを持つ。

input statetype および任意の subtype が与えられたとき、 入力ソースを 作成するには:

  1. type の最初に一致する値と一致する副手順を実行する:

    "none"
    source を、 null 入力ソースを 作成することの結果とする。
    "key"
    source を、 キー入力ソースを 作成することの結果とする。
    "pointer"
    source を、 input state および subtype を用いて ポインター 入力ソースを作成することの結果とする。
    "wheel"
    source を、 ホイール入力 ソースを作成することの結果とする。
    その他の場合:
    errorエラーコード invalid argumentとともに返す。
  2. source をデータとして持つsuccessを返す。

15.2.1 null 入力ソース

null 入力 ソースは、特定の物理デバイスに関連付けられない 入力ソースである。 null 入力 ソースは型固有の項目を持たず、次のアクションをサポートする:

アクション 非規範的説明
pause ティックの持続時間を指定するために整数引数とともに使用される、 または特定のティック中に 入力 ソースが何もしないことを示すプレースホルダーとして使用される。

null 入力ソースを作成するには、新しい null 入力 ソースを返す。

15.2.2 キー入力ソース

キー入力 ソースは、キーボード型デバイスに関連付けられた 入力ソースである。

キー入力ソースは、次の項目を持つ:

項目 非規範的説明 既定値
pressed 現在押されているキーを表す文字列の集合。 空集合
alt alt 修飾キーが押されているかどうかを示す boolean。 False
ctrl ctrl 修飾キーが押されているかどうかを示す boolean。 False
meta meta 修飾キーが押されているかどうかを示す boolean。 False
shift shift 修飾キーが押されているかどうかを示す boolean。 False

キー入力ソースは、 null 入力ソースと同じ pause アクションに加えて、次のアクションをサポートする:

アクション 非規範的説明
keyDown 特定のキーが押し下げられたままにされるべきことを示すために使用される。
keyUp 押し下げられているキーが解放されるべきことを示すために使用される。

キー入力ソースを作成するには、項目が既定値で初期化された新しい キー 入力ソースを返す。

15.2.3 ポインター入力ソース

ポインター 入力ソースは、ポインター型入力デバイスに関連付けられた 入力ソースである。

ポインター入力ソースは、次の項目を持つ:

項目 非規範的説明 既定値
subtype ポインティングデバイスの型。これは "mouse"、 "pen"、または "touch" にできる。
pointerId ポインティングデバイスの数値 ID。これは正の整数であり、 値 0 および 1 は mouse 型ポインター用に予約される。
pressed 現在押し下げられているポインターボタンを表す符号なし整数の集合。 空集合
x ビューポート座標におけるポインターの x 位置を表す符号なし整数。 0
y ビューポート座標におけるポインターの y 位置を表す符号なし整数。 0

ポインター入力ソースは、 null 入力ソースと同じ pause アクションに加えて、次のアクションをサポートする:

アクション 非規範的説明
pointerDown 例えば(マウスの場合)ボタンを押し下げたままにすること、 または(タッチもしくはペンデバイスの場合)アクティブな面に接触することにより、 ポインターが何らかの方法で押し下げられるべきことを示すために使用される。
pointerUp 例えばマウスボタンを解放すること、またはペンもしくはタッチデバイスを アクティブな面から離すことにより、ポインターが何らかの方法で解放されるべきことを 示すために使用される。
pointerMove アクティブ(押下)状態または非アクティブ状態のいずれかで、 ポインターが移動すべき画面上の位置を示すために使用される。
pointerCancel ポインターアクションを取り消すために使用される。

input state および subtype が与えられたとき、 ポインター入力ソースを作成するオブジェクトは、 subtype を subtype に設定し、pointerId を input state および subtype を用いて ポインター ID を取得するに設定し、 その他の項目を既定値に設定した新しいポインター入力 ソースを返す。

15.2.4 ホイール入力ソース

ホイール 入力ソースは、ホイール型入力デバイスに関連付けられた 入力ソースである。 ホイール入力 ソースは型固有の項目を持たず、null 入力 ソースと同じ pause アクションに加えて、 次のアクションをサポートする:

アクション 非規範的説明
scroll スクロールホイールが下、上、右、または左へ回され、 ページを下、上、右、または左へスクロールすることを示すために使用される。

ホイール入力ソースを作成するには、新しい ホイール 入力ソースを返す。

15.3 入力状態

入力状態は、 入力ソースのコレクション全体の状態を表す。 入力状態は、次の項目を持つ:

session および browsing context が与えられたとき、 入力状態を 取得するには:

  1. 表明:browsing contextトップレベル閲覧 コンテキストである。

  2. input state map を、 session閲覧コンテキスト 入力状態マップとする。

  3. input state mapbrowsing context含まない場合、 input state map[browsing context] を 入力 状態を作成するに設定する。

  4. input state map[browsing context] を返す。

session および browsing context が与えられたとき、 入力状態を リセットするには:

  1. 表明:browsing contextトップレベル閲覧 コンテキストである。

  2. input state map を、 session閲覧コンテキスト 入力状態マップとする。

  3. input state map[browsing context] が 存在する場合、input state map[browsing context] を削除する

入力 状態を作成するには:

  1. input state を、 入力状態とし、 入力状態マップを空マップに設定し、 入力 取消リストを空リストに設定する。

  2. input state を返す。

input stateinput id、および source が与えられたとき、 入力 ソースを追加するには:

  1. input state mapinput state入力状態マップとする。

  2. input state map[input id] を source に設定する。

input state および input id が与えられたとき、 入力 ソースを削除するには:

  1. 表明:input state入力取消リスト内の項目のいずれも、 input id と等しい id を持たない。

  2. input state mapinput state入力状態マップとする。

  3. input state map[input id] を削除する。

input state および input id が与えられたとき、 入力 ソースを取得するには:

  1. input state mapinput state入力状態マップとする。

  2. input state map[input id] が存在する場合、 input state map[input id] を返す。

  3. undefined を返す。

input statetypeinput id、および 任意の subtype が与えられたとき、 入力ソースを取得または作成するには:

  1. source を、input state および input id を用いて 入力ソースを取得するとする。

  2. source が undefined でなく、かつ source の型が type と等しくない場合、または sourceポインター入力ソースである場合、 errorエラー コード invalid argumentとともに返す。

  3. source が undefined である場合、 source を、input state および type を用いて 入力 ソースを作成することを 試みることの結果に設定する。

  4. source をデータとして持つ success を返す。

グローバルキー 状態は、pressed、 altKey、ctrlKey、metaKey、および shiftKey という項目を持つ 構造体である。

input state が与えられたとき、 グローバルキー 状態を取得するには:

  1. input state mapinput state入力状態マップとする。

  2. sources を、input state map を用いて値を取得することの結果とする。

  3. key state を、pressed を空集合に、 altKeyctrlKeymetaKey、 および shiftKey を false に設定した新しい グローバルキー状態とする。

  4. sources 内の各 source について:

    1. sourceキー入力ソースでない場合、 このループの最初の手順に進む。

    2. key statepressed 項目を、 その現在値と source の pressed 項目の和集合に設定する。

    3. sourcealt 項目が true である場合、 key statealtKey 項目を true に設定する。

    4. sourcectrl 項目が true である場合、 key statectrlKey 項目を true に設定する。

    5. sourcemeta 項目が true である場合、 key statemetaKey 項目を true に設定する。

    6. sourceshift 項目が true である場合、 key stateshiftKey 項目を true に設定する。

  5. key state を返す。

input state および subtype が与えられたとき、 ポインター ID を取得するには:

  1. subtype が "mouse" である場合は minimum id を 0 とし、そうでなければ 2 とする。
  2. pointer ids を空集合とする。
  3. sources を、input state入力状態マップを用いて値を取得することの結果とする。

  4. sources 内の各 source について。:

    1. sourceポインター入力 ソースである場合、 source の pointerId を pointer ids に追加する。

  5. minimum id 以上であり、 pointer ids に含まれない最小の整数を返す。

15.4 ティック

ティックは、アクションを実行できる時間の基本単位である。 ティック中、各入力ソースには、 割り当てられたアクション——noop のpauseアクションである可能性もある——があり、それは ユーザーエージェント内部状態の変更をもたらし、最終的に DOM イベントがページ上で 発火されることを引き起こし得る。次のティックは、 ユーザーエージェントが現在のティックで生成されたすべての DOM イベントを処理する機会を得た後に始まる。

非同期に 待機するとは、ブラウザーが イベント ループを処理し続けることを許しつつ、何かが発生するのを待機することを意味する。

最も低いレベルでは、アクションの振る舞いは、実際の入力デバイスを用いた リモートエンドの振る舞いを可能な限り忠実に模倣することが意図され、 実装戦略は、例えば合成イベントをブラウザーのイベントループへ注入することを含み得る。 したがって、アクションを配送する手順は必然的に実装固有の領域に入ることになる。 しかし、実装間で一貫していなければならない、コンテンツから観測可能な効果がいくつかある。 これに対応するため、この仕様は、 リモートエンド実装固有のアクション 配送手順を実行することを要求する。これは、閲覧コンテキスト context、 ならびに list of events およびそれらのプロパティに対して行われる。 これらの手順は、context 上で与えられた入力デバイス操作を実行することと同等であり、 list of events 内のエントリに対応する信頼済みイベントが配送されるようにしなければならない。

注記
注記

15.5 アクションの処理

リクエストから アクションシーケンスを抽出するアルゴリズムは、 アクションシーケンスを表す JSON Objectを取り、入力を検証し、 入力 JSON の転置であるデータ構造を返す。それにより、単一の ティックで実行されるアクションが グループ化される。

sourcex offsety offsetoriginbrowsing context、および actions options が与えられたとき、 原点に相対的な座標を取得するには:

  1. origin の最初に一致する値の副手順を実行する

    "viewport"
    1. xx offset と等しくし、 yy offset と等しくする。

    "pointer"
    1. start xsourcex プロパティと等しくする。

    2. start ysourcey プロパティと等しくする。

    3. xstart x + x offset と等しくし、ystart y + y offset と等しくする。

    その他の場合
    1. element を、origin および browsing context を用いて actions options要素オリジンを取得手順を 実行することを試みることの結果とする。

    2. element が null である場合、errorエラー コード no such elementとともに返す。

    3. x element および y element を、 elementビュー内中心 点を計算した結果とする。

    4. xx element + x offset と等しくし、yy element + y offset と等しくする。

  2. (x, y) を返す

input stateparameters、および actions options が与えられたとき、 アクションシーケンスを抽出するには:

  1. actions を、parameters から "actions" という名前の プロパティを 取得することの結果とする。

  2. actionsundefinedである、または Arrayでない場合、errorエラー コード invalid argumentとともに返す。

  3. actions by tick を空のListとする。

  4. actions 内のインデックス付きプロパティに対応する各値 action sequence について:

    1. source actions を、input stateaction sequence、および actions options が与えられたときに 入力ソースアクション シーケンスを処理することを試みることの結果とする。

    2. source actions 内の各 action について:

      1. i を、source actions 内の action の 0 基点インデックスとする。

      2. actions by tick の長さが i + 1 より小さい場合、新しいListactions by tick に追加する。

      3. action を、actions by tick 内の インデックス i にあるListに追加する。

  5. actions by tick をデータとして持つsuccessを返す。

input stateaction sequence、および actions options が与えられ、 入力ソースアクション シーケンスを処理することが要求された場合、 リモートエンドは 次を行わなければならない:

  1. type を、action sequence から "type" という名前のプロパティを取得することの結果とする。

  2. type が "key"、"pointer"、 "wheel"、または "none" でない場合、 errorエラーコード invalid argumentとともに返す。

  3. id を、 action sequence から "id" プロパティを取得することの結果とする。

  4. idundefinedである、またはStringでない場合、 errorエラーコード invalid argumentとともに返す。

  5. type が "pointer" と等しい場合、 parameters dataaction sequence から "parameters" プロパティを取得することの結果とする。 その後、parameters を、 parameters data を引数として ポインターパラメーターを処理することを 試みることの結果とする。

  6. source を、input statetype および id が与えられたときに 入力ソースを取得または 作成することを試みることの結果とする。

  7. parametersundefinedでない場合、 その pointerType プロパティが source の subtype プロパティと 等しくないなら、errorエラーコード invalid argumentとともに返す。

  8. action items を、action sequence から "actions" という名前のプロパティを 取得することの結果とする。

  9. action itemsArrayでない場合、 errorエラーコード invalid argumentとともに返す。

  10. actions を新しいリストとする。

  11. action items 内の各 action item について:

    1. action itemObjectでない場合、 errorエラー コード invalid argumentとともに返す。

    2. type が "none" である場合、 action を、id および action item をパラメーターとして null アクションを処理することを 試みることの結果とする。

    3. そうでなければ、type が "key" である場合、 action を、id および action item をパラメーターとして キーアクションを処理することを 試みることの結果とする。

    4. そうでなければ、type が "pointer" である場合、 action を、idparametersaction item、および actions options をパラメーターとして ポインターアクションを処理することを 試みることの結果とする。

    5. そうでなければ、type が "wheel" である場合、 action を、id および action item、ならびに actions options をパラメーターとして ホイールアクションを処理することを 試みることの結果とする。

    6. actionactions に追加する。

  12. actions をデータとして持つsuccessを返す。

既定のポインターパラメーターは、 プロパティ pointerTypemouse に設定されたオブジェクトからなる。

parameters data が与えられたとき、 ポインターパラメーターを処理するには:

  1. parameters既定のポインター パラメーターとする。

  2. parameters dataundefinedである場合、 parameters をデータとして持つsuccessを返す。

  3. parameters dataObjectでない場合、 errorエラーコード invalid argumentとともに返す。

  4. pointer type を、parameters data から "pointerType" という名前の プロパティを取得することの結果とする。

  5. pointer typeundefinedでない場合:

    1. pointer type が "mouse"、 "pen"、 または "touch" のいずれの値でもない場合、 errorエラー コード invalid argumentとともに返す。

    2. parameterspointerType プロパティを pointer type に設定する。

  6. parameters をデータとして持つsuccessを返す。

引数 idtype、および subtype で構築された アクションオブジェクトは、 プロパティ id が id に、type が type に、subtype が subtype に設定されたオブジェクトである。特定のアクションオブジェクトには、 この仕様内の他のアルゴリズムにより追加のプロパティが加えられる。

id および action item が与えられたとき、 null アクションを処理するには:

  1. subtype を、action item から "type" という名前のプロパティを取得することの結果とする。

  2. subtype が "pause" でない場合、 errorエラーコード invalid argumentとともに返す。

  3. action を、引数 id"none"、 および subtype で構築されたアクションオブジェクトとする。

  4. result を、引数 action item および actionpause アクションを処理することを試みることの結果とする。

  5. result を返す。

id および action item が与えられたとき、 キー アクションを処理するには:

  1. subtype を、action item から "type" という名前のプロパティを取得することの結果とする。

  2. subtype が "keyUp"、 "keyDown"、 または "pause" のいずれの値でもない場合、 errorエラーコード invalid argumentとともに返す。

  3. action を、引数 id、 "key"、 および subtype で構築されたアクションオブジェクトとする。

  4. subtype が "pause" である場合、 result を、引数 action item および actionpause アクションを処理することを試みることの結果とし、 result を返す。

  5. key を、action item から "value" という名前のプロパティを取得することの結果とする。

  6. key が単一のUnicode コードポイントを含むStringでない場合 または書記素クラスター? errorエラーコード invalid argumentとともに返す。

  7. action 上の value プロパティを key に設定する。

  8. action をデータとして持つ success を返す。

idparametersaction item、および action options が与えられたとき、 ポインター アクションを処理するには:

  1. subtype を、action item から "type" という名前のプロパティを取得することの結果とする。

  2. subtype が "pause"、 "pointerUp"、 "pointerDown"、 "pointerMove"、 または "pointerCancel" のいずれの値でもない場合、 errorエラーコード invalid argumentとともに返す。

  3. action を、引数 id、 "pointer"、 および subtype で構築されたアクションオブジェクトとする。

  4. subtype が "pause" である場合、 result を、引数 action itemaction、および actions optionspause アクションを処理することを 試みることの結果とし、 result を返す。

  5. actionpointerType プロパティを、 parameterspointerType プロパティと等しく設定する。

  6. subtype が "pointerUp" または "pointerDown" である場合、 引数 action item および actionポインター up または pointer down アクションを処理する。 そうすることでerrorになる場合、そのerrorを返す。

  7. subtype が "pointerMove" である場合、 引数 action itemaction、および actions optionsポインター移動アクションを処理する。 そうすることでerrorになる場合、その errorを返す。

  8. subtype が "pointerCancel" である場合、 pointer cancel アクションを処理する。 そうすることでerrorになる場合、そのerrorを返す。

  9. action をデータとして持つsuccessを返す。

idaction item、および actions options が与えられたとき、 ホイール アクションを処理するには:

  1. subtype を、action item から "type" という名前のプロパティを取得することの結果とする。

  2. subtype が値 "pause"、または "scroll" でない場合、 errorエラーコード invalid argumentとともに返す。

  3. action を、引数 id、 "wheel"、 および subtype で構築されたアクションオブジェクトとする。

  4. subtype が "pause" である場合、 result を、引数 action item および actionpause アクションを処理することを 試みることの結果とし、 result を返す。

  5. duration を、action item から "duration" という名前のプロパティを取得することの結果とする。

  6. durationundefinedでなく、かつ duration が 0 以上のIntegerでない場合、errorエラーコード invalid argumentとともに返す。

  7. actionduration プロパティを duration に設定する。

  8. origin を、action item から origin プロパティを取得することの結果とする。

  9. originundefinedである場合、 origin を "viewport" と等しくする。

  10. origin が "viewport" と等しくない、 または origin を与えられた actions options要素オリジンである手順が false を返す場合、errorエラーコード invalid argumentとともに返す。

  11. actionorigin プロパティを origin に設定する。

  12. x を、action item から x プロパティを取得することの結果とする。

  13. xIntegerでない場合、errorエラーコード invalid argumentとともに返す。

  14. actionx プロパティを x に設定する。

  15. y を、action item から y プロパティを取得することの結果とする。

  16. yIntegerでない場合、errorエラーコード invalid argumentとともに返す。

  17. actiony プロパティを y に設定する。

  18. deltaX を、action item から deltaX プロパティを取得することの結果とする。

  19. deltaXIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  20. actiondeltaX プロパティを deltaX に設定する。

  21. deltaY を、action item から deltaY プロパティを取得することの結果とする。

  22. deltaYIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  23. actiondeltaY プロパティを deltaY に設定する。

  24. action をデータとして持つsuccessを返す。

action item および action が与えられたとき、 pause アクションを処理するには:

  1. duration を、action item から "duration" プロパティを 取得することの結果とする。

  2. durationundefinedでなく、 かつ duration が 0 以上のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  3. actionduration プロパティを duration に設定する。

  4. action をデータとして持つ success を返す。

action item および action が与えられたとき、 pointer up または pointer down アクションを処理するには:

  1. button を、 action item から button プロパティを取得することの結果とする。

  2. button が 0 以上のIntegerでない場合、errorエラーコード invalid argumentとともに返す。

  3. actionbutton プロパティを button に設定する。

  4. width を、 action item から width プロパティを取得することの結果とする。

  5. widthundefinedでなく、 かつ width が 0 以上のNumberでない場合、errorエラーコード invalid argumentとともに返す。

  6. actionwidth プロパティを width に設定する。

  7. height を、 action item から height プロパティを取得することの結果とする。

  8. heightundefinedでなく、 かつ height が 0 以上のNumberでない場合、errorエラーコード invalid argumentとともに返す。

  9. actionheight プロパティを height に設定する。

  10. pressure を、 action item から pressure プロパティを取得することの結果とする。

  11. pressureundefinedでなく、 かつ pressure が 0 以上 1 以下のNumberでない場合、errorエラーコード invalid argumentとともに返す。

  12. actionpressure プロパティを pressure に設定する。

  13. tangentialPressure を、 action item から tangentialPressure プロパティを取得することの結果とする。

  14. tangentialPressureundefinedでなく、 かつ tangentialPressure が -1 以上 1 以下のNumberでない場合、 errorエラーコード invalid argumentとともに返す。

  15. actiontangentialPressure プロパティを tangentialPressure に設定する。

  16. tiltX を、 action item から tiltX プロパティを取得することの結果とする。

  17. tiltXundefinedでなく、 かつ tiltX が -90 以上 90 以下のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  18. actiontiltX プロパティを tiltX に設定する。

  19. tiltY を、 action item から tiltY プロパティを取得することの結果とする。

  20. tiltYundefinedでなく、 かつ tiltY が -90 以上 90 以下のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  21. actiontiltY プロパティを tiltY に設定する。

  22. twist を、 action item から twist プロパティを取得することの結果とする。

  23. twistundefinedでなく、 かつ twist が 0 以上 359 以下のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  24. actiontwist プロパティを twist に設定する。

  25. altitudeAngle を、 action item から altitudeAngle プロパティを取得することの結果とする。

  26. altitudeAngleundefinedでなく、 かつ altitudeAngle が 0 以上 π/2 以下のNumberでない場合、 errorエラーコード invalid argumentとともに返す。

  27. actionaltitudeAngle プロパティを altitudeAngle に設定する。

  28. azimuthAngle を、 action item から azimuthAngle プロパティを取得することの結果とする。

  29. azimuthAngleundefinedでなく、 かつ azimuthAngle が 0 以上 2π 以下のNumberでない場合、 errorエラーコード invalid argumentとともに返す。

  30. actionazimuthAngle プロパティを azimuthAngle に設定する。

  31. nullをデータとして持つ success を返す。

action itemaction、および actions options が与えられたとき、 ポインター移動アクションを処理するには:

  1. duration を、 action item から duration プロパティを取得することの結果とする。

  2. durationundefinedでなく、 かつ duration が 0 以上のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  3. actionduration プロパティを duration に設定する。

  4. origin を、 action item から origin プロパティを取得することの結果とする。

  5. originundefinedである場合、 origin を "viewport" と等しくする。

  6. origin が "viewport" または "pointer" と等しくなく、かつ origin を与えられた actions options要素 オリジンである手順が false を返す場合、 errorエラーコード invalid argumentとともに返す。

  7. actionorigin プロパティを origin に設定する。

  8. x を、 action item から x プロパティを取得することの結果とする。

  9. xNumberでない場合、errorエラーコード invalid argumentとともに返す。

  10. actionx プロパティを x に設定する。

  11. y を、 action item から y プロパティを取得することの結果とする。

  12. yNumberでない場合、errorエラーコード invalid argumentとともに返す。

  13. actiony プロパティを y に設定する。

  14. width を、 action item から width プロパティを取得することの結果とする。

  15. widthundefinedでなく、 かつ width が 0 以上のNumberでない場合、errorエラーコード invalid argumentとともに返す。

  16. actionwidth プロパティを width に設定する。

  17. height を、 action item から height プロパティを取得することの結果とする。

  18. heightundefinedでなく、 かつ height が 0 以上のNumberでない場合、errorエラーコード invalid argumentとともに返す。

  19. actionheight プロパティを height に設定する。

  20. pressure を、 action item から pressure プロパティを取得することの結果とする。

  21. pressureundefinedでなく、 かつ pressure が 0 以上 1 以下のNumberでない場合、errorエラーコード invalid argumentとともに返す。

  22. actionpressure プロパティを pressure に設定する。

  23. tangentialPressure を、 action item から tangentialPressure プロパティを取得することの結果とする。

  24. tangentialPressureundefinedでなく、 かつ tangentialPressure が -1 以上 1 以下のNumberでない場合、 errorエラーコード invalid argumentとともに返す。

  25. actiontangentialPressure プロパティを tangentialPressure に設定する。

  26. tiltX を、 action item から tiltX プロパティを取得することの結果とする。

  27. tiltXundefinedでなく、 かつ tiltX が -90 以上 90 以下のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  28. actiontiltX プロパティを tiltX に設定する。

  29. tiltY を、 action item から tiltY プロパティを取得することの結果とする。

  30. tiltYundefinedでなく、 かつ tiltY が -90 以上 90 以下のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  31. actiontiltY プロパティを tiltY に設定する。

  32. twist を、 action item から twist プロパティを取得することの結果とする。

  33. twistundefinedでなく、 かつ twist が 0 以上 359 以下のIntegerでない場合、 errorエラーコード invalid argumentとともに返す。

  34. actiontwist プロパティを twist に設定する。

  35. altitudeAngle を、 action item から altitudeAngle プロパティを取得することの結果とする。

  36. altitudeAngleundefinedでなく、 かつ altitudeAngle が 0 以上 π/2 以下のNumberでない場合、 errorエラーコード invalid argumentとともに返す。

  37. actionaltitudeAngle プロパティを altitudeAngle に設定する。

  38. azimuthAngle を、 action item から azimuthAngle プロパティを取得することの結果とする。

  39. azimuthAngleundefinedでなく、 かつ azimuthAngle が 0 以上 2π 以下のNumberでない場合、 errorエラーコード invalid argumentとともに返す。

  40. actionazimuthAngle プロパティを azimuthAngle に設定する。

  41. nullをデータとして持つ success を返す。

15.6 アクションの配送

アクションを配送するアルゴリズムは、 ティックごとにグループ化されたアクションのリストを取り、 その後、各アクションをシーケンス内の適切な時点で実行させる。

input state が与えられたとき、 アクションキュートークンを待機するには:

  1. token を新しい一意識別子とする。

  2. tokeninput stateアクションキューにエンキューする。

  3. tokeninput stateアクションキュー内の 最初の項目になるまで待機する。

    注記

input stateactions by tickbrowsing context、および actions options が与えられたとき、 アクションを 配送するには:

  1. input state を用いて アクションキュートークンを待機する

  2. actions result を、 input stateactions by tickbrowsing context、および actions options を用いて 内部的にアクションを配送することの結果とする。

  3. input stateアクションキューをデキューする。

    表明:これは token を返す

  4. actions result を返す。

input stateactions by tickbrowsing context、および actions options が与えられたとき、 内部的に アクションを配送するには:

  1. actions by tick 内の各項目 tick actions について:

    1. browsing contextもはや開かれていない場合、 errorエラーコード no such windowとともに返す。
    2. tick duration を、引数 tick actions を用いて ティック持続時間を計算することの 結果とする。

    3. input statetick actionstick durationbrowsing context、および actions options を用いて ティックアクションを配送することを 試みる

    4. 次の条件がすべて満たされるまで待機する:

  2. nullをデータとして持つ success を返す。

tick actions が与えられたとき、 ティック 持続時間を計算するには:

  1. max duration を 0 とする。

  2. tick actions 内の各 action object について:

    1. durationundefinedとする。

    2. action object の subtype プロパティが "pause" に設定されている場合、または action object の type プロパティが "pointer" に設定され subtype プロパティが "pointerMove" に設定されている場合、または action object の type プロパティが "wheel" に設定され subtype プロパティが "scroll" に設定されている場合、 durationaction objectduration プロパティと等しくする。

    3. durationundefinedでなく、 かつ durationmax duration より大きい場合、 max duration を duration と等しくする。

  3. max duration を返す。

input statetick actionstick durationbrowsing context、および actions options が与えられたとき、 ティック アクションを配送するには:

  1. tick actions 内の各 action object について:

    1. input idaction object の id プロパティの値と等しくする。

    2. source typeaction object の type プロパティの値と等しくする。

    3. source を、input state および input id が 与えられたときに入力 ソースを取得することの結果とする。

    4. 表明:source は undefined でない。

    5. global key state を、input state を用いて グローバルキー状態を 取得することの結果とする。

    6. subtypeaction object の subtype とする。

    7. algorithm を、次の表のうち source type 列が source type であり、 subtype 列が subtype と等しい行における dispatch action algorithm 列の値とする。

      ソース型 サブタイプ 配送アクションアルゴリズム
      "none" "pause" pause アクションを配送する
      "key" "pause" pause アクションを配送する
      "key" "keyDown" keyDown アクションを配送する
      "key" "keyUp" keyUp アクションを配送する
      "pointer" "pause" pause アクションを配送する
      "pointer" "pointerDown" pointerDown アクションを配送する
      "pointer" "pointerUp" pointerUp アクションを配送する
      "pointer" "pointerMove" pointerMove アクションを配送する
      "pointer" "pointerCancel" pointerCancel アクションを配送する
      "wheel" "pause" pause アクションを配送する
      "wheel" "scroll" scroll アクションを配送する
    8. action objectsourceglobal key statetick durationbrowsing context、および actions options を引数として algorithm を実行することを 試みる
    9. subtype が "keyDown" である場合、 subtype プロパティを "keyUp" に変更した action object のコピーを input state入力取消リストに追加する。

    10. subtype が "pointerDown" である場合、 subtype プロパティを "pointerUp" に変更した action object のコピーを input state入力取消リストに追加する。

  2. nullをデータとして持つsuccessを返す。

input stateactionsbrowsing context、 および actions options が与えられたとき、 アクションのリストを配送するには:

注記
  1. tick actions をリスト «actions» とする

  2. actions by tick をリスト «tick actions» とする。

  3. input stateactions by tickbrowsing context、 および actions options を用いて アクションを配送することの結果を返す。

15.6.1 一般アクション

action objectsourceglobal key statetick durationbrowsing context、および actions options が与えられたとき、 pause アクションを配送するには:

  1. nullを データとして持つsuccessを返す。

15.6.2 キーボードアクション

生のキー key に対する 正規化されたキー値は、 key が下の表に現れる場合、 第 1 列に keyUnicode コードポイントを含む行の第 2 列の文字列値であり、そうでなければ key である。

key のコードポイント 正規化されたキー値
\uE000 "Unidentified"
\uE001 "Cancel"
\uE002 "Help"
\uE003 "Backspace"
\uE004 "Tab"
\uE005 "Clear"
\uE006 "Return"
\uE007 "Enter"
\uE008 "Shift"
\uE009 "Control"
\uE00A "Alt"
\uE00B "Pause"
\uE00C "Escape"
\uE00D " "
\uE00E "PageUp"
\uE00F "PageDown"
\uE010 "End"
\uE011 "Home"
\uE012 "ArrowLeft"
\uE013 "ArrowUp"
\uE014 "ArrowRight"
\uE015 "ArrowDown"
\uE016 "Insert"
\uE017 "Delete"
\uE018 ";"
\uE019 "="
\uE01A "0"
\uE01B "1"
\uE01C "2"
\uE01D "3"
\uE01E "4"
\uE01F "5"
\uE020 "6"
\uE021 "7"
\uE022 "8"
\uE023 "9"
\uE024 "*"
\uE025 "+"
\uE026 ","
\uE027 "-"
\uE028 "."
\uE029 "/"
\uE031 "F1"
\uE032 "F2"
\uE033 "F3"
\uE034 "F4"
\uE035 "F5"
\uE036 "F6"
\uE037 "F7"
\uE038 "F8"
\uE039 "F9"
\uE03A "F10"
\uE03B "F11"
\uE03C "F12"
\uE03D "Meta"
\uE040 "ZenkakuHankaku"
\uE050 "Shift"
\uE051 "Control"
\uE052 "Alt"
\uE053 "Meta"
\uE054 "PageUp"
\uE055 "PageDown"
\uE056 "End"
\uE057 "Home"
\uE058 "ArrowLeft"
\uE059 "ArrowUp"
\uE05A "ArrowRight"
\uE05B "ArrowDown"
\uE05C "Insert"
\uE05D "Delete"

key に対する codeは、 次の表の第 1 列または第 2 列のいずれかに key を持つ行が存在する場合、 その行の最後の列の値であり、 そうした行が存在しない場合はundefinedである。

shift された文字は、次の表の第 2 列に現れるものである。

キー 代替キー code
"`" "~" "Backquote"
"\" "|" "Backslash"
"\uE003" "Backspace"
"[" "{" "BracketLeft"
"]" "}" "BracketRight"
"," "<" "Comma"
"0" ")" "Digit0"
"1" "!" "Digit1"
"2" "@" "Digit2"
"3" "#" "Digit3"
"4" "$" "Digit4"
"5" "%" "Digit5"
"6" "^" "Digit6"
"7" "&" "Digit7"
"8" "*" "Digit8"
"9" "(" "Digit9"
"=" "+" "Equal"
"<" ">" "IntlBackslash"
"a" "A" "KeyA"
"b" "B" "KeyB"
"c" "C" "KeyC"
"d" "D" "KeyD"
"e" "E" "KeyE"
"f" "F" "KeyF"
"g" "G" "KeyG"
"h" "H" "KeyH"
"i" "I" "KeyI"
"j" "J" "KeyJ"
"k" "K" "KeyK"
"l" "L" "KeyL"
"m" "M" "KeyM"
"n" "N" "KeyN"
"o" "O" "KeyO"
"p" "P" "KeyP"
"q" "Q" "KeyQ"
"r" "R" "KeyR"
"s" "S" "KeyS"
"t" "T" "KeyT"
"u" "U" "KeyU"
"v" "V" "KeyV"
"w" "W" "KeyW"
"x" "X" "KeyX"
"y" "Y" "KeyY"
"z" "Z" "KeyZ"
"-" "_" "Minus"
"." "." "Period"
"'" """ "Quote"
";" ":" "Semicolon"
"/" "?" "Slash"
"\uE00A" "AltLeft"
"\uE052" "AltRight"
"\uE009" "ControlLeft"
"\uE051" "ControlRight"
"\uE006" "Enter"
"\uE00B" "Pause"
"\uE03D" "MetaLeft"
"\uE053" "MetaRight"
"\uE008" "ShiftLeft"
"\uE050" "ShiftRight"
" " "\uE00D" "Space"
"\uE004" "Tab"
"\uE017" "Delete"
"\uE010" "End"
"\uE002" "Help"
"\uE011" "Home"
"\uE016" "Insert"
"\uE00F" "PageDown"
"\uE00E" "PageUp"
"\uE015" "ArrowDown"
"\uE012" "ArrowLeft"
"\uE014" "ArrowRight"
"\uE013" "ArrowUp"
"\uE00C" "Escape"
"\uE031" "F1"
"\uE032" "F2"
"\uE033" "F3"
"\uE034" "F4"
"\uE035" "F5"
"\uE036" "F6"
"\uE037" "F7"
"\uE038" "F8"
"\uE039" "F9"
"\uE03A" "F10"
"\uE03B" "F11"
"\uE03C" "F12"
"\uE019" "NumpadEqual"
"\uE01A" "\uE05C" "Numpad0"
"\uE01B" "\uE056" "Numpad1"
"\uE01C" "\uE05B" "Numpad2"
"\uE01D" "\uE055" "Numpad3"
"\uE01E" "\uE058" "Numpad4"
"\uE01F" "Numpad5"
"\uE020" "\uE05A" "Numpad6"
"\uE021" "\uE057" "Numpad7"
"\uE022" "\uE059" "Numpad8"
"\uE023" "\uE054" "Numpad9"
"\uE025" "NumpadAdd"
"\uE026" "NumpadComma"
"\uE028" "\uE05D" "NumpadDecimal"
"\uE029" "NumpadDivide"
"\uE007" "NumpadEnter"
"\uE024" "NumpadMultiply"
"\uE027" "NumpadSubtract"

key に対する キー 位置は、下の表の第 1 列に key が現れる行が存在する場合、 その行の最後の列の値であり、そうした行が存在しない場合は 0 である。

key のコードポイント 説明 位置
\uE007 Enter 1
\uE008 左 Shift 1
\uE009 左 Control 1
\uE00A 左 Alt 1
\uE019 テンキー = 3
\uE01A テンキー 0 3
\uE01B テンキー 1 3
\uE01C テンキー 2 3
\uE01D テンキー 3 3
\uE01E テンキー 4 3
\uE01F テンキー 5 3
\uE020 テンキー 6 3
\uE021 テンキー 7 3
\uE022 テンキー 8 3
\uE023 テンキー 9 3
\uE024 テンキー * 3
\uE025 テンキー + 3
\uE026 テンキー , 3
\uE027 テンキー - 3
\uE028 テンキー . 3
\uE029 テンキー / 3
\uE03D 左 Meta 1
\uE050 右 Shift 2
\uE051 右 Control 2
\uE052 右 Alt 2
\uE053 右 Meta 2
\uE054 テンキー PageUp 3
\uE055 テンキー PageDown 3
\uE056 テンキー End 3
\uE057 テンキー Home 3
\uE058 テンキー ArrowLeft 3
\uE059 テンキー ArrowUp 3
\uE05A テンキー ArrowRight 3
\uE05B テンキー ArrowDown 3
\uE05C テンキー Insert 3
\uE05D テンキー Delete 3

action objectsourceglobal key statetick durationbrowsing context、および actions options が与えられたとき、 keyDown アクションを配送するには:

  1. raw keyaction objectvalue プロパティと等しくする。

  2. key を、raw key に対する 正規化されたキー値と 等しくする。

  3. sourcepressed プロパティが key を含む場合、repeat を true とし、そうでなければ repeat を false とする。

  4. coderaw key に対する code とする。

  5. locationraw key に対する キー位置とする。

  6. charCodekeyCode および which を、[UI-EVENTS] のガイドラインに従い、 102 キー US キーボード上のキー key および位置 location を持つキーに適切な、 charCodekeyCode および which プロパティの実装固有の値とする。

  7. key"Alt" である場合、 sourcealt プロパティを true とする。

  8. key"Shift" である場合、 sourceshift プロパティを true とする。

  9. key"Control" である場合、 sourcectrl プロパティを true とする。

  10. key"Meta" である場合、 sourcemeta プロパティを true とする。

  11. keysourcepressed プロパティに追加する。

  12. [UI-EVENTS] の要件に従って キーボード上のキーを押すことと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行い、指定されたプロパティを持つ次のイベントを、 適切な場合に生成する。これは常に、少なくとも keyDown イベントを含むイベントを生成する。

    • keyDown とプロパティ:
      属性
      key key
      code code
      location location
      altKey sourcealt プロパティ
      shiftKey sourceshift プロパティ
      ctrlKey sourcectrl プロパティ
      metaKey sourcemeta プロパティ
      repeat repeat
      isComposing false
      charCode charCode
      keyCode keyCode
      which which
    • keyPress とプロパティ:
      属性
      key key
      code code
      location location
      altKey sourcealt プロパティ
      shiftKey sourceshift プロパティ
      ctrlKey sourcectrl プロパティ
      metaKey sourcemeta プロパティ
      repeat repeat
      isComposing false
      charCode charCode
      keyCode keyCode
      which which
  13. nullを データとして持つsuccessを返す。

注記

action objectsourceglobal key statetick durationbrowsing context、 および actions options が与えられたとき、 keyUp アクションを配送するには:

  1. raw keyaction objectvalue プロパティと等しくする。

  2. key を、raw key に対する 正規化されたキー値と等しくする。

  3. sourcepressed 項目が key を含まない場合、返す。

  4. coderaw key に対するcode とする。

  5. locationraw key に対するキー位置とする。

  6. charCodekeyCode および which を、[UI-EVENTS] のガイドラインに従い、 102 キー US キーボード上のキー key および位置 location を持つキーに適切な、 charCodekeyCode および which プロパティの実装固有の値とする。

  7. key が "Alt" である場合、 sourcealt プロパティを false とする。

  8. key が "Shift" である場合、 sourceshift プロパティを false とする。

  9. key"Control" である場合、 sourcectrl プロパティを false とする。

  10. key"Meta" である場合、 sourcemeta プロパティを false とする。

  11. keysourcespressed プロパティから削除する。

  12. [UI-EVENTS] の要件に従って キーボード上のキーを解放することと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行い、少なくとも指定されたプロパティを持つ次の イベントを生成する:

    • keyup、 プロパティ:
      属性
      key key
      code code
      location location
      altKey sourcealtKey プロパティ
      shiftKey sourceshift プロパティ
      ctrlKey sourcectrl プロパティ
      metaKey sourcemeta プロパティ
      repeat false
      isComposing false
      charCode charCode
      keyCode keyCode
      which which
  13. nullを データとして持つsuccessを返す。

15.6.3 ポインターアクション

action objectsourceglobal key statetick durationbrowsing context、 および actions options が与えられたとき、 pointerDown アクションを配送するには:

  1. pointerTypeaction objectpointerType プロパティと等しくする。

  2. buttonaction objectbutton プロパティと等しくする。

  3. sourcepressed プロパティが button を含む場合、successを、データとして nullとともに返す。

  4. xsourcex プロパティと等しくする。

  5. ysourcey プロパティと等しくする。

  6. buttonsourcepressed プロパティに対応する集合に追加し、 buttons をそのプロパティの結果値とする。

  7. widthaction objectwidth プロパティと等しくする。

  8. heightaction objectheight プロパティと等しくする。

  9. pressureaction objectpressure プロパティと等しくする。

  10. tangentialPressureaction objecttangentialPressure プロパティと等しくする。

  11. tiltXaction objecttiltX プロパティと等しくする。

  12. tiltYaction objecttiltY プロパティと等しくする。

  13. twistaction objecttwist プロパティと等しくする。

  14. altitudeAngleaction objectaltitudeAngle プロパティと等しくする。

  15. azimuthAngleaction objectazimuthAngle プロパティと等しくする。

  16. [UI-EVENTS] および [POINTER-EVENTS] の要件に従い、 pointerId が source の pointerId と等しいポインター上で、 番号 button のボタンを押すことと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行う。そのポインターは、 viewport x 座標 x、viewport y 座標 ywidthheightpressuretangentialPressuretiltXtiltYtwistaltitudeAngleazimuthAngle において、型 pointerType を持ち、 buttons 個のボタンが押し下げられている。 ctrlKeyshiftKeyaltKey、および metaKey は、 global key state 内の対応する項目と等しく設定する。 webdriver API を通じて公開されないポインターの型固有プロパティは、 そのプロパティをサポートしないハードウェアに対して指定された既定値に設定されなければならない。

  17. successを、データとしてnullとともに返す。

action objectsourceglobal key statetick durationbrowsing context、 および actions options が与えられたとき、 pointerUp アクションを配送するには:

  1. pointerTypeaction objectpointerType プロパティと等しくする。

  2. buttonaction objectbutton プロパティと等しくする。

  3. sourcepressed プロパティが button を含まない場合、 successを、データとして nullとともに返す。

  4. xsourcex プロパティと等しくする。

  5. ysourcey プロパティと等しくする。

  6. buttonsourcepressed プロパティに対応する集合から削除し、 buttons をそのプロパティの結果値とする。

  7. [UI-EVENTS] および [POINTER-EVENTS] の要件に従い、 pointerId が input source の pointerId と等しいポインター上で、 番号 button のボタンを解放することと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行う。そのポインターは、 viewport x 座標 x、viewport y 座標 y において 型 pointerType を持ち、 buttons 個のボタンが押し下げられている。 生成されるイベントは、 ctrlKeyshiftKeyaltKey、および metaKeyglobal key state 内の対応する項目と等しく設定しなければならない。 webdriver API を通じて公開されないポインターの型固有プロパティは、 そのプロパティをサポートしないハードウェアに対して指定された既定値に設定されなければならない。

  8. successを、データとしてnullとともに返す。

action objectsourceglobal key statetick durationbrowsing context、 および actions options が与えられたとき、 pointerMove アクションを配送するには:

  1. x offsetaction objectx プロパティと等しくする。

  2. y offsetaction objecty プロパティと等しくする。

  3. originaction objectorigin プロパティと等しくする。

  4. (x, y) を、 sourcex offsety offsetoriginbrowsing context、および actions options を用いて 原点に相対的な 座標を取得することを 試みることの結果とする。

  5. x が 0 未満、または CSS ピクセル単位のビューポートの幅より大きい場合、 エラーコード move target out of bounds を持つ errorを返す。

  6. y が 0 未満、または CSS ピクセル単位のビューポートの高さより大きい場合、 エラーコード move target out of bounds を持つerrorを返す。

  7. duration を、 action objectduration プロパティが undefinedでない場合はそれと等しくし、 そうでなければ tick duration と等しくする。

  8. duration が 0 より大きく、かつ何らかの実装定義の境界内にある場合、 実装定義の時間量が経過するまで 非同期に待機する

  9. widthaction objectwidth プロパティと等しくする。

  10. heightaction objectheight プロパティと等しくする。

  11. pressureaction objectpressure プロパティと等しくする。

  12. tangentialPressureaction objecttangentialPressure プロパティと等しくする。

  13. tiltXaction objecttiltX プロパティと等しくする。

  14. tiltYaction objecttiltY プロパティと等しくする。

  15. twistaction objecttwist プロパティと等しくする。

  16. altitudeAngleaction objectaltitudeAngle プロパティと等しくする。

  17. azimuthAngleaction objectazimuthAngle プロパティと等しくする。

  18. sourceglobal key statedurationstart xstart yxywidthheightpressuretangentialPressuretiltXtiltYtwistaltitudeAngleazimuthAngle を引数として ポインター移動を実行する

  19. successを、データとしてnullとともに返す。

sourceglobal key statedurationstart xstart ytarget xtarget ywidthheightpressuretangentialPressuretiltXtiltYtwistaltitudeAngle、 および azimuthAngle が与えられたとき、 ポインター移動を実行するには:

  1. time delta を、現在のティックの開始からの時間とし、単調時計上のミリ秒で測定する。

  2. duration ratio を、duration が 0 より大きい場合は time deltaduration の比とし、 そうでなければ 1 とする。

  3. duration ratio が 1、または実装が移動アクションをさらに細分しない程度に 1 に十分近い場合、last を true とする。そうでなければ lastfalse とする。

  4. last が true である場合、xtarget x と等しくし、ytarget y と等しくする。

    そうでなければ、xduration ratio × (target x - start x) + start x の近似値と等しくし、 yduration ratio × (target y - start y) + start y の近似値と等しくする。

  5. current xinput statex プロパティと等しくする。

  6. current yinput statey プロパティと等しくする。

  7. xcurrent x と等しくない、 または ycurrent y と等しくない場合、 次の手順を実行する:

    1. buttons を input state の buttons プロパティと等しくする。

    2. [UI-EVENTS] および [POINTER-EVENTS] の要件に従い、 pointerId が input source の pointerId と等しく、 型 pointerType を持つポインターを、 viewport x 座標 current x、viewport y 座標 current y から viewport x 座標 x および viewport y 座標 y へ移動することと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行う。widthheightpressuretangentialPressuretiltXtiltYtwistaltitudeAngleazimuthAngle を持ち、 buttons 個のボタンが押し下げられている。 生成されるイベントは ctrlKeyshiftKeyaltKey、および metaKeyglobal key state 内の対応する項目と等しく設定しなければならない。 WebDriver API を通じて公開されないポインターの型固有プロパティは、 そのプロパティをサポートしないハードウェアに対して指定された既定値に 設定されなければならない。pointerType が "pen" または "touch" であり、かつ buttons が空である場合、 これは no-op であり得る。"mouse" 型のポインターについては、 これは常に少なくとも pointerMove イベントを含むイベントを生成する。

    3. input statex プロパティを x と等しくし、y プロパティを y と等しくする。

  8. last が true である場合、返す。

  9. 次の副手順を並列に実行する:

    注記
    1. 実装定義の時間量が経過するまで 非同期に待機する

    2. input statedurationstart xstart ytarget xtarget y を引数として ポインター移動を実行する

action objectsourceglobal key statetick durationbrowsing context、 および actions options が与えられたとき、 pointerCancel アクションを配送するには:

  1. [UI-EVENTS] および [POINTER-EVENTS] の要件に従い、 pointerId が source の pointerId 項目と等しいポインターの任意の アクションを取り消すことと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行う。型 pointerType を持つ。

  2. successを、データとしてnullとともに返す。

15.6.4 ホイールアクション

action objectsourceglobal key statetick durationbrowsing context、 および actions options が与えられたとき、 scroll アクションを配送するには:

  1. x offsetaction objectx プロパティと等しくする。

  2. y offsetaction objecty プロパティと等しくする。

  3. originaction objectorigin プロパティと等しくする。

  4. (x, y) を、 sourcex offsety offsetoriginbrowsing context、および actions options を用いて 試みることにより、原点に 相対的な座標を取得することの結果とする。

  5. x が 0 未満、または CSS ピクセル単位のビューポートの幅より大きい場合、 errorをエラーコード move target out of boundsとともに返す。

  6. y が 0 未満、または CSS ピクセル単位のビューポートの高さより大きい場合、 errorをエラーコード move target out of boundsとともに返す。

  7. delta xaction objectdeltaX プロパティと等しくする。

  8. delta yaction objectdeltaY プロパティと等しくする。

  9. duration を、 action objectduration プロパティが undefinedでない場合はそれと等しくし、 そうでなければ tick duration と等しくする。

  10. duration が 0 より大きく、かつ何らかの 実装定義の境界内にある場合、実装定義の時間量が 経過するまで非同期に待機する

  11. global key statedurationxydelta xdelta y00 を引数として スクロールを実行する

  12. successを、データとしてnullとともに返す。

durationxytarget delta xtarget delta ycurrent delta x および current delta y が与えられたとき、 スクロールを 実行するには:

  1. time delta を、現在のティックの開始からの時間とし、単調時計上のミリ秒で測定する。

  2. duration ratio を、 duration が 0 より大きい場合は time deltaduration の比とし、 そうでなければ 1 とする。

  3. duration ratio が 1、または実装が移動アクションをさらに細分しない程度に 1 に十分近い場合、last を true とする。そうでなければ lastfalse とする。

  4. last が true である場合、delta xtarget delta x - current delta x と等しくし、 delta ytarget delta y - current delta y と等しくする。

    そうでなければ、delta xduration ratio × target delta x - current delta x の近似値と等しくし、 delta yduration ratio × target delta y - current delta y の近似値と等しくする。

  5. delta x0 と等しくない、または delta y0 と等しくない場合、 次の手順を実行する:

    1. [UI-EVENTS] の要件に従い、 viewport x 座標 x、viewport y 座標 y におけるホイールスクロールと同等の 実装固有のアクション配送手順を実行することを browsing context 上で行う。deltaX 値 delta x、 deltaY 値 delta y を持つ。生成されるイベントは ctrlKeyshiftKeyaltKey、および metaKeyglobal key state 内の対応する項目と等しく設定しなければならない。

    2. current delta x プロパティを delta x + current delta x と等しくし、 current delta y プロパティを delta y + current delta y と等しくする。

  6. last が true である場合、返す。

  7. 次の副手順を並列に実行する:

    注記
    1. 実装定義の時間量が経過するまで 非同期に待機する

    2. durationxytarget delta xtarget delta ycurrent delta xcurrent delta y を引数として スクロールを実行する

15.7 アクションを実行

HTTP メソッド URI テンプレート
POST /session/{session id}/actions

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such window とともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試みる

  3. input state を、session および session現在の トップレベル閲覧 コンテキストを用いて 入力 状態を取得することの結果とする。

  4. actions options を、 要素オリジンである手順を ウェブ要素を表すに設定し、 要素オリジンを取得手順を WebElement オリジンを取得するに設定した 新しいアクションオプションとする。

  5. actions by tick を、input stateparameters、および actions options を用いて アクションシーケンスを抽出することを 試みることの結果とする。

  6. input stateactions by tick現在の閲覧 コンテキスト、 および actions options を用いて アクションを配送する。これによりerrorが生じる場合、 その error を返す。

  7. successをデータ null とともに返す。

15.8 アクションを解放

HTTP メソッド URI テンプレート
DELETE /session/{session id}/actions
注記

アクションを解放コマンドは、 現在押し下げられているすべてのキーおよびポインターボタンを解放するために使用される。 これにより、状態が明示的な一連のアクションによって解放されたかのように、 イベントが発火される。 また、仮想デバイスのすべての内部状態も消去される。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such window とともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試みる

  3. input state を、セッションおよび現在のトップレベル閲覧 コンテキスト入力 状態を取得した結果とする。

  4. actions options を、 要素オリジンである手順を ウェブ要素を表すに設定し、 要素オリジンを取得手順を WebElement オリジンを取得するに設定した 新しいアクションオプションとする。

  5. input state を用いて アクションキュートークンを待機する

  6. undo actions を、input state入力取消リストの逆順とする。

  7. input stateundo actions現在の閲覧 コンテキスト、 および actions options を用いて アクションを配送することを 試みる

  8. session および session現在の トップレベル閲覧コンテキストを用いて、 入力状態をリセットする

  9. successをデータ null とともに返す。

16. ユーザープロンプト

この章では、さまざまな種類のユーザー プロンプトとの相互作用について記述する。ユーザープロンプトに共通する点は、 それらがモーダルウィンドウであり、イベント ループ一時停止解除され、制御が session現在のトップレベル閲覧 コンテキストに戻る前に、ユーザーがそれらと相互作用する必要があることである。

既定では、ユーザープロンプトは、 ユーザープロンプトハンドラーが定義されていない限り、 自動的には処理されない。 ユーザープロンプトが現れた場合、 それを処理するのは後続のコマンドの役割である。 後続で要求されたコマンドがこの章に列挙されたものではない場合、 unexpected alert open error が返される。

アクティブセッションがちょうど 1 つの項目を含むリストであり、 その項目がHTTP セッションであるが、BiDi セッションではない場合、beforeunload を発火する手順において、 実装は、unload プロンプトを表示することが、煩わしい、欺瞞的、または無意味である 可能性が高いものとして振る舞わなければならない。

注記

これは、アクティブな HTTP-only セッションがある場合、 beforeunload プロンプトは決して表示されないことを意味する。

ユーザー プロンプトには、関連付けられたユーザープロンプトメッセージがあり、 これはユーザーに表示される文字列メッセージであるか、メッセージ長が 0 の場合は null である。

browsing context: が与えられたとき、 アクティブな ユーザープロンプトを取得するには:

  1. agent を、閲覧コンテキストアクティブ 文書関連エージェントとする。

  2. agentイベントループが現在 一時停止されていない場合、null を返す。

  3. event loop一時停止されたときに渡された条件を満たすために 必要な入力を処理するユーザープロンプトを返す。

現在のユーザー プロンプトは、現在の閲覧コンテキストを用いて アクティブな ユーザープロンプトを取得することの結果である。

ユーザー プロンプト却下するには、そのプロンプトに Cancel ボタンが存在する場合、 ユーザーがそのボタンをクリックしたかのように振る舞い、そうでない場合はプロンプトを 受け入れる

ユーザー プロンプト受け入れるには、ユーザーがそのプロンプト上の OK ボタンをクリックしたかのように振る舞う。

16.1 ユーザープロンプトハンドラー

リモートエンドには、ユーザープロンプトが表示されたときに WebDriver セッションがどのように反応するかを定義する ユーザープロンプトハンドラーがある。 これは null、または文字列とプロンプトハンドラー構成値との間の mapである。 初期状態では null である。

プロンプトハンドラー構成は、2 つの項目を持つ structである; handler は文字列であり、 notify は真偽値である。

configuration が与えられたとき、 プロンプトハンドラー構成を直列化するには:

  1. serializedconfigurationhandler とする。

  2. «"dismiss", "accept"» が serialized含み、 かつ configurationnotify が true である場合、 " and notify" を serialized に追加する。

  3. serialized を返す。

既知のプロンプト ハンドラーは次のとおりである:
ハンドラー キー 説明(非規範)。
"dismiss" 遭遇したすべての単純ダイアログ却下されるべきである。
"accept" 遭遇したすべての単純ダイアログ受け入れられるべきである。
"dismiss and notify" 遭遇したすべての単純ダイアログ却下され、 そのダイアログが処理されたことを示すエラーが返されるべきである。
"accept and notify" 遭遇したすべての単純ダイアログ受け入れられ、 そのダイアログが処理されたことを示すエラーが返されるべきである。
"ignore" 遭遇したすべての単純ダイアログは、ユーザーが処理できるように残されるべきである。

有効なプロンプト 型は «"alert", "beforeUnload", "confirm", "default", "file", "prompt"» である。

注記

"default" 型は、"beforeUnload" プロンプト型を含め、 与えられたプロンプト型に対して特定のハンドラーが定義されていない場合のフォールバックを表す。 これは、unhandled prompt behavior が "default" を 含むmapである場合にのみ設定できる。 HTTP-only セッションで unhandled prompt behavior を文字列値として設定する場合、 その値は内部型 "fallbackDefault" に割り当てられる。 "fallbackDefault" 値は "beforeUnload" プロンプト型には使用されず、 代わりに "accept" ハンドラーへフォールバックする。これは、HTTP-only セッションでは "beforeUnload" ハンドラーをカスタマイズできず、他のプロトコルを有効にしても 副作用としてユーザープロンプト処理が変わることは期待されていないためである。

注記

"file" プロンプト型は、 [WebDriver-BiDi] セッションでのみ尊重される。

引数 value が与えられたとき、 unhandled prompt behavior として逆直列化するには:

  1. value を、value を用いて JSON 由来の JavaScript 値を Infra 値へ変換することの結果に設定する。

  2. value が文字列でない場合、 [WebDriver-BiDi] も サポートしていない実装は、errorエラーコード invalid argumentとともに返してもよい。

    注記

    これは [WebDriver-BiDi] が 現在の仕様をモンキーパッチすることを避けるためである。

  3. is string value を false とする。

  4. value文字列である場合、valuemap «["fallbackDefault" → value]» に設定し、is string value を true に設定する。

  5. valuemapでない場合、 errorエラーコード invalid argumentとともに返す。

  6. user prompt handler を空のmapとする。
  7. value 内の各 prompt typehandler について:

    1. is string value が false であり、かつ有効な プロンプト 型prompt type含まない場合、 errorエラー コード invalid argumentとともに返す。

    2. 既知のプロンプトハンドラーハンドラーキー handler を持つ エントリを含まない場合、errorエラーコード invalid argumentとともに返す。

    3. notify を false とする。

    4. handler が "accept and notify" である場合、 handler を "accept" に設定し、 notify を true に設定する。

    5. handler が "dismiss and notify" である場合、 handler を "dismiss" に設定し、 notify を true に設定する。

    6. handler が "ignore" である場合、 notify を true に設定する。

    7. configuration を、handler handler および notify notify を持つ プロンプトハンドラー 構成とする。

    8. user prompt handler[prompt type] を configuration設定する

  8. successを、データとして user prompt handler とともに返す。

requested prompt handler が与えられたとき、 ユーザープロンプトハンドラーが一致するか確認するには:

  1. ユーザープロンプトハンドラーが null である場合、true を返す。

  2. requested prompt handler 内の各 request prompt typerequest handler について:

    1. ユーザープロンプトハンドラーrequest prompt type含む場合:

      1. requested prompt handlerhandlerが、ユーザー プロンプトハンドラーhandlerと等しくない場合、false を返す。

  3. true を返す
注記

これは、requested prompt handlernotifyhandlerと一致するかを確認しない。なぜなら notify コンポーネントは、存在する場合の HTTP セッションにのみ影響するためである。

requested prompt handler が与えられたとき、 ユーザープロンプトハンドラーを更新するには:

  1. ユーザープロンプトハンドラーが null である場合、 ユーザープロンプト ハンドラーを空の map に設定する。

  2. requested prompt handler 内の各 request prompt typerequest handler について:

    1. ユーザープロンプトハンドラー[request prompt type] を request handler に設定する。

ユーザープロンプトハンドラーを直列化するには:

  1. ユーザープロンプトハンドラーが null である場合、 "dismiss and notify" を返す。

  2. ユーザープロンプトハンドラーsize が 1 であり、 かつユーザープロンプトハンドラーが "fallbackDefault" を含む場合、 ユーザープロンプト ハンドラー["fallbackDefault"] を用いて プロンプト ハンドラー構成を直列化することの結果を返す。

  3. serialized を空のmapとする。

  4. ユーザープロンプト ハンドラーの各 keyvalue について:

    1. serialized[key] を、value を用いて プロンプト ハンドラー構成を直列化することの結果に設定する。

  5. serialized を用いて Infra 値を JSON 互換の JavaScript 値へ変換することの結果を返す。

注釈付き unexpected alert open errorは、 unexpected alert open エラーコードを持つerrorであり、 次のエントリを持つ任意のエラーデータ辞書を伴う:

"text"
現在のユーザープロンプトメッセージ

typeプロンプトハンドラーを取得するには:

  1. ユーザープロンプトハンドラーが null である場合、 handlers を空の map とする。そうでなければ、 handlersユーザープロンプトハンドラーとする。

  2. handlerstype を含む場合、 handlers[type] を返す。

  3. handlers が "default" を含む場合、 handlers["default"] を返す。

  4. type が "beforeUnload" である場合、 handler "accept" および notify false を持つ プロンプトハンドラー構成を返す。

  5. handlers が "fallbackDefault" を含む場合、 handlers["fallbackDefault"] を返す。

  6. handler "dismiss" および notify true を持つプロンプトハンドラー 構成を返す。

任意の ユーザープロンプトを処理するには:

  1. 現在の閲覧コンテキストが ダイアログによりブロックされていない場合、successを返す。

  2. type を "default" とする。

  3. 現在のユーザープロンプトが alert ダイアログである場合、 type を "alert" に設定する。そうでなく、 現在のユーザープロンプトが beforeunload ダイアログである場合、 type を "beforeUnload" に設定する。そうでなく、 現在のユーザープロンプトが confirm ダイアログである場合、 type を "confirm" に設定する。そうでなく、 現在のユーザープロンプトが prompt ダイアログである場合、 type を "prompt" に設定する。

  4. handler を、type を用いて プロンプトハンドラーを取得することの 結果とする。

  5. handlerhandlerに基づいて、 次の副手順を実行する:

    "accept"

    現在のユーザープロンプト受け入れる

    "dismiss"

    現在のユーザープロンプト却下する

    "ignore"

    何もしない。

  6. handlernotify が true である場合、注釈付き unexpected alert open errorを返す。

  7. successを返す。

16.2 アラートを却下

HTTP メソッド URI テンプレート
POST /session/{session id}/alert/dismiss
注記

アラートを却下コマンドは、 存在する場合に 単純ダイアログ却下する。 必ずしも却下ボタンを持つとは限らない alert ユーザー プロンプト却下するリクエストは、それを 受け入れることと同じ効果を持つ。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  2. 現在のユーザープロンプトが null である場合、 errorエラーコード no such alertとともに返す。

  3. 現在の ユーザープロンプト却下する

  4. successをデータ null とともに返す。

16.3 アラートを受け入れ

HTTP メソッド URI テンプレート
POST /session/{session id}/alert/accept

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  2. 現在のユーザープロンプトが null である場合、 errorエラーコード no such alertとともに返す。

  3. 現在の ユーザープロンプト受け入れる

  4. successをデータ null とともに返す。

16.4 アラートテキストを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/alert/text

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  2. 現在のユーザープロンプトが null である場合、 errorエラーコード no such alertとともに返す。

  3. message を、現在のユーザープロンプトに関連付けられた テキストメッセージ、またはそうでなければnullとする。

  4. successをデータ message とともに返す。

16.5 アラートテキストを送信

HTTP メソッド URI テンプレート
POST /session/{session id}/alert/text
注記

アラートテキストを送信コマンドは、 window.prompt ユーザープロンプトのテキストフィールドを与えられた値に設定する。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. text を、parameters から "text" プロパティを取得することの結果とする。

  2. textStringでない場合、 errorエラーコード invalid argumentとともに返す。

  3. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  4. 現在のユーザープロンプトが null である場合、 errorエラーコード no such alertとともに返す。

  5. 現在の ユーザー プロンプトを作成した API に対する副手順を実行する:

    window.alert
    window.confirm

    errorエラーコード element not interactableとともに返す。

    window.prompt

    何もしない。

    その他の場合

    errorエラーコード unsupported operationとともに返す。

  6. 現在のユーザープロンプトのテキストフィールドの値を text に設定するために、ユーザーエージェント依存の手順を実行する。

  7. successをデータ null とともに返す。

17. スクリーンキャプチャ

スクリーンショットは、追加の視覚的な診断情報を提供するための仕組みである。 これは、視覚ビューポートの フレームバッファのスナップショットをロスレス PNG 画像としてダンプすることによって機能する。 それは Base64 符号化文字列としてローカルエンドに返される。

WebDriver は、トップレベル閲覧コンテキスト視覚ビューポートをキャプチャするための スクリーンショットを取得するコマンドと、 ビューへスクロールされた後の要素境界矩形の可視領域について同じことを行うための コマンド 要素スクリーンショットを取得するを提供する。

矩形が与えられたとき、 フレームバッファから境界ボックスを描画するには:

  1. 視覚ビューポートの幅または高さのいずれかが 0 CSS ピクセルである場合、 errorエラーコード unable to capture screen とともに返す。

  2. paint width を、視覚ビューポートの幅 – min(矩形 x 座標, 矩形 x 座標 + 矩形の幅 次元) とする。

  3. paint height を、視覚ビューポートの高さ – min(矩形 y 座標, 矩形 y 座標 + 矩形の高さ 次元) とする。

  4. canvas を新しい canvas 要素とし、 その width および height をそれぞれ paint width および paint height に設定する。

  5. context、すなわちcanvas コンテキストモードを、 canvas をターゲットとして与えて 2D コンテキスト作成 アルゴリズムを呼び出した結果とする。

  6. 次の座標で指定されたフレームバッファの領域を context 上に 描画することと同等の実装固有の手順を完了する:

    X 座標
    矩形 x 座標
    Y 座標
    矩形 y 座標
    paint width
    高さ
    paint height
  7. successcanvas とともに返す。

canvas 要素である canvas を Base64 として 符号化するには:

  1. canvas 要素のビットマップの origin-clean フラグが false に設定されている場合、 errorエラーコード unable to capture screen とともに返す。

  2. canvas 要素のビットマップにピクセルがない場合(すなわち、その水平次元または垂直次元のいずれかが 0 である場合)、 errorエラーコード unable to capture screen とともに返す。

  3. file を、 "image/png" を引数として用いる、 canvas 要素のビットマップを ファイルとして直列化したものとする。

  4. data URL を、file を表す data: URLとする。 [RFC2397]

  5. index を、data URL 内の "," のindexとする。

  6. encoded string を、(index + 1) を start 引数として用いた data URLsubstringとする。

  7. successをデータ encoded string とともに返す。

17.1 スクリーンショットを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/screenshot

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の トップレベル閲覧 コンテキストもはや開かれていない場合、errorエラーコード no such windowとともに返す。

  2. ユーザーエージェントが次にアニメーションフレームコールバックを実行するとき:

    1. root rect を、session現在の トップレベル閲覧コンテキスト文書要素矩形とする。

    2. screenshot result を、root rect を引数として与え、 フレームバッファから 境界ボックスを描画するを呼び出すことを 試みることの結果とする。

    3. canvas を、 screenshot result のデータである canvas 要素とする。

    4. encoding result を、canvascanvas を Base64 として符号化することを 試みることの結果とする。

    5. encoded stringencoding result のデータとする。

  3. successをデータ encoded string とともに返す。

17.2 要素 スクリーンショットを取得

HTTP メソッド URI テンプレート
GET /session/{session id}/element/{element id}/screenshot
注記

要素スクリーンショットを取得コマンドは、 要素境界矩形によって包含される可視領域の スクリーンショットを取得する。

sessionURL variables および parameters が与えられたときの リモートエンド手順は次のとおりである:

  1. session現在の閲覧 コンテキストもはや開かれていない場合、errorエラー コード no such window とともに返す。

  2. session を用いて 任意のユーザープロンプトを処理することを 試みる

  3. element を、 session および URL variables["element id"] を用いて 既知の要素を取得することを 試みることの結果とする。

  4. elementビューへスクロールする。

  5. ユーザーエージェントが次にアニメーションフレームコールバックを実行するとき:

    1. element rectelement矩形とする。

    2. screenshot result を、 element rect を引数として与え、 フレームバッファから 境界ボックスを描画するを呼び出すことを 試みることの結果とする。

    3. canvas を、 screenshot result のデータである canvas 要素とする。

    4. encoding result を、canvascanvas を Base64 として符号化することを 試みることの結果とする。

    5. encoded stringencoding result のデータとする。

  6. successをデータ encoded string とともに返す。

18. 印刷

印刷機能は、文書をページ化された形式にレンダリングするための仕組みである。 これは、ページ化された文書の PDF 表現を含む Base64 符号化文字列として、 ローカルエンドに返される。

引数 pageRanges および totalPages を用いて ページ範囲を解析することが要求されるとき、 実装は次を行わなければならない:

  1. pages を空のSetとする
  2. pageRanges 内の各 range について、次の手順を実行する:
    1. rangeNumberまたは Stringのいずれでもない場合、errorエラー コード invalid argumentとともに返す。
    2. rangeNumberである場合:

      1. range が整数でない、または 0 未満である場合、 errorエラー コード invalid argumentとともに返す
      2. rangepages に追加する

      そうでなければ:

      1. rangeParts を、 "-" 文字で range を分割した結果とする。
      2. rangeParts の要素数が 1 未満または 2 より多い場合、 errorエラー コード invalid argumentとともに返す。
      3. rangeParts が 1 つの要素を持つ場合、rangeParts の最初の 要素を整数として解析することを 試みる結果を pages に追加する。

        そうでなければ:

        1. rangeParts の最初の要素が 空文字列と同等である場合、 lowerBound1 とする。そうでなければ、 lowerBoundrangeParts の最初の要素を 整数として解析することを 試みる結果とする。
        2. rangeParts の 2 番目の要素が 空文字列と同等である場合、 upperBoundtotalPages とする。そうでなければ、 upperBoundrangeParts の 2 番目の要素を 整数として解析することを 試みる結果とする。
        3. lowerBoundupperBound より大きい場合、errorエラーコード invalid argumentとともに返す。
        4. lowerBound から upperBound までの包括範囲内の すべての整数を pages に追加する
    3. successをデータ pages とともに返す。

Stringは、 すべての空白文字を除去した後の長さがゼロである場合、 空文字列と同等である。

引数 input を用いて 整数として解析することが要求されるとき、 実装は次を行わなければならない:

  1. stripped を、input から先頭および末尾のすべての 空白文字を除去した結果とする。
  2. stripped の長さがゼロである場合、errorを ステータス invalid argument とともに返す。
  3. stripped が 範囲 U+0030 - U+0039(すなわち 0 - 9) 外の文字を含む場合、errorをステータス invalid argument とともに返す。
  4. output を、文字列 stripped および基数 10parseInt を呼び出した結果とする。
  5. successをデータ output とともに返す。

19. 付録

この節は非規範である。

19.1 外部仕様

注記

このリストは網羅的ではなく、最新でない可能性がある。

次の外部仕様は、追加の WebDriver モジュールを定義する:

  1. Compute Pressure
  2. Custom Scheme Handlers
  3. Device Posture API
  4. Federated Credential Management API
  5. Generic Sensor API
  6. Global Privacy Control
  7. Permissions
  8. Reporting API
  9. Secure Payment Confirmation
  10. Storage Access API
  11. Web Authentication

A. プライバシー

リモートエンドは、 新しいセッションを作成するときに 新しいプロファイルを作成することが望ましい。 これにより、潜在的に機微なセッションデータが新しいセッションから アクセス可能になることを防ぎ、 プライバシーを保証するとともに、状態が次のセッションへ漏れ出すことを防止する。

B. セキュリティ

ユーザーエージェントは、WebDriver を有効にするかどうかを判定するために、 コマンドラインフラグまたは設定オプションに依存してもよい。 あるいは、ユーザーエージェントが HTTP エンドポイントを直接実装しない場合には、 特権を持つコンテンツ文書または制御ウィジェットを通じて、 ユーザーエージェントに接続を開始または確認させてもよい。

ユーザーエージェントは、WebDriver を有効にするために ユーザーが明示的な操作を行うことを要求し、 一般公開されるユーザーエージェントのバージョンでは WebDriver を無効のままにすることが強く推奨される。

ネットワーク上の任意のマシンが接続してセッションを作成することを防ぐため、 既定ではループバックデバイスからの接続のみを許可することが推奨される。

リモートエンドは、 接続およびリクエストを行うことが許可される受け入れ IP 範囲を制限するための 設定オプションを含めることができる。 これに対する既定設定は、 接続を IPv4 localhost CIDR 範囲 127.0.0.0/8 および IPv6 localhost アドレス ::1 に制限することなどであってよい。 [RFC4632]

また、ユーザーエージェントは、 WebDriver の制御下にあるユーザーエージェントセッションを、 通常のブラウジングセッションで使用されるものから 視覚的に区別するよう努めることも推奨される。 これは、「ドアハンガー」のような ブラウザークローム要素、 OS ウィンドウの色付き装飾、 またはウィンドウ内で目立つ何らかのウィジェット要素を通じて行うことができ、 それにより自動化ウィンドウを容易に識別できる。

C. 要素の表示状態

WebDriver は、ビューポート内における要素の 可視性を確認するためのプリミティブを定義していないが、 それが多くのユーザーにとって重要な機能であることは認める。 ここでは、要素の 可視性の単純化された近似を与える推奨アプローチを含めるが、 これはツリー走査のみに依存し、 可視性チェックの一部のみを対象とすることに注意されたい。

要素の可視性は、 人間の目に知覚上見えるものによって導かれる。 この文脈では、要素の表示状態は、 visibility または display スタイルプロパティとは関係しない。

要素の可視性を確認するために実装者に推奨されるアプローチは、 もともと Selenium プロジェクトによって開発され、 要素の 性質およびツリー内の関係についての粗い近似に基づいている。 要素は一般に、 その一部でもビューポートの境界内のキャンバス上に描画されていれば 可視であると見なされる。

要素 表示状態は、要素が現在可視であるかどうかを表す真偽値である。

bot.dom.isShown Selenium atoms を使用して 要素表示状態を取得するには、 element が与えられたとき:

  1. functionbot.dom.isShown 関数とする。

  2. result を、引数 null および element を用いて function[[Call]] 内部メソッドを呼び出した結果とする。これが例外を送出する場合、 errorエラーコード unknown errorとともに返す。

  3. successをデータ result とともに返す。

    要素表示状態は通常、 GET リクエスト用のエンドポイントとして公開され、 そのURI Template/session/{session id}/element/{element id}/displayed である。

D. 謝辞

長年にわたり、ブラウザー自動化を可能にし、 それによってこの標準の目標を前進させることに貢献した人々は多数いる。 特に、 Selenium オープンソースコミュニティに感謝する。 それなしには、この標準は決して実現しなかったであろう。

この標準の著者は、 Aleksey Chemakin, Andreas Tolfsen, Andrey Botalov, Brian Burg, Christian Bromann, Clayton Martin, Daniel Wagner-Hall, David Burns, Dominique Hazael-Massieux, Eran Messeri, Erik Wilde, Gábor Csárdi, Henrik Skupin, James Graham, Jason Juang, Jason Leyba, Jim Evans, John Chen, John Jansen, Jonathan Lipps, Jonathon Kereliuk, Luke Inman-Semerau, Maja Frydrychowicz, Malini Das, Manoj Kumar, Marc Fisher, Mike Pennisi, Ondřej Machulda, Randall Kent, Sam Sneddon, Seva Lotoshnikov, Simon Stewart, Sri Harsha, Titus Fortner, and Vangelis Katsikaros である。 作業は David Burns および Simon Stewart によって 調整および編集されている。

校正および改善箇所の提案について、 Berge Schwebs Bjørlo, Lukas Tetzlaff, Malcolm Rowe, Michael[tm] Smith, Nathan Bloomfield, Philippe Le Hégaret, Robin Berjon, Ross Patterson, and Wilhelm Joys Andersen に感謝する。

E. 索引

本仕様は、いくつかの他の基礎となる仕様に依存している。

ARIA および関連仕様

以下の用語は Accessible Rich Internet Applications (WAI-ARIA) 1.2 仕様で定義される: [wai-aria-1.2]

以下の用語は Accessible Name and Description Computation 1.1 仕様で定義される: [accname-1.1]

Web App Security

以下の用語は Content Security Policy Level 3 仕様で定義される: [CSP3]

Base16、Base32、および Base64 データ符号化

以下の用語は The Base16, Base32, and Base64 Data Encodings 仕様で定義される: [RFC4648]

DOM

以下の用語は DOM Parsing and Serialization 仕様で定義される: [DOM-PARSING]

以下の属性は UI Events 仕様で定義される: [UI-EVENTS]

以下の属性は UI Events Code 仕様で定義される: [UIEVENTS-KEY]

ECMAScript

以下の用語は ECMAScript 言語仕様で定義される: [ECMA-262]

本仕様はまた、ECMAScript 言語仕様 [ECMAScript] の いくつかの内部メソッド を呼び出せることを前提とする:
ECMAScript 言語仕様はまた、本仕様全体で使用される 以下の型、値、および演算を定義する:
Encoding

以下の用語は WHATWG Encoding 仕様で定義される: [ENCODING]

Fetch

以下の用語は WHATWG Fetch 仕様で定義される: [FETCH]

Fullscreen

以下の用語は WHATWG Fullscreen 仕様で定義される: [FULLSCREEN]

HTML

以下の用語は HTML 仕様で定義される: [HTML]

HTML 仕様はまた、 input 要素の状態を定義する:

HTML 仕様はまた、さまざまな属性を定義する:

HTML Editing APIs 仕様は以下の用語を定義する: [EDITING]

以下のイベントも HTML 仕様で定義される:

“data” URL スキーム仕様は以下の用語を定義する: [RFC2397]

HTTP および関連仕様

HTTP 準拠であるためには、 実装が [RFC7230]、 [RFC7231]、 [RFC7232]、 [RFC7234]、および [RFC7235] の 関連するサブセットをサポートしているものと想定される。

以下の用語は Cookie 仕様で定義される: [RFC6265]

以下の用語は Same Site Cookie 仕様で定義される: [RFC6265bis]

以下の用語は Hypertext Transfer Protocol (HTTP) Status Code Registry で定義される:

Infra

以下の用語は Infra 仕様で定義される: [INFRA]

以下の用語は Netscape Navigator Proxy Auto-Config File Format で定義される:

本仕様は URI Templates を使用する。 [URI-TEMPLATE]

Interaction
以下の用語は Page Visibility Specification [PAGE-VISIBILITY] で定義される
Selenium
以下の関数は Selenium プロジェクト内で、リビジョン 775cfb33b193eb8832cd5488f298006f45254685 において定義される。
Styling
以下の用語は CSS Values and Units Module Level 3 仕様で定義される: [CSS3-VALUES]
以下のプロパティは CSS Basic Box Model Level 3 仕様で定義される: [CSS3-BOX]
以下の用語は CSS Device Adaptation Module Level 1 仕様で定義される: [CSS-DEVICE-ADAPT]
以下のプロパティは CSS Display Module Level 3 仕様で定義される: [CSS3-DISPLAY]
以下の用語は Geometry Interfaces Module Level 1 仕様で定義される: [GEOMETRY-1]
以下の用語は CSS Cascading and Inheritance Level 4 仕様で定義される: [CSS-CASCADE-4]
以下の用語は CSS Object Model で定義される: [CSSOM]:
以下の関数は CSSOM View Module で定義される: [CSSOM-VIEW]:
以下の用語は [mediaqueries-4] で定義される:
SOCKS プロキシ:

以下の用語は標準で定義される: [RFC1928]

Unicode
以下の用語は標準で定義される: [Unicode]
Unicode Standard Annex #29
以下の用語は標準で定義される: [UAX29]
Unicode Standard Annex #44
以下の用語は標準で定義される: [UAX44]
URL
以下の用語は WHATWG URL 標準で定義される: [URL]
Web IDL

本仕様における IDL 断片は、 Web IDL 仕様に記述される、適合する IDL 断片に要求されるものとして 解釈されなければならない。 [WEBIDL]

Promises Guide

以下の用語は Promises Guide で定義される。 [PROMISES-GUIDE]

XPATH

以下の用語は Document Object Model XPath 標準 [XPATH] で定義される

E.1 この 仕様により定義される用語

E.2 参照により定義される用語

F. 参考文献

F.1 規範的参考文献

[accname-1.1]
アクセシブル名および説明の計算 1.1. Joanmarie Diggs; Bryan Garaventa; Michael Cooper. W3C. 2018年12月18日. W3C 勧告. URL: https://www.w3.org/TR/accname-1.1/
[CSP3]
コンテンツセキュリティポリシー Level 3. Mike West; Antonio Sartori. W3C. 2026年5月5日. W3C 作業草案. URL: https://www.w3.org/TR/CSP3/
[CSS-CASCADE-4]
CSS カスケードおよび継承 Level 4. Elika Etemad; Tab Atkins Jr. W3C. 2022年1月13日. W3C 勧告候補. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-DEVICE-ADAPT]
CSS デバイス適応モジュール Level 1. Rune Lillesveen; Florian Rivoal; Matt Rakow. W3C. 2016年3月29日. W3C 作業 草案. URL: https://www.w3.org/TR/css-device-adapt-1/
[CSS21]
カスケーディングスタイルシート Level 2 Revision 1(CSS 2.1) 仕様. Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie. W3C. 2011年6月7日. W3C 勧告. URL: https://www.w3.org/TR/CSS2/
[CSS3-BOX]
CSS ボックスモデルモジュール Level 3. Elika Etemad. W3C. 2024年4月11日. W3C 勧告. URL: https://www.w3.org/TR/css-box-3/
[CSS3-DISPLAY]
CSS 表示モジュール Level 3. Elika Etemad; Tab Atkins Jr. W3C. 2023年3月30日. W3C 勧告候補. URL: https://www.w3.org/TR/css-display-3/
[CSS3-VALUES]
CSS 値および単位モジュール Level 3. Tab Atkins Jr.; Elika Etemad. W3C. 2024年3月22日. CRD. URL: https://www.w3.org/TR/css-values-3/
[CSSOM]
CSS オブジェクトモデル(CSSOM). Daniel Glazman; Emilio Cobos Álvarez. W3C. 2021年8月26日. W3C 作業草案. URL: https://www.w3.org/TR/cssom-1/
[CSSOM-VIEW]
CSSOM View モジュール. Simon Fraser; Emilio Cobos Álvarez. W3C. 2025年9月16日. W3C 作業草案. URL: https://www.w3.org/TR/cssom-view-1/
[DOM]
DOM 標準. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[DOM-PARSING]
DOM 解析および直列化. Travis Leithead. W3C. 2016年5月17日. W3C 作業草案. URL: https://www.w3.org/TR/DOM-Parsing/
[ECMA-262]
ECMAScript 言語仕様. Ecma International. URL: https://tc39.es/ecma262/multipage/
[EDITING]
HTML 編集 API. A. Gregor. W3C. URL: https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html
[ENCODING]
Encoding 標準. Anne van Kesteren. WHATWG. Living Standard. URL: https://encoding.spec.whatwg.org/
[FETCH]
Fetch 標準. Anne van Kesteren. WHATWG. Living Standard. URL: https://fetch.spec.whatwg.org/
[fileapi]
File API. Marijn Kruisselbrink. W3C. 2025年12月3日. W3C 作業草案. URL: https://www.w3.org/TR/FileAPI/
[FULLSCREEN]
Fullscreen API 標準. Philip Jägenstedt. WHATWG. Living Standard. URL: https://fullscreen.spec.whatwg.org/
[GEOMETRY-1]
Geometry Interfaces モジュール Level 1. Sebastian Zartner; Yehonatan Daniv. W3C. 2025年12月4日. CRD. URL: https://www.w3.org/TR/geometry-1/
[HTML]
HTML 標準. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Infra 標準. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[mediaqueries-4]
Media Queries Level 4. Tab Atkins Jr.; Florian Rivoal. W3C. 2026年2月19日. CRD. URL: https://www.w3.org/TR/mediaqueries-4/
[PAGE-VISIBILITY]
Page Visibility(第2版). Jatinder Mann; Arvind Jain. W3C. 2013年10月29日. W3C 勧告. URL: https://www.w3.org/TR/page-visibility/
[POINTER-EVENTS]
Pointer Events. Patrick Lauke; Robert Flack. W3C. 2026年2月25日. W3C 作業草案. URL: https://www.w3.org/TR/pointerevents4/
[PROMISES-GUIDE]
Promise を使用する 仕様の書き方. Domenic Denicola. W3C. 2018年11月9日. TAG Finding. URL: https://www.w3.org/2001/tag/doc/promises-guide
[RFC1928]
SOCKS プロトコルバージョン 5. M. Leech; M. Ganis; Y. Lee; R. Kuris; D. Koblas; L. Jones. IETF. 1996年3月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc1928
[RFC2397]
"data" URL スキーム. L. Masinter. IETF. 1998年8月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc2397
[RFC3514]
IPv4 ヘッダーにおけるセキュリティ フラグ. S. Bellovin. IETF. 2003年4月1日. Informational. URL: https://www.rfc-editor.org/rfc/rfc3514
[RFC4122]
汎用一意識別子(UUID)URN 名前空間. P. Leach; M. Mealling; R. Salz. IETF. 2005年7月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4122
[RFC4632]
クラスレスドメイン間ルーティング(CIDR): インターネットアドレス割り当ておよび集約計画. V. Fuller; T. Li. IETF. 2006年8月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc4632
[RFC4648]
Base16、Base32、および Base64 データ 符号化. S. Josefsson. IETF. 2006年10月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4648
[RFC6265]
HTTP 状態管理メカニズム. A. Barth. IETF. 2011年4月. Proposed Standard. URL: https://httpwg.org/specs/rfc6265.html
[RFC6265bis]
Cookies: HTTP 状態 管理メカニズム. M. West; J. Wilander. IETF. 草案. URL: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05
[RFC7230]
ハイパーテキスト転送プロトコル(HTTP/1.1): メッセージ構文およびルーティング. R. Fielding, Ed.; J. Reschke, Ed. IETF. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7230.html
[RFC7231]
ハイパーテキスト転送プロトコル(HTTP/1.1): 意味論および内容. R. Fielding, Ed.; J. Reschke, Ed. IETF. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7231.html
[RFC7232]
ハイパーテキスト転送プロトコル(HTTP/1.1): 条件付き要求. R. Fielding, Ed.; J. Reschke, Ed. IETF. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7232.html
[RFC7234]
ハイパーテキスト転送プロトコル(HTTP/1.1): キャッシュ. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed. IETF. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7234.html
[RFC7235]
ハイパーテキスト転送プロトコル(HTTP/1.1): 認証. R. Fielding, Ed.; J. Reschke, Ed. IETF. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7235.html
[UAX29]
Unicode テキスト セグメンテーション. Josh Hadley. Unicode Consortium. 2025年8月17日. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-47.html
[UAX44]
Unicode 文字 データベース. Ken Whistler. Unicode Consortium. 2025年8月27日. Unicode Standard Annex #44. URL: https://www.unicode.org/reports/tr44/tr44-36.html
[UI-EVENTS]
UI Events. Xiaoqian Wu. W3C. 2026年2月21日. W3C 作業草案. URL: https://www.w3.org/TR/uievents/
[UIEVENTS-KEY]
UI Events KeyboardEvent key Values. Travis Leithead; Gary Kacmarcik. W3C. 2025年4月22日. W3C 勧告. URL: https://www.w3.org/TR/uievents-key/
[Unicode]
Unicode 標準. Unicode Consortium. URL: https://www.unicode.org/versions/latest/
[URI-TEMPLATE]
URI Template. J. Gregorio; R. Fielding; M. Hadley; M. Nottingham; D. Orchard. IETF. 2012年3月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6570
[URL]
URL 標準. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[wai-aria-1.2]
アクセシブルリッチインターネットアプリケーション(WAI-ARIA) 1.2. Joanmarie Diggs; James Nurthen; Michael Cooper; Carolyn MacLeod. W3C. 2023年6月6日. W3C 勧告. URL: https://www.w3.org/TR/wai-aria-1.2/
[WebDriver-BiDi]
WebDriver BiDi. James Graham; Alex Rudenko; Maksim Sadym. W3C. 2026年3月19日. W3C 作業草案. URL: https://www.w3.org/TR/webdriver-bidi/
[WEBIDL]
Web IDL 標準. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/
[XPATH]
XML Path Language(XPath)Version 1.0. James Clark; Steven DeRose. W3C. 1999年11月16日. W3C 勧告. URL: https://www.w3.org/TR/xpath-10/