Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
WebDriver 是一种远程控制接口, 用于对用户代理进行自省和控制。 它提供一种平台和语言中立的有线协议, 作为进程外程序远程指示 Web 浏览器行为的方式。
它提供了一组接口, 用于发现和操纵 Web 文档中的 DOM 元素, 并控制用户代理的行为。 它主要旨在允许 Web 作者编写测试, 从单独的控制进程自动化用户代理, 但也可以采用允许浏览器内脚本 控制一个——可能是单独的——浏览器的方式使用。
本节描述本文档在发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版可以在 W3C 标准和草案 索引中找到。
本文档由 浏览器 测试和工具工作组发布为 使用 推荐标准 轨道的工作草案。
发布为 工作草案并不意味着 W3C 及其成员的认可。
这是一份草案文档,可能会随时被其他文档更新、替换或废弃。 除作为进行中的工作之外,不宜引用本文档。
本文档由一个依据 W3C 专利 政策 运作的小组制作。 W3C 维护着一个 公开的专利 披露列表, 其中列出了与该小组交付物相关的任何专利披露;该页面还包括 披露专利的说明。实际知晓某项专利且该个人认为该专利包含 必要权利要求的个人, 必须依据 W3C 专利政策第 6 节 披露该信息。
本文档受 2025 年 8 月 18 日 W3C 流程文档约束。
本节是非规范性的。
WebDriver 标准试图遵循若干设计目标:
本规范派生自流行的 Selenium WebDriver 浏览器自动化框架。 Selenium 是一个长期存在的项目, 由于其历史悠久且使用范围广泛, 它具有范围广泛的预期功能。 本规范利用这些预期来指导其设计。 在作出改进或澄清之处, 均谨慎进行,以允许 Selenium WebDriver 的现有用户 避免意外的破坏。
本规范预期的最大用户群体 是编写自动化测试和其他工具的软件开发人员和测试人员, 例如依赖于自动化浏览器的监控或负载测试。 因此,本规范谨慎地提供了命令, 以简化常见任务,例如向元素输入 以及点击元素。
WebDriver 提供了一种机制,供其他人定义协议扩展, 以自动化那些无法完全在 ECMAScript 中实现的功能。这允许其他 Web 标准支持新平台特性的自动化。它还 允许供应商公开其浏览器特有的功能。
除标记为非规范性的章节外,本规范中的所有创作指南、图表、示例和注释也都是非规范性的。 本规范中的其他所有内容都是规范性的。
以算法或具体步骤表述的一致性要求 可以用任何方式实现, 只要最终结果等效即可。 本文档中的算法通常以可读性为考量编写, 而非以性能为考量。
在等式中,所有数字都是整数, 加法由 “+” 表示, 减法由 “−” 表示, 除法由 “÷” 表示, 按位或由 “|” 表示。 字符 “(” 和 “)” 在这些上下文中用于提供逻辑分组。
数学函数 min(value, value[, value]) 返回两个或更多值中的最小项。 反之,函数 max(value, value[, value]) 返回两个或更多值中的最大项。
数学函数 floor(value) 产生不大于 value 的、 最接近正无穷大的最大整数。
通用唯一标识符(UUID) 是一个 128 位长的 URN,不需要中心化注册过程。 生成 UUID 是指 从真正随机数或伪随机数创建 UUID, 并将其转换为字符串表示。 [RFC4122]
Unix Epoch 是一个近似表示自 Epoch 以来 已经过秒数的值, 如 The Open Group Base Specifications Issue 7 第 4.15 节(IEEE Std 1003.1)所述。
整数是一个在 Number,其在 ToInteger 操作下 保持不变。
ECMAScript 属性的初始值 是平台为该属性定义的值, 即在不存在任何内容脚本遮蔽的情况下它会具有的值。
浏览器 chrome 是一个非规范性术语, 指用户与用户代理本身交互所通过的表示, 区别于被访问的 Web 内容。 浏览器 chrome 元素的示例 包括但不限于: 工具栏(例如书签工具栏)、 菜单(例如文件菜单或上下文菜单)、 按钮(例如后退和前进按钮)、 门挂件(例如安全和证书指示器), 以及装饰(例如操作系统小部件边框)。
当用户代理处于远程控制之下时, webdriver-active 标志 被设为 true。 它最初为 false。
WebIDL
Navigator includes NavigatorAutomationInformation;
NavigatorAutomationInformation
接口
不应在 WorkerNavigator 上暴露。
如果webdriver-active 标志已设置,则返回 true,否则返回 false。
WebDriver 协议由以下各方之间的通信组成:
本地端表示协议的客户端侧, 通常以特定于语言的库的形式存在, 这些库在 WebDriver 协议之上提供 API。 本规范不对这些库在有线协议层级之上的细节 设置任何限制。
对于远程 端,该标准定义了两个宽泛的一致性 类,称为节点类型:
从本地端的角度来看, 所有远程端节点类型都必须与远程端在黑盒上不可区分, 因而在有线协议方面 受远程端要求的约束。
远程端的就绪 状态指示 它是否可接受新连接。如果实现是端点节点,且活动 HTTP 会话列表不为空,则它必须为 false;或者如果已知该远程端处于 尝试创建新会话会 失败的状态,也必须为 false。在所有其他情况下,它必须为 true。
WebDriver 远程端必须提供 一个HTTP 合规的有线协议, 其中端点映射到不同的命令。
由于本标准只定义远程端协议, 因此它不要求本地端应如何实现。 本地 端只被期望在能够使用远程端协议通信的范围内兼容; 对其暴露的面向用户的 API 不提出任何要求。
本规范的各个部分以逐步算法的形式编写。 这些算法的细节不具有任何规范性意义; 实现可以自由采用任何实现策略, 只要其产生与规范等效的输出即可。 特别是,本文档中的算法针对 可读性而非性能进行了优化。
在返回值的算法可能失败的情况下, 它们被写成返回 成功或 错误。 成功 值具有关联的 data 字段, 其中封装了返回的值, 而错误值具有关联的错误码。
当调用可能失败的算法时, 构造 “Let result be the result of trying to call algorithm” 等价于
令 temp 为调用 algorithm 的结果。
如果 temp 是错误,则返回 temp; 否则令 result 为 temp 的 data 字段。
使用 name 从 object 获取 属性的结果,定义为与在 object 上调用 Object.[[GetOwnProperty]](name) 的结果相同。
使用参数 name 和 default
从 object 获取带默认值的属性的结果,
定义为:如果在 object 上调用
Object.[[GetOwnProperty]](name)
得到的结果不是 undefined,则为该结果;
否则为 default。
使用参数 name 和 value 在 object 上设置属性, 定义为与在 object 上调用 Object.[[Put]](name, value) 相同。
对 JSON Object 类型的 object 进行 JSON 序列化的结果, 定义为调用 stringify(object) 的结果。
使用 text 进行 JSON 反序列化的结果定义为 调用 parse(text) 的结果。
WebDriver 协议被组织为命令。 本规范中定义了方法和模板的每个 HTTP 请求 都表示一个单独的命令, 因此每个命令都会产生一个单独的HTTP 响应。
响应一个命令时, 远程端将运行一系列操作, 称为远程端步骤。 这些步骤提供了远程端 在接收到特定命令时所采取的操作序列。
远程端是一个 HTTP 服务器, 从客户端读取请求并写入响应, 通常通过 TCP 套接字进行。 为了本规范的目的,我们将特定本地端和远程端之间的数据传输建模为一个 连接, 远程端可以向该连接写入字节和读取字节。 但是,该连接如何工作 以及如何建立的确切细节不在范围内。
从连接读取字节,直到可以从数据构造出一个 完整的HTTP 请求。 令 request 为一个根据 [RFC7230] 的要求, 从接收到的数据构造出的请求。 如果无法构造完整的HTTP 请求, 则远程端必须关闭该连接, 或返回状态码为 500 的 HTTP 响应,或返回 一个错误,其错误 码为unknown error。
令 request match 为以 request 的 method 和 URL 作为参数, 运行匹配请求算法的结果。
如果 request match 的类型为错误, 则使用 request match 的 错误码 发送错误, 并continue。
否则,令 command 和 URL variables 为 request match 的数据。
令 session 为 null。
如果 URL variables contains "session id":
令 parameters 为null。
如果 request 的method 是 POST:
令 parse result 为以 request 的 body 作为参数, 解析为 JSON的结果。如果此过程 抛出异常, 则返回一个错误,其错误码为 invalid argument,并跳回整个算法中的步骤 1。
如果 parse result 不是Object, 则使用错误码 invalid argument 发送错误 并跳回整个算法中的步骤 1。
否则,令 parameters 为 parse result。
令 navigate result 为以 session 调用 等待 导航完成的结果。
如果 navigate result 是错误, 则使用等于 navigate result 的 错误 码的错误码 发送错误 并返回。
令 response result 为使用 session、URL variables 和 parameters 为 command 运行远程端 步骤 所获得的返回值。
如果 response result 是错误, 则使用等于 response result 的 错误码的错误码 发送错误 并返回。
断言:response result 是成功。
令 response data 为 response result 的 data。
以状态 200 和 response data 发送响应。
当被要求使用 error code 和可选的 error data 字典 发送 错误时, 远程端必须运行以下步骤:
令 status 和 name 为 error code 对应的错误响应数据。
令 message 为实现定义的字符串, 其中包含对错误原因的人类可读描述。
令 stacktrace 为实现定义的字符串, 其中包含错误发生时活动栈帧的栈跟踪报告。
令 body 为一个新的 JSON Object, 并用以下属性初始化:
error"
message"
stacktrace"
如果错误数据字典包含任何条目,
则将 body 上的 "data" 字段设置为
一个新的 JSON Object,并使用该字典填充。
以 status 和 body 作为参数发送响应。
当被要求使用参数 status 和 data 发送响应时, 远程端必须运行以下步骤:
令 response 为一个新的响应。
将 response 的HTTP 状态设置为 status, 并将状态消息设置为在状态码 注册表中对应于 status 描述的字符串。
Content-Type
application/json; charset=utf-8"
Cache-Control
no-cache"
令 response 的body 为
一个 JSON Object 的
UTF-8 编码后的JSON
序列化结果,
该 Object 带有一个键
"value",其值设置为 data。
令 response bytes 为根据 [RFC7230] 中的规则 序列化 response 所得到的字节序列。
请求路由 是从一个HTTP 请求 到实现该请求所表示的命令所需的一系列步骤的过程。
远程端具有关联的 URL 前缀, 它用作该远程端上 所有 WebDriver 定义的 URL 的前缀。 这必须是undefined 或路径绝对 URL。
为了在给定 method 和 URL 的情况下 匹配 请求, 必须采取以下步骤:
令 endpoints 为一个列表, 包含端点表中的每一行。
从 endpoints 中移除每个条目,如果 URL 前缀与该条目的URI 模板的串联没有一个有效展开等于 URL 的路径。
如果 endpoints 中没有条目, 则返回错误,其错误码为 unknown command。
移除 endpoints 中 method 列不等于 method 的每个条目。
如果 endpoints 中没有条目, 则返回错误,其错误码为 unknown method。
现在 endpoints 中恰好有一个条目; 令 entry 为该条目。
令 URI template 为 URL 前缀与 entry 的 URI template 的串联。
令 command 为 entry 的命令。
令 URL variables 为一个map, 对于 URI template 中定义的每个变量都有一个 entry, 其条目名称等于模板变量名称, 条目值为将 URI template 展开以匹配 URL 的路径所需的变量值。
返回成功,其数据为 command 和 URL variables。
以下端点表列出了 每个端点 节点命令的 method 和 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 | 获取元素的 Shadow Root |
| 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 | 从 Shadow Root 查找元素 |
| POST | /session/{session id}/shadow/{shadow id}/elements | 从 Shadow Root 查找元素列表 |
| 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 | 打印页面 |
错误在
WebDriver 协议中表示为一个HTTP 响应,其HTTP 状态在 4xx
或 5xx 范围内,
并且 JSON 主体包含该错误的详细信息。
该主体是一个 JSON Object,
并且有一个名为 "value" 的字段,
其值是一个带有三个字段、有时带有四个字段的对象:
error",包含一个指示错误码的字符串。
message",包含一个实现定义的字符串,
对所发生错误的种类作出人类可读描述。
stacktrace",包含一个实现定义的字符串,
其中包含错误发生时活动栈帧的栈跟踪报告。
data",它是一个 JSON Object,
带有有助于诊断错误的额外错误数据。
下表列出了每个错误码、
其关联的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
|
在给定的会话 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
|
该元素没有 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
|
命令失败,因为 被引用的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
|
表示一个本应正确执行的命令 由于某种原因无法被支持。 |
错误数据 字典 是字符串键到 JSON 可序列化值的映射, 可以可选地包含在错误对象中。
使用本节中定义的术语,其他人可以定义额外的 命令,以无缝集成到标准协议中。这允许 供应商公开其用户代理特有的功能,也 允许其他 Web 标准定义用于自动化新平台 特性的命令。
以这种方式定义的命令 称为扩展 命令, 且其行为与其他命令没有任何不同; 每个命令都有专用的 HTTP 端点和一组远程端步骤。
每个扩展命令具有关联的 扩展命令 URI 模板, 它是一个URI 模板字符串, 并且应当与该命令所执行的操作有一定相似性。 该值 连同 HTTP 方法和扩展命令 一起被添加到端点表, 因而遵循与其他内建命令相同的 请求路由规则。
为了避免与其他实现发生潜在的资源冲突, 供应商特定的扩展 命令 URI 模板必须以一个或多个 能唯一标识供应商和 UA 的路径片段开始。 建议供应商使用其供应商前缀, 不添加额外字符,如 [CSS21] 中所概述的那样, 尤其是关于 供应商关键字的第 4.1.2.2 节, 将其作为该路径元素的名称, 并包含供应商选择的 UA 标识符。
其他规范可以定义额外的 WebDriver 能力。每个定义的
能力都必须有一个能力名称,
它是不包含 ":"(冒号)字符的字符串;
以及一个额外能力反序列化
算法,它是一组步骤,接受一个
具有 JSON 类型的参数 value,并返回
封装反序列化能力值的成功,
或错误。
额外的 WebDriver 能力也可以
定义
匹配能力序列化算法,
它是一组步骤,用于确定某个能力是否由当前实现匹配,
并提供要返回给用户的任何计算值。
这组步骤接受一个参数 value,
该参数是对应额外
能力反序列化算法的输出,
并返回null 以表示该能力
未匹配,或者在该能力匹配时返回一个非 null 的 JSON 可序列化值。
其他规范也可以定义WebDriver 新会话算法,这些算法在创建新 会话之后、向远程端发送新会话响应之前被调用。 这些算法使用表示将要建立的 WebDriver 会话的 session, 以及将返回给远程端的能力对象 capabilities 进行调用。 允许此类算法修改能力对象中名称为 同一规范定义的额外 WebDriver 能力的任何条目。
远程端还可以引入
扩展能力,
它们是额外的能力,
用于提供配置或满足其他供应商特定需求。
扩展能力的键
必须包含 ":"(冒号)字符,
表示实现特定的命名空间。
该值可以是任意 JSON 类型。
与扩展命令一样,
建议用于表示扩展能力命名空间的键
基于 [CSS21] 中列出的
供应商关键字,
并且位于字符串中第一个 ":" 字符之前。
WebDriver 能力 用于传达给定实现所支持的特性。 本地 端可以使用能力 来定义其在创建新会话时要求远程端 满足哪些特性。 同样,远程端使用能力 来描述一个会话的完整特性集。
以下标准能力表 枚举了每个实现必须支持的能力。 实现可以定义额外的扩展能力。
| 能力 | 键 | 值类型 | 描述 |
|---|---|---|---|
| 浏览器名称 | "browserName"
|
string | 标识用户代理。 |
| 浏览器版本 | "browserVersion"
|
string | 标识用户代理的版本。 |
| 平台名称 | "platformName"
|
string | 标识端点节点的操作系统。 |
| 接受不安全的 TLS 证书 | "acceptInsecureCerts"
|
boolean | 指示在导航时,在会话持续期间, 是否隐式信任不受信任的和自签名的 TLS 证书。 |
| 页面 加载策略 | "pageLoadStrategy"
|
string | 定义会话的页面加载 策略。 |
| 代理配置 | "proxy"
|
JSON 对象 | 定义会话的代理 配置。 |
| 窗口尺寸调整/定位 | "setWindowRect"
|
boolean | 指示远程端是否支持所有调整窗口大小和重新定位命令。 |
| 会话超时 | "timeouts"
|
JSON 对象 | 描述对某些会话操作施加的超时。 |
| 严格文件可交互性 | "strictFileInteractability"
|
boolean | 定义会话的严格文件可交互性。 |
| 未处理提示行为 | "unhandledPromptBehavior"
|
string | 描述会话的用户提示
处理器。
默认为 "dismiss and notify"。
|
| User Agent | "userAgent"
|
string | 标识端点节点的默认 User-Agent 值。 |
代理 配置能力 是嵌套在主要能力中的 JSON Object。 实现可以定义额外的代理配置选项, 但不得改变下列选项的语义。
| 键 | 值类型 | 描述 | 有效值 |
|---|---|---|---|
proxyType
|
string | 指示代理配置的类型。 | "pac",
"direct",
"autodetect",
"system",
或 "manual"。
|
proxyAutoconfigUrl
|
string | 如果 等于
"pac",
则定义代理
自动配置文件的 URL。
|
任意URL。 |
httpProxy
|
string | 当 为
"manual" 时,
定义 HTTP 流量的代理主机。
|
scheme 为 "http" 的主机和可选端口。
|
noProxy
|
array | 列出当 为
"manual" 时
应绕过代理的地址。
|
包含任意数量 String 的List。 |
sslProxy
|
string | 当 为
"manual" 时,
定义加密 TLS 流量的代理主机。
|
scheme 为 "https" 的主机和可选端口。
|
socksProxy
|
string | 当 为
"manual" 时,
定义 SOCKS 代理的代理主机。
|
scheme 为undefined 的主机和可选端口。 |
socksVersion
|
number | 当 为
"manual" 时,
定义 SOCKS 代理版本。
|
0 到 255(含)之间的任意整数。 |
用于 scheme 的主机和 可选端口 定义为有效的主机,可选地后跟一个冒号 和有效的端口。该主机可以 包含凭据。如果 省略端口且 scheme 具有默认端口, 则该端口为隐含端口。否则,端口保持未定义。
为 "proxyTypedirect"
表示
浏览器完全不应使用代理。
为 "proxyTypesystem"
表示
浏览器应使用底层操作系统配置的各种代理。
为 "proxyTypeautodetect"
表示应以实现特定的方式检测要使用的代理。
远程端将参数 parameter 反序列化为代理的步骤为:
如果 parameter 不是 JSON Object,则返回 一个错误,其错误码为 invalid argument。
令 proxy 为一个新的空 代理配置对象。
对于 parameter 中的每个可枚举自身属性, 运行以下子步骤:
令 key 为属性的名称。
令 value 为从 parameter 获取 名为 name 的属性的结果。
如果代理配置表中
没有与 key 匹配的 key,
则返回一个错误,
其错误码为 invalid
argument。
如果 value 不是该 key
的有效值之一,则返回
一个错误,其错误
码为 invalid argument。
在 proxy 上将属性 key 设置为 value。
如果 proxy 没有
"proxyType" 的自身属性,
则返回一个错误,其错误
码为 invalid argument。
如果从 proxy
获取
名为 "proxyType" 的属性的结果等于
"pac",且 proxy 没有
"proxyAutoconfigUrl" 的自身属性,
则返回
一个错误,其错误码为 invalid
argument。
如果 proxy 具有
"socksProxy" 的自身属性,
但没有 "socksVersion" 的自身属性,
则返回一个错误,其错误
码为 invalid argument。
返回成功,其数据为 proxy。
给定 parameters 和会话 配置标志 flags,为了处理 能力,端点节点 必须采取以下步骤:
令 capabilities request 为从 parameters
获取
属性
"capabilities" 的结果。
如果 capabilities request 不是 JSON Object, 则返回错误,其错误 码为 invalid argument。
令 required capabilities 为从 capabilities request
获取
属性
"alwaysMatch" 的结果。
令 all first match capabilities 为从 capabilities request
获取
属性
"firstMatch" 的结果。
令 validated first match capabilities 为空 List。
对于 all first match capabilities 中 与索引属性对应的每个 first match capabilities:
令 merged capabilities 为空 List。
对于 validated first match capabilities 中 与索引属性对应的每个 first match capabilities:
对于 merged capabilities 中 与索引属性对应的每个 capabilities:
当被要求使用参数 capabilities 验证能力时:
如果 capabilities 不是 JSON Object,则返回 一个错误,其错误码为 invalid argument。
令 result 为空 JSON Object。
对于 capabilities 中的每个可枚举自身属性, 运行以下子步骤:
令 name 为属性的名称。
令 value 为从 capabilities 获取 名为 name 的属性的结果。
运行第一个匹配条件的子步骤:
null
令 deserialized 被设置为null。
acceptInsecureCerts"
如果 value 不是boolean,则返回 一个错误,其错误码为 invalid argument。否则,令 deserialized 被设置为 value。
browserName"
browserVersion"
platformName"
如果 value 不是string,则返回 一个错误,其错误码为 invalid argument。否则,令 deserialized 被设置为 value。
pageLoadStrategy"
令 deserialized 为以 value 作为参数, trying 去 反序列化为页面 加载策略的结果。
proxy"
strictFileInteractability"
如果 value 不是boolean,则返回 一个错误,其错误码为 invalid argument。否则,令 deserialized 被设置为 value
timeouts"
令 deserialized 为使用 value, trying 去反序列化为 超时配置 的结果。
unhandledPromptBehavior"
令 deserialized 为以 value 作为参数, trying 去反序列化 为未处理提示行为的结果。
令 deserialized 为以 value 作为参数, trying 去运行与 name 对应的扩展能力的额外 能力反序列化 算法的结果。
如果实现已知 name, 则令 deserialized 为以实现特定方式 trying 去反序列化 value 的结果。 否则,令 deserialized 被设置为 value。
返回一个错误,其错误码为 invalid argument。
如果 deserialized 不是null,
则在 result 上以名称 name
和值 deserialized
设置属性。
当使用 JSON Object 参数 primary 和 secondary 合并 能力时, 端点节点必须采取以下步骤:
令 result 为一个新的 JSON Object。
对于 primary 中的每个可枚举自身属性, 运行以下子步骤:
如果 secondary 为undefined, 则返回 result。
对于 secondary 中的每个可枚举自身属性, 运行以下子步骤:
返回 result。
给定 JSON Object capabilities 和会话 配置标志 flags,当匹配能力时,端点节点 必须采取以下步骤:
令 matched capabilities 为一个 JSON Object, 具有以下条目:
browserName"
browserVersion"
platformName"
acceptInsecureCerts"
strictFileInteractability"
setWindowRect"
userAgent"
如果 flags 包含 "http",则将
以下条目添加到 matched capabilities:
strictFileInteractability"
可选地将扩展能力作为条目 添加到 matched capabilities。这些值可以被 省略,并且不要求添加所有 扩展能力。
对于与 capabilities 的自身属性对应的 每个 name 和 value:
令 match value 等于 value。
运行第一个匹配 name 的子步骤:
browserName"
如果 value 不是等于
matched capabilities 中
"browserName" 条目的 string,
则返回成功,
其数据为null。
有可能远程端需要
启动浏览器进程以正确确定
browserName。在执行此操作之前,
首选轻量级检查。
browserVersion"
使用实现定义的比较算法,将 value
与 matched capabilities 中的 "browserVersion" 条目
进行比较。
该比较应接受使用
"<"、"<="、">"
和 ">=" 运算符对版本施加约束的
value。
版本比较作为实现细节保留, 因为每个用户代理可能都有冲突的方法 来编码用户代理版本, 而标准化这些方案超出了本标准的范围。
有可能远程端需要
启动浏览器进程以正确确定
browserVersion。在执行此操作之前,
首选轻量级检查。
platformName"
如果 value 不是等于
matched capabilities 中 "platformName" 条目的 string,
则返回成功,其数据为null。
以下平台名称在通常使用中具有 明确理解的语义,并且在为平台名称匹配 能力时, 将它们作为知名操作系统的有效同义词予以认可, 可以实现最大的互操作性:
| 键 | 系统 |
|---|---|
"linux" |
任何基于 Linux 内核的服务器或桌面系统。 |
"mac" |
Apple 的 macOS 的任何版本。 |
"windows" |
Microsoft Windows 的任何版本,包括桌面版和 移动版。 |
此列表并不详尽。
从New Session返回能力时,
返回更具体的 platformName 是有效的,
以允许用户正确识别 WebDriver
实现正在运行的操作系统。
acceptInsecureCerts"
如果accept insecure TLS 标志已设置
且不等于 value,
则返回成功,
其数据为null。
如果端点节点 不支持不安全的 TLS 证书,并且这是最终无法匹配的原因, 则向本地端 提供此信息是有用的。
proxy"
如果has proxy
configuration 标志已设置,或者
value 中定义的代理配置未通过端点节点的
实现特定有效性检查,则返回成功,
其数据为null。
本地端只有在期望该能力被认可并使用已配置代理时, 才会发送此能力。其意图是,如果无法做到这一点, 则不会建立新会话。
unhandledPromptBehavior"
如果使用 value 调用
check user prompt
handler matches
为 false,则返回成功,
其数据为null。
如果 name 是定义了匹配 能力序列化算法的某个额外 WebDriver 能力的名称, 则令 match value 为使用 value 和 flags 作为参数, 为能力 name 运行匹配 能力序列化算法的结果。
否则,如果 name 是某个
扩展能力的键,
则令 match value 为使用 value,
trying 实现特定步骤来匹配
name 的结果。如果
匹配未成功,则返回成功,
其数据为null。
如果 match value 不是 null,则在 matched capabilities 上以名称 name 和 值 match value 设置属性。
返回成功,其数据为 matched capabilities。
WebDriver 会话 表示本地端与一个 特定远程端之间的 逻辑连接。会话对象保存 特定于该连接的状态。
中介节点将为每个活动会话维护一个关联 会话。这是 中介节点执行新建 会话命令时,在上游邻居上创建的会话。 关闭中介节点上的一个会话,也会关闭 关联会话的会话。
会话有一个会话 ID,它是用于唯一标识该 会话的UUID的字符串 表示。这是在创建会话时设置的。
会话有一个布尔值HTTP 标志,它在 会话创建时设置。设置了此标志的会话是 一个HTTP 会话。
远程 端有关联的 活动会话列表, 这是当前已启动的所有会话的 列表。
远程 端有关联的 活动 HTTP 会话列表,这是当前已启动的所有HTTP 会话的列表。
对端点 节点而言仅限单个 HTTP 会话,这意味着活动 HTTP 会话列表中的第一个条目将是唯一的条目。
HTTP 会话有关联的当前浏览 上下文,它是命令将针对其运行的浏览上下文, 有关联的当前 父 浏览上下文,它在更改浏览上下文时被设置为当前 浏览上下文的父级,以及 关联的当前顶级浏览上下文,它在 更改浏览上下文时被设置为当前浏览 上下文的顶级浏览上下文祖先。
HTTP 会话有关联的会话 超时,它是一个超时配置。它 初始设置为一个新的超时配置。
HTTP 会话有关联的页面加载 策略,它是页面加载 策略表中的关键字之一。它初始设置为normal。
HTTP 会话有关联的严格文件 可交互性状态,它是一个布尔值。它初始设置 为 false。
会话有关联的浏览上下文输入 状态映射,它是一个以顶级浏览 上下文为键、以输入状态对象为值的弱映射。它 初始设置为空映射。
HTTP 会话有关联的请求队列,它是由当前 等待 处理的请求组成的 队列。
创建会话时,会提供一集合会话配置
标志,用于定义会话的特性。此
规范始终创建在会话配置标志中带有 "http"
的会话,这对应于HTTP
标志。外部规范可以定义额外的
标志,或创建不带HTTP
标志的会话。
除了每会话状态之外,作为端点节点的远程端还具有跨所有会话全局的附加状态。
端点节点有关联的接受不安全 TLS标志,该标志指示是否将不受信任或自签名的 TLS 证书视为受信任。如果端点不支持接受不安全的 TLS 连接,则该标志的默认值为 false;否则为未设置。
端点节点有关联的已有代理 配置标志,该标志指示代理是否已经 配置。如果端点 不支持代理配置,则该标志的默认值为 true;否则为 false。
要在给定 JSON Object capabilites 和会话配置 标志 flags 时创建 会话:
令 session id 为生成 UUID的结果。
令 session 为一个新的会话,其会话
ID为 session id,且HTTP 标志为 flags 包含
"http"。
令 proxy 为从 capabilities 获取属性
"proxy" 的结果,并运行第一个匹配语句的
子步骤:
如果 capabilites 有一个名为
"acceptInsecureCerts" 的属性,则将端点
节点的接受不安全 TLS标志设置为从 capabilities
获取名为
"acceptInsecureCerts" 的属性的结果。
令 user prompt handler capability 为从 capabilities 获取属性
"unhandledPromptBehavior" 的结果。
如果 user prompt handler capability 不是 undefined,则使用 user prompt handler capability 更新用户 提示处理器。
令 serialized user prompt handler 为序列化用户提示处理器的结果。
在 capabilities 上设置一个属性,其名称为
"unhandledPromptBehavior",值为 serialized
user prompt handler。
如果 flags contains "http":
令 strategy 为从 capabilities
获取属性 "pageLoadStrategy"
的结果。
如果 strategy 是
string,则将会话的页面加载
策略设置为 strategy。否则,将
页面加载策略设置为 normal,
并设置
capabilities 的一个属性,其名称为
"pageLoadStrategy",值为
"normal"。
令 strictFileInteractability 为从 capabilities
获取属性 "strictFileInteractability"
的结果。如果 strictFileInteractability
是 boolean,则将会话的严格文件
可交互性设置为 strictFileInteractability。
令 timeouts 为从 capabilities
获取属性 "timeouts" 的结果。
如果 timeouts 不是 undefined,则将
session 的会话超时
设置为 timeouts。
在 capabilities 上设置一个属性,其名称为
"timeouts",值为使用 session 的
会话超时序列化超时
配置的结果。
以实现定义的方式处理 capabilities 中的任何扩展能力。
使用参数 session、 capabilities 和 flags,运行外部规范中定义的任何WebDriver 新建会话算法。
将 session 追加到活动会话。
如果 flags 包含 "http",
则将 session 追加到活动 HTTP 会话。
将webdriver-active 标志设置为 true。
要在给定 session 时关闭 会话, 远程端必须执行以下步骤:
如果设置了 session 的HTTP 标志, 则从活动 HTTP 会话中移除 session。
从活动会话中移除 session。
根据远程端的 类型执行以下子步骤:
执行任何实现特定的清理步骤。
关闭会话可能导致关联的浏览器进程被 终止。 假设任何实现特定的清理步骤都在响应已发回客户端 之后执行, 这样连接就不会过早关闭。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session |
新建会话命令 会使用端点节点创建一个新的 WebDriver 会话。 如果创建失败,则返回session not created 错误。
如果远程端是中介 节点, 它可以使用能力处理 算法的结果, 将新会话请求路由到适当的端点节点。 中介节点可以自由定义扩展能力 来协助此过程;但是,这些特定能力 不得转发给端点节点。
如果中介节点需要与用户代理特性无关的额外信息, 建议将此信息作为顶层参数传递, 而不是作为请求的能力的一部分传递。 中介节点必须将自定义的 顶层参数(即非能力)转发给后续远程端节点。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果实现是端点节点,且 活动 HTTP 会话列表非空,或者 在其他情况下实现无法启动额外会话, 则返回错误,其错误码为 session not created。
如果远程端是一个中介 节点,则执行 实现定义的步骤,其结果要么是返回一个错误,其错误代码为session not created, 要么是返回一个成功,其数据同构于 远程端根据本 算法其余部分返回的数据。如果未返回错误,则该中介 节点必须保留对在上游节点上创建的会话的引用,将其作为关联 会话,以便 在后续命令中可以将命令转发给此关联会话。
令 flags 为包含 "http" 的 set。
如果 capabilities 是null,
则返回错误,其错误码为 session not created。
令 session 为使用 capabilities 和 flags 创建 会话的结果。
令 body 为用以下内容初始化的 JSON Object:
sessionId"
capabilities"
将 session 的当前顶级 浏览 上下文设置为端点节点的顶级 浏览上下文之一,优先选择具有系统 焦点的顶级浏览 上下文, 或者否则优先选择任何其 可见性 状态 为visible的顶级浏览 上下文。
WebDriver 实现通常会启动一个 全新的浏览器实例,但本规范中没有要求 必须这样做(也没有要求 WebDriver 只能用于自动化 Web 浏览器)。实现可以选择使用已有的 浏览器实例,例如通过选择当前具有 焦点的窗口。
返回成功,其数据为 body。
| HTTP 方法 | URI 模板 |
|---|---|
| DELETE | /session/{session id} |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 是活动 HTTP 会话, 则try 使用 session 关闭会话。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /status |
实现可以可选地将
额外元信息作为主体的一部分包含进来,
但顶层属性
ready 和 message
是保留的,不得被覆盖。
给定 session、URL variables 和 parameters 时,远程端步骤为:
计时器是一个 struct。它有一个 超时触发标志,它是一个 boolean,初始为 false。
给定 timer 和 timeout,为了启动 计时器
超时 配置是一个 struct,表示 脚本求值、 导航和元素 检索的超时。它有一个脚本 超时项,它是整数或 null,且 初始设置为 30,000;一个页面加载 超时项,它是整数或 null,且 初始设置为 300,000;以及一个隐式 等待超时项,它是整数或 null,且 初始设置为 0。 给定 timeouts,为了反序列化为超时配置:
将 timeouts 设置为使用 timeouts 将 JSON 派生的 JavaScript 值转换为 Infra 值的结果。
令 configuration 为一个新的超时 配置。
对于 timeouts 中的每个 key → value:
返回成功,其数据为 configuration。
令 serialized 为空map。
将 serialized["script"]
设置为 timeouts 的脚本超时。
将 serialized["pageLoad"]
设置为 timeouts 的页面加载超时。
将 serialized["implicit"]
设置为 timeouts 的隐式等待超时。
返回使用 serialized 将 Infra 值转换为 JSON 兼容的 JavaScript 值的结果。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/timeouts |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/timeouts |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 timeouts 为使用 parameters trying 去 反序列化为超时 配置的结果。
将 session 的超时配置 设置为 timeouts。
许多 WebDriver 命令发生在 session 的当前浏览上下文或当前 顶级浏览上下文的上下文中。 session 的当前顶级浏览 上下文在 协议中由其关联的窗口句柄表示。 当使用 切换到窗口命令选择一个顶级浏览上下文时,可以使用切换到框架命令选择特定的浏览 上下文。
如果一个浏览上下文的 navigable 已被销毁, 则称该浏览上下文不再打开。
每个浏览上下文都有一个关联的
窗口句柄,它唯一
标识该浏览上下文。这必须是一个 String,并且不得是
"current"。
web 框架 是一种抽象,用于在通过协议、 在远程端与本地端之间传输时, 标识 frame 或 iframe。
web frame
标识符
是字符串常量 "frame-075b-4da1-b6ba-e579c2d3230a"。
如果 ECMAScript Object 具有一个web frame 标识符自身属性, 则该对象表示 web 框架。
web 窗口 是一种抽象,用于在通过协议、 在远程端与本地端之间传输时, 标识窗口。
web window
标识符
是字符串常量 "window-fcc6-11e5-b4f8-330a88ab9d7f"。
如果 ECMAScript Object 具有一个web window 标识符自身属性, 则该对象表示 web 窗口。
带有 WindowProxy 对象 window 的
WindowProxy 引用对象
由以下方式给出:
如果 window 的关联浏览上下文 是顶级浏览上下文, 则令 identifier 为web window 标识符。
否则令其为web frame 标识符。
返回一个使用以下属性初始化的 JSON Object:
为了通过一个 JSON Object object 来反序列化 web 框架,该 object 表示 web 框架:
如果 object 没有自身属性web frame 标识符, 则返回错误,其错误码为 invalid argument。
令 reference 为从 object 获取 web frame 标识符属性的结果。
如果 reference 不是 String, 则返回一个错误,其错误码为 invalid argument。
令 browsing context 为窗口句柄是 reference 的浏览上下文;如果不存在这样的 浏览上下文,则为 null。
如果 browsing context 为 null,或是顶级浏览上下文, 则返回错误,其错误码为 no such frame。
返回成功,其数据为 browsing context 的关联 窗口。
为了通过一个 JSON Object object 来反序列化 web 窗口,该 object 表示 web 窗口:
如果 object 没有自身属性web window 标识符, 则返回错误,其错误码为 invalid argument。
令 reference 为从 object 获取 web window 标识符属性的结果。
如果 reference 不是 String, 则返回一个错误,其错误码为 invalid argument。
令 browsing context 为窗口句柄是 reference 的浏览上下文;如果不存在这样的 浏览上下文,则为 null。
如果 browsing context 为 null,或者不是顶级浏览上下文, 则返回错误,其错误码为 no such window。
返回成功,其数据为 browsing context 的关联 窗口。
当要求给定 session 和 context 设置当前浏览上下文时,实现必须 遵循以下步骤:
当要求给定 session 和 context 设置当前顶级浏览 上下文时,实现必须:
断言:context 是顶级浏览上下文。
将 session 的当前顶级 浏览 上下文设置为 context。
使用 session 和 context 设置当前浏览上下文。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/window |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
返回成功,其数据为与 session 的 当前顶级浏览 上下文关联的窗口句柄。
| HTTP 方法 | URI 模板 |
|---|---|
| DELETE | /session/{session id}/window |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
关闭 session 的当前 顶级 浏览上下文。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/window |
切换窗口会选择 session 的当前顶级 浏览上下文,将其用作所有 后续命令的目标。在标签页式浏览器中,这通常会 使包含该浏览上下文的标签页成为选中的 标签页。
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 handle 为从 parameters
获取属性 "handle"
的结果。
如果 handle 为undefined, 则返回错误,其错误码为 invalid argument。
如果存在活动的用户提示,它会阻止 聚焦另一个顶级浏览上下文, 则返回错误,其错误码为 unexpected alert open。
如果 handle 等于某个顶级浏览上下文的关联窗口 句柄, 则令 context 为该浏览上下文,并使用 session 和 context 设置 当前顶级浏览上下文。
否则,返回错误,其错误码为 no such window。
更新任何由用户选择 session 的当前浏览上下文进行 交互而产生的实现特定状态,且不改变 OS 级焦点。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/window/handles |
窗口句柄返回的顺序是任意的。
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/window/new |
创建新的顶级浏览上下文。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果实现不支持创建新的顶级 浏览上下文,则返回错误,其错误码为 unsupported operation。
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
令 type hint 为从 parameters 获取属性
"type" 的结果。
通过运行
window open steps 创建新的顶级浏览上下文,
其中 URL 设置为
"about:blank",target 设置为空
字符串,features 设置为 "noopener",并且
用户代理被配置为创建新的浏览上下文。这必须
在不为所创建的浏览
上下文调用聚焦步骤的情况下完成。
如果 type hint 的值为 "tab",
且实现支持在同一个 OS 窗口中存在多个浏览上下文,
则新的浏览上下文应与 session 的当前浏览
上下文共享一个 OS 窗口。如果 type hint 为
"window",且实现支持在不同 OS 窗口中存在多个
浏览上下文,则所创建的浏览
上下文应位于新的 OS 窗口中。在所有其他情况下,
浏览上下文如何呈现给用户的细节都是
实现定义的。
令 handle 为 新创建窗口的关联窗口句柄。
如果新创建的窗口与 session 的当前浏览
上下文共享 OS 级窗口,则令 type 为 "tab";
否则为 "window"。
令 result 为一个新的 JSON Object,使用以下内容初始化:
handle"
type"
返回成功,其数据为 result。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/frame |
切换到框架命令用于选择 session 的当前顶级 浏览上下文,或 session 的当前 浏览上下文的子浏览上下文, 将其用作 session 后续命令的当前 浏览上下文。 给定 session、URL variables 和 parameters 时,远程端步骤为:
令 id 为从 parameters
获取属性 "id"
的结果。
如果 id 不是null、
Number 对象,
或表示 web 元素的Object,
则返回错误,其错误码为 invalid
argument。
运行第一个匹配条件的子步骤:
null
如果 session 的当前顶级 浏览 上下文不再打开, 则返回错误, 其错误码为 no such window。
使用 session 和 session 的当前 顶级浏览上下文 设置 当前浏览上下文。
Number 对象
如果 id 小于 0 或大于 216 – 1, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览上下文 不再 打开,则返回错误,其错误码为 no such window。
如果 id 不是 window 的支持的 属性索引, 则返回错误,其错误码为 no such frame。
令 child window 为通过调用
window.[[GetOwnProperty]]
(id)
获得的WindowProxy 对象。
使用 session 和 child window 的浏览上下文 设置 当前浏览上下文。
如果 session 的当前浏览上下文 不再 打开,则返回错误,其错误码为 no such window。
如果 element 不是
frame
或
iframe
元素,
则返回错误,其错误码为 no
such frame。
使用 session 和 element 的内容 navigable的活动 浏览上下文 设置 当前浏览上下文。
更新任何由用户选择 session 的当前浏览上下文进行 交互而产生的实现特定状态,且不改变 OS 级焦点。
WebDriver 不受同源策略约束, 因此始终可以切换到子浏览上下文, 即使它们与当前浏览上下文不同源。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/frame/parent |
给定 session、URL variables 和 parameters 时,远程端步骤为:
WebDriver 提供命令, 用于与包含 session 的当前顶级 浏览上下文的操作系统窗口交互。 由于不同操作系统的窗口管理器提供不同的能力, 并非本节中的所有命令都能被所有远程端支持。 对这些命令的支持由窗口 尺寸调整/定位能力决定。 当某个命令不受支持时, 会返回unsupported operation 错误。
顶级浏览上下文 具有关联的窗口状态, 用于描述其 OS 小部件窗口处于何种可见性状态。 它可以处于以下状态之一:
| 状态 | 关键字 | 默认 | 描述 |
|---|---|---|---|
| 最大化窗口状态 | "maximized"
|
窗口已最大化。 | |
| 最小化窗口状态 | "minimized"
|
窗口已图标化。 | |
| 普通窗口状态 | "normal"
|
✓ | 窗口正常显示。 |
| 全屏窗口状态 | "fullscreen"
|
窗口处于全屏模式。 |
如果出于任何原因,顶级浏览上下文的 OS 窗口无法进入任一窗口状态,或者此 概念不适用于当前系统,则默认状态 必须为 normal。
对于 WindowProxy window,WindowRect 对象是使用以下属性初始化的Object:
x"
window 的screenX 属性。
y"
window 的screenY 属性。
width"
windows 的outerWidth 属性。
height"
window 的outerHeight 属性。
给定一个具有关联顶级浏览上下文的操作系统级窗口, 为了最大化 窗口, 运行实现特定步骤, 将该操作系统级窗口转换到最大化窗口状态。 如果窗口管理器支持调整窗口大小, 但没有窗口最大化概念, 则窗口尺寸必须增加到 窗口管理器允许的当前屏幕的 最大可用大小。 当窗口完成转换时返回, 或在实现定义的超时时间内返回。
给定一个具有关联顶级浏览上下文的操作系统级窗口, 为了图标化 窗口, 运行实现特定步骤, 将该操作系统级窗口转换到最小化窗口状态。 在顶级浏览上下文的活动文档的可见性状态 达到 状态之前, 或操作超时之前,不要从此操作返回。
给定一个具有关联顶级浏览上下文的操作系统级窗口, 为了恢复 窗口, 运行实现特定步骤, 将窗口恢复或取消隐藏到 可见屏幕。 在顶级浏览上下文的活动文档的可见性状态 达到visible 状态之前, 或操作超时之前,不要从此操作返回。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/window/rect |
获取窗口矩形命令 返回与 session 的当前 顶级浏览上下文对应的操作系统窗口 在屏幕上的大小和位置。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览上下文不再打开, 则返回错误,其错误码为 no such window。
返回成功,其数据设置为 session 的当前顶级浏览 上下文的WindowRect 对象。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/window/rect |
设置窗口矩形命令 会改变与 session 的当前顶级浏览 上下文对应的操作系统窗口的大小和位置。
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 width 为从 parameters
获取名为 "width"
的属性的结果。
如果 width 为undefined,则令 width 为 null。
令 height 为从 parameters
获取名为
"height"
的属性的结果。
如果 height 为undefined,则令 height 为 null。
令 x 为从 parameters 获取
名为 "x" 的属性的结果。
如果 x 为undefined,则令 x 为 null。
令 y 为从 parameters 获取
名为 "y" 的属性的结果。
如果 y 为undefined,则令 y 为 null。
如果 width 或 height 既不是 null,也不是 0 到 231 − 1 范围内的 Number,则返回错误, 其错误码为 invalid argument。
如果 x 或 y 既不是 null,也不是 −(231) 到 231 − 1 范围内的 Number, 则返回错误,其错误码为 invalid argument。
如果远程端出于任何原因不支持 针对 session 的当前 顶级浏览上下文的设置窗口矩形命令, 则返回错误,其错误 码为 unsupported operation。
在设置窗口矩形命令 受到部分支持的情况下(即支持某些参数组合, 但不支持其他组合),预期实现会继续 执行剩余步骤。
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
恢复窗口。
令 window 为包含 session 的当前 顶级浏览上下文的操作系统窗口
如果实现能够设置 window 的尺寸:
如果 width 不为 null,则将 window 的宽度 (以 CSS 像素为单位),包括 任何浏览器 chrome和外部绘制的窗口 装饰, 设置为尽可能接近 width 的值。
如果 height 不为 null,则将 window 的高度 (以 CSS 像素为单位),包括 任何浏览器 chrome和外部绘制的窗口 装饰, 设置为尽可能接近 height 的值。
如果实现能够设置 window 的位置:
如果 x 不为 null,则将 window 左边缘的 x 坐标设置为 尽可能接近 x 的值。
如果 y 不为 null,则将 window 顶部 边缘的 y 坐标设置为尽可能接近 y 的值。
返回成功,其数据设置为 session 的当前顶级浏览 上下文的WindowRect 对象。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/window/maximize |
最大化窗口命令会在包含 session 的当前顶级浏览 上下文的窗口上调用窗口管理器特定的“最大化”操作(如果有)。 这通常会将窗口增大到最大 可用大小,而不会进入全屏。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果远程端出于任何原因不支持针对 session 的 当前顶级 浏览上下文的最大化 窗口命令,则返回错误, 其错误码为 unsupported operation。
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
恢复窗口。
最大化窗口, 该窗口为 session 的当前顶级浏览 上下文的窗口。
返回成功,其数据设置为 session 的当前顶级浏览 上下文的WindowRect 对象。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/window/minimize |
最小化窗口命令会在包含 session 的当前顶级浏览 上下文的窗口上调用窗口管理器特定的“最小化”操作(如果有)。 这通常会在系统托盘中隐藏窗口。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果远程端出于任何原因不支持针对 session 的 当前顶级 浏览上下文的最小化 窗口命令,则返回错误, 其错误码为 unsupported operation。
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
返回成功,其数据设置为 session 的当前顶级浏览 上下文的WindowRect 对象。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/window/fullscreen |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果远程端不支持全屏, 则返回错误,其错误码为 unsupported operation。
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
恢复窗口。
以 session 的当前顶级浏览 上下文的 活动文档的文档元素调用 fullscreen an element。
窗口现在处于全屏窗口状态。
返回成功,其数据设置为 session 的当前顶级浏览 上下文的WindowRect 对象。
web 元素 是一种抽象,用于在通过协议、 在远程端与本地端之间传输时, 标识一个元素。
web element
标识符是字符串常量
"element-6066-11e4-a52e-4f735466cecf"。
如果 ECMAScript Object 具有一个web element 标识符自身属性, 则该对象表示 web 元素。
WebDriver 节点 ID是一个全局唯一字符串, 表示特定 WebDriver 会话中 DOM 节点的句柄。
弱映射是一个映射,其中键被弱 持有,即如果键对象被垃圾回收,则移除相应项,并且 映射中的存在不会阻止垃圾回收。这可作为 直接在键对象上定义属性的替代方式。
WebDriver 会话有一个浏览上下文组节点 映射,它是浏览上下文 组 和节点 ID 映射之间的弱映射。
节点 ID 映射是节点和其 对应 WebDriver 节点 ID之间的弱映射。
WebDriver 会话有一个可导航对象已见节点映射, 它是可导航对象和集合之间的弱 映射。
要在给定 session、 browsing context 和 reference 时获取节点:
为了给定 session、browsing context 和 node 来获取 或创建节点引用:
返回 node id map[node]。
给定 session、browsing context 和 reference 时,如果以下步骤返回 true,则节点 引用是已知的:
为了给定 session 和 reference 来获取已知 元素:
Element,则返回错误,其错误
码为 no such element。
为了给定 session 和element 来获取或创建 web 元素引用:
Element。
session 和 element 的web 元素引用对象是:
令 identifier 为web element 标识符。
令 reference 为使用 session 和 element 获取或创建 web 元素引用的结果。
返回一个 JSON Object,该对象以一个属性初始化, 其名称为 identifier,值为 reference。
为了通过一个 JSON Object object 来反序列化 web 元素,该 object 表示 web 元素:
如果 object 没有自身属性web element 标识符, 则返回错误,其错误码为 invalid argument。
令 reference 为从 object 获取web element 标识符属性的结果。
如果 reference 不是 String, 则返回一个错误,其错误码为 invalid argument。
返回成功,其数据为 element。
一个 元素 是失效的, 如果其 节点文档不是活动文档, 或者它未连接。
为了将一个元素滚动到视图中, 仅当该元素尚未在视图中时, 执行以下步骤:
令 options 为
以下 ScrollIntoViewOptions:
behavior"
instant"
block"
end"
inline"
nearest"
以 element 作为 this 值运行 Function.[[Call]](scrollIntoView, options)。
可编辑元素 是可用于键入 和清除的元素, 它们分为两个子类别:
表示
input
元素,
它们是可变的(例如不是只读或
禁用的),并且其
type
属性
处于以下状态之一:
以及
textarea
元素。
表示作为编辑宿主或content editable的元素。
如果一个元素的 "pointer-events" 样式属性的
解析值
是 "none",则称该元素具有
pointer
events disabled。
如果一个元素是
input
元素,
并且其
readonly
属性已设置,则该元素被视为只读。
为了确定一个元素 是否可以使用指针操作与之交互, WebDriver 会执行命中测试以找出 该交互是否能够到达所请求的元素。
可交互元素 是一个元素,它要么是 指针可交互,要么是键盘可交互。
指针可交互元素 定义为在其矩形中位于视口内部的中心点处, 按绘制顺序找到的第一个元素, 不包括任何已渲染滚动条的尺寸。
键盘可交互元素
是任何具有可聚焦区域的元素,
或者是
body
元素,
或者是文档元素。
元素的视图内中心
点
是以下矩形的原点位置:
该矩形是元素第一个由
getClientRects()
返回的DOMRect
与初始视口之间的交集。
它可以按如下方式计算:
令 rectangle 为
在element 上调用
getClientRects()
返回的
DOMRect 集合中的第一个对象。
令 x 为 floor((left + right) ÷ 2.0)。
令 y 为 floor((top + bottom) ÷ 2.0)。
返回 (x, y) 对。
如果以下步骤返回 true,则元素 element 是禁用的:
返回 element 实际禁用。
如果一个元素是其自身指针可交互绘制 树的成员, 并假定其指针事件未被 禁用, 则该元素在视图中。
如果一个元素在其中心点处的 指针可交互绘制树 为空, 或者此树中的第一个元素 不是其自身的包含后代,则该元素被遮挡。
元素 element 的 指针可交互绘制树 按以下方式生成:
shadow root 是一种抽象,用于在通过协议、 在远程端与本地端之间传输时, 标识一个shadow root。
shadow
root 标识符是字符串常量
"shadow-6066-11e4-a52e-4f735466cecf"。
如果 ECMAScript Object 具有一个shadow root 标识符自身属性, 则该对象表示 shadow root。
为了给定 session 和 reference 来获取 已知 shadow root:
ShadowRoot,则返回错误,
其错误码为
no such shadow root。
为了给定 session 和 shadow root 来获取或创建 shadow root 引用:
ShadowRoot。
session 和 shadow root 的shadow root 引用对象由以下给出:
令 identifier 为shadow root 标识符。
令 reference 为使用 session 和 shadow root 获取或创建 shadow root 引用的结果。
返回一个 JSON Object,该对象以一个属性初始化, 其名称为 identifier,值为 reference。
当要求通过一个 JSON Object object 来反序列化 shadow root, 该 object 表示 shadow root:
如果 object 没有自身属性shadow root 标识符, 则返回错误,其错误码为 invalid argument。
令 reference 为从 object 获取 shadow root 标识符属性 的结果。
如果 reference 不是 String, 则返回一个错误,其错误码为 invalid argument。
令 shadow 为 使用 session 和 reference trying 去获取 已知 shadow root 的结果。
返回成功,其数据为 shadow。
如果一个shadow root的 节点文档不是活动文档, 或者称为其宿主的元素节点 已 过时,则该 shadow root 已分离。
查找元素、 查找元素列表、 从元素查找元素、 从元素查找元素列表、 从 Shadow Root 查找元素, 以及从 Shadow Root 查找元素列表命令 允许查找单个元素和元素集合。 元素检索搜索会使用文档节点的 先序遍历来执行, 匹配所提供选择器的表达式。
当要求给定 session、start node、using 和 value 来查找时,远程 端必须运行以下步骤:
令 location strategy 等于 using。
令 selector 等于 value。
令 timer 为一个新的计时器。
如果 timeout 不为 null:
使用 timer 和 timeout 启动计时器。
令 elements returned 为空List。
当 elements returned 为空 且 timer 的timeout fired flag未 设置时:
将 elements returned 设置为使用参数 start node 和 selector trying 调用 相关元素定位策略的结果。
DOMException、SyntaxError、
XPathException,或其他错误,
则返回错误
invalid selector。
令 result 为空List。
对于 elements returned 中的每个 element, 将 session 和 element 的web 元素引用对象 追加到 result。
返回成功,其数据为 result。
元素定位策略是 一个枚举属性,决定应使用何种技术 在 session 的当前 浏览上下文中搜索元素。以下定位 策略表列出了为此属性定义的关键字和状态:
| 状态 | 关键字 |
|---|---|
| CSS 选择器 | "css selector"
|
| 链接文本选择器 | "link text"
|
| 部分链接文本选择器 | "partial link text"
|
| 标签名称 | "tag name"
|
| XPath 选择器 | "xpath"
|
为了使用 CSS 选择器策略 查找web 元素, 需要完成以下步骤:
令 elements 为以 start node 作为this、
selector 作为参数调用
querySelectorAll()
的结果。如果这导致抛出异常,则返回错误,其错误
码为
invalid selector。
返回成功,其数据为 elements。
为了使用 链接文本策略 查找web 元素, 需要完成以下步骤:
令 elements 为以 start node 作为this、
"a" 作为参数调用
querySelectorAll()
的结果。如果这抛出异常,
则返回错误,其错误
码为 unknown error。
令 result 为空NodeList。
对于 elements 中的每个 element:
返回成功,其数据为 result。
部分链接文本策略
与链接文本策略非常相似,
但它不是匹配整个字符串,
而是只需要匹配一个子字符串。
也就是说,返回所有渲染文本包含选择器表达式的
a
元素。
为了使用部分链接文本策略 查找web 元素, 需要完成以下步骤:
令 elements 为以 start node 作为this、
"a" 作为参数调用
querySelectorAll()
的结果。如果这抛出异常,
则返回错误,其错误
码为 unknown error。
令 result 为空NodeList。
对于 elements 中的每个 element:
令 rendered text 为通过对 element 调用获取元素 文本 会返回的值。
如果 rendered text 包含 selector, 则将 element 追加到 result。
返回成功,其数据为 result。
为了使用 标签名称
策略查找web 元素,返回成功,其数据设置为以
start node 作为this、selector 作为参数调用
getElementsByTagName()
的结果。
为了使用 XPath 选择器策略 查找web 元素, 需要完成以下步骤:
令 evaluateResult 为使用参数 selector、
start node、
null、
ORDERED_NODE_SNAPSHOT_TYPE
和 null
调用 evaluate 的结果。
使用快照是为了提升操作的原子性。
令 index 为 0。
令 length 为从 evaluateResult
获取
属性 "snapshotLength"
的结果。如果这抛出
XPathException,则返回错误,其
错误
码为 invalid selector;否则,如果这抛出任何其他
异常,则返回错误,其错误
码为 unknown
error。
令 result 为空NodeList。
当 index 小于 length 时,重复:
如果 node 不是元素,则返回一个错误, 其错误码为 invalid selector。
返回成功,其数据为 result。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/element |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 location strategy 为从 parameters
获取
名为 "using" 的
属性的结果。
如果 location strategy 不是 定位策略表中的关键字,则返回 错误, 其错误码为 invalid argument。
令 selector 为从 parameters
获取
名为 "value" 的
属性的结果。
如果 selector 为undefined, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
如果 start node 是null,
则返回错误,其错误码为 no such element。
令 result 为使用 session、start node、location strategy 和 selector trying 去查找的结果。
如果 result 为空,则返回错误, 其错误码为 no such element。否则,返回 result 的第一个元素。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/elements |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 location strategy 为从 parameters
获取
名为 "using" 的
属性的结果。
如果 location strategy 不是 定位策略表中的关键字,则返回 错误, 其错误码为 invalid argument。
令 selector 为从 parameters
获取
名为 "value" 的
属性的结果。
如果 selector 为undefined, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
如果 start node 是null,
则返回错误,其错误码为 no such element。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/element/{element id}/element |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 location strategy 为从 parameters
获取
名为 "using" 的
属性的结果。
如果 location strategy 不是 定位策略表中的关键字,则返回 错误, 其错误码为 invalid argument。
令 selector 为从 parameters
获取
名为 "value" 的
属性的结果。
如果 selector 为undefined, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 start node 为使用 session
和 URL variables["element id"]
trying 去获取
已知元素的结果。
如果 result 为空,则返回错误, 其错误码为 no such element。否则,返回 result 的第一个元素。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/element/{element id}/elements |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 location strategy 为从 parameters
获取
名为 "using" 的
属性的结果。
如果 location strategy 不是 定位策略表中的关键字,则返回 错误, 其错误码为 invalid argument。
令 selector 为从 parameters
获取
名为 "value" 的
属性的结果。
如果 selector 为undefined, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 start node 为使用 session
和 URL variables["element id"]
trying 去获取
已知元素的结果。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/shadow/{shadow id}/element |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 location strategy 为
获取名为
"using" 的属性的结果。
如果 location strategy 不是 定位策略表中的关键字,则返回 错误, 其错误码为 invalid argument。
令 selector 为
获取名为
"value" 的属性的结果。
如果 selector 为undefined, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
令 start node 为使用
session
和 URL variables["shadow id"]
trying
去获取已知 shadow root的结果。
如果 result 为空,则返回错误, 其错误码为 no such element。否则,返回 result 的第一个元素。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/shadow/{shadow id}/elements |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 location strategy 为
获取名为
"using" 的属性的结果。
如果 location strategy 不是 定位策略表中的关键字,则返回 错误, 其错误码为 invalid argument。
令 selector 为
获取名为
"value" 的属性的结果。
如果 selector 为undefined, 则返回错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 start node 为
使用 session 和 URL variables["shadow id"]
trying 去获取
已知 shadow root的结果。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/active |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/shadow |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session 和 URL variables[element id] trying 去获取已知元素的结果。
令 shadow root 为 element 的shadow root。
如果 shadow root 为 null,则返回错误, 其错误码为 no such shadow root。
令 serialized 为 session 和 shadow root 的shadow root 引用对象。
返回成功,其数据为 serialized。
为了给定 session 和 element 来计算绝对位置:
令 rect 为调用 getBoundingClientRect()
返回的值。
令 window 为 session 的当前 顶级浏览上下文的关联窗口。
返回 (x, y) 对。
为了确定节点是否与另一个节点 other 不在同一树中, 运行以下子步骤:
如果以 other 作为参数调用该节点的
compareDocumentPosition()
的结果是 DOCUMENT_POSITION_DISCONNECTED
(1),
则返回 true,否则返回 false。
element 的容器是:
option
元素
optgroup
元素
option
元素
该元素没有容器。
容器是该元素本身。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/selected |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session 和 URL variables[element id] trying 去获取已知元素的结果。
令 selected 为与第一个匹配语句对应的值:
input
元素,
且具有一个处于
Checkbox 或 Radio
Button 状态的
type
属性
element 的checkedness 的结果。
option
元素
element 的selectedness 的结果。
返回成功,其数据为 selected。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/attribute/{name} |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session 和 URL variables 的 element id trying 去获取已知元素的结果。
令 name 为 URL variables["name"]。
如果 element 使用 name 调用
hasAttribute(),
则为 "true"(字符串),
否则为null。
按名称 name 获取属性 的结果。
返回成功,其数据为 result。
请注意,此命令的行为
偏离了 [DOM] 中 getAttribute()
的行为,
后者在设置了布尔属性的情况下
会返回空字符串。
此命令之所以返回字符串形式的 true,
是因为这在大多数动态类型编程语言中会求值为 true,
但仍保留预期的类型信息。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/property/{name} |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session 和 URL variables 的 element id trying 去获取已知元素的结果。
令 name URL variables["name"]。
令 property 为在 element 上调用 Object.[[GetProperty]](name) 的结果。
返回成功,其数据为 result。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/css/{property name} |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/text |
处理文本时,
空白被
定义为 Unicode 字符数据库中具有
Unicode 字符属性
"WSpace=Y" 或 "WS" 的字符。
[UAX44]
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session 和 URL variables[element id] trying 去获取已知元素的结果。
令 rendered text 为执行
实现特定步骤的结果,该结果与以
bot.dom.getVisibleText 作为
this 值,
对 Function.[[Call]](null, element)
的结果完全相同。
返回成功,其数据为 rendered text。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/name |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/rect |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/enabled |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/computedrole |
给定 session、URL variables 和 parameters 时,远程端步骤为:
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/computedlabel |
给定 session、URL variables 和 parameters 时,远程端步骤为:
元素交互命令 提供了一组用于操作表单控件的高级指令集。 不同于操作, 它们会隐式地将元素滚动到视图中, 并检查它是一个可交互元素。
某些可重置元素定义了自己的清除
算法。
不同于其关联的重置算法,
作为这些算法的一部分对表单控件所做的更改
确实计为由用户导致的更改
(因此,例如确实会导致 input 事件触发)。
当为没有定义自己的清除算法的元素调用清除算法时,
必须改为调用其重置算法。
input
元素的清除算法
是将脏值标志和脏选中性
标志恢复为 false,
将元素的值
设置为空字符串,
如果元素具有
checked
内容属性,则将元素的选中性设置为 true,
如果没有则设置为 false,
清空选定文件列表,
然后当且仅当
type
属性的当前状态定义了一个值清理算法时调用它。
textarea
元素的清除算法
是将脏值标志恢复为 false,
并将元素的原始值设置为空字符串。
output
元素的清除算法
是将元素的值模式标志设置为 default,
然后将元素的 textContent IDL 属性
设置为空字符串(从而清除元素的子节点)。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/element/{element id}/click |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
如果 element 是处于文件上传状态的
input
元素,
则返回错误,其错误码为 invalid argument。
如果 element 的容器仍不在视图中, 则返回错误,其错误码为 element not interactable。
如果 element 的容器 被另一个元素遮挡, 则返回错误,其错误码为 element click intercepted。
对 element 进行匹配:
option
元素
令 parent node 为 element 的容器。
在 parent node 上触发一个 mouseOver 事件。
在 parent node 上触发一个 mouseMove 事件。
在 parent node 上触发一个 mouseDown 事件。
在 parent node 上运行聚焦 步骤。
如果 element 未禁用:
在 parent node 上触发一个 mouseUp 事件。
令 input state 为给定 session 和 session 的当前顶级 浏览 上下文来获取输入状态的结果。
令 actions options 为一个新的操作选项, 其中是元素 原点步骤设置为表示 web 元素,且获取元素原点步骤设置为获取 WebElement 原点。
令 input id 为生成 UUID的结果。
令 source 为使用 input state 和 "pointer"
创建输入
源的结果。
使用 input state、input id 和 source 添加输入源。
令 click point 为 element 的视图内中心 点。
令 pointer move action 为一个使用参数 input id、
"pointer" 和 "pointerMove" 构造的操作
对象。
在
pointer move action 上设置属性 x 为
0。
在
pointer move action 上设置属性 y 为
0。
在 pointer move action 上设置属性
origin
为 element。
令 pointer down action 为一个使用参数 input id、
"pointer" 和 "pointerDown" 构造的操作
对象。
在 pointer down action 上设置属性
button 为 0。
令 pointer up action 为一个使用参数 input id、
"pointer" 和 "pointerUp" 构造的操作
对象。
在 pointer up action 上设置属性
button
为 0。
令 actions 为列表 «pointer move action, pointer down action, pointer up action»。
使用 input state、actions、session 的当前 浏览上下文和 actions options 分派操作列表。
使用 input state 和 input id 移除输入源。
等待,直到用户代理事件循环已转动足够次数以 处理上一步生成的 DOM 事件。
执行实现定义的步骤,以允许 点击触发的任何导航开始。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/element/{element id}/clear |
要清除 content editable 元素:
如果 element 的innerHTML
IDL 属性
是空字符串,则不执行任何操作并返回。
对 element 运行聚焦步骤。
将 element 的innerHTML
IDL 属性
设置为空字符串。
对 element 运行取消聚焦步骤。
要清除可重置元素:
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
如果 element 不可编辑, 则返回一个错误,其错误码为 invalid element state。
将 element 滚动到视图中。
令 timer 为一个新的计时器。
如果 timeout 不为 null:
使用 timer 和 timeout 启动计时器。
等待 element 变为可交互, 或 timer 的timeout fired flag 被设置, 以先发生者为准。
如果 element 不可交互, 则返回错误,其错误码为 element not interactable。
运行第一个匹配语句的子步骤:
调用清除 可重置元素的步骤。
调用清除 content editable 元素的步骤。
返回错误,其错误 码为 invalid element state。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/element/{element id}/value |
不可键入表单控件
是
input
元素,
其
type
属性状态
导致主要输入机制
不是通过虚拟或物理键盘来完成。
不可键入表单控件意在指
用户代理呈现为文本输入控件以外形式的
表单控件元素。
当目标是一个处于color 状态、
并呈现为色轮的
input
元素时,
将模拟与它的交互,
而不是使用带操作的按键仿真来键入。
不可键入表单
控件的其他示例包括
通过系统原生小部件交互的表单控件,
例如
select
元素的滚动选项列表,
以及非桌面设备上处于number 状态的
input
元素的数字键盘。
用于输入的按键输入源可以在“键入”过程中 通过发送null key来清除,该键为 U+E000 (NULL)。
为了在给定 input state、input id、source、undo actions 和 browsing context 时清除修饰键状态:
如果 source 不是按键输入源, 则返回错误,其错误码为 invalid argument。
令 actions options 为一个新的操作选项, 其中是元素原点步骤设置为表示 web 元素,且获取元素原点步骤 设置为 获取 WebElement 原点。
对于 undo actions 中按词法排序的键中的每个 entry key:
如果一个扩展字素簇由单个 unicode 码点组成, 且code 不是undefined, 则它是可键入的。
keyboard 的shifted
状态是
keyboard 的 shift 属性的值。
为了在给定 input state、input id、source、 text 和 browsing context 时分派可键入字符串的事件:
令 actions options 为一个新的操作选项, 其中是元素原点步骤设置为表示 web 元素,且获取元素原点步骤 设置为 获取 WebElement 原点。
令 global key state 为使用 input state 获取 全局按键状态的结果。
如果 char 是shifted 字符, 且 source 的shifted 状态为 false:
如果 char 不是shifted 字符, 且 source 的shifted 状态为 true:
令 keydown action 为一个
使用参数 input id、"key"
和 "keyDown" 构造的操作对象。
将 keydown
action 的 value 属性设置为 char。
令 keyup action 为 keydown action 的副本,
其 subtype 属性改为 "keyUp"。
令 actions 为列表 «keydown action, keyup action»。
使用 input state、actions、browsing context 和 actions options 分派操作列表。
当要求在给定 type 和 cluster 以及 browsing context 的情况下分派 composition 事件时,远程端必须在 browsing context 上执行 实现特定的操作分派步骤,其等价于按照 [UI-EVENTS] 的要求发送 composition 事件, 并生成具有指定属性的以下事件。
composition event:
| 属性 | 值 |
|---|---|
type |
type |
data |
cluster |
为了在给定 input state、input id、source、 text、browsing context 和 actions options 时为字符串分派操作:
令 clusters 为通过将 text 分解为扩展字素簇创建的数组。
令 undo actions 为空映射。
令 current typeable text 为空列表。
对于 clusters 中与索引属性对应的每个 cluster, 运行第一个匹配语句的子步骤:
使用 input state、input id、source、current typeable text 和 browsing context 分派 可键入字符串的事件。 清空 current typeable text。
Try 使用 input state、input id、source、 undo actions 和 browsing context 清除修饰键 状态。
清除 undo actions。
使用 input state、input id、source、 current typeable text 和 browsing context 分派 可键入字符串的事件。
清空current typeable text。
令 keydown action 为一个
使用参数 input id、
"key" 和 "keyDown"
构造的操作对象。
将 keydown
action 的 value 属性设置为 cluster。
令 actions 为列表 «keydown action»
使用 input state、actions、browsing context 和 actions options 分派操作 列表。
向 undo actions 添加一个条目,
其键为 cluster,其值为 keydown
action 的副本,并将 subtype 属性修改为
"keyUp"。
将 cluster 追加到 current typeable text。
使用 input state、input id、source、 current typeable text 和 browsing context 分派 可键入字符串的事件。
清空 current typeable text。
使用参数 "compositionstart"、undefined
和 browsing context
分派
composition event。
使用参数
"compositionupdate"、cluster
和 browsing context
分派
composition event。
使用参数
"compositionend"、cluster
和 browsing context
分派
composition event。
使用 input state、input id 和 source、current typeable text 和 browsing context 分派可键入字符串的 事件。
Try 使用 input state、input id、source、 undo actions 和 browsing context 清除修饰键状态。
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 text 为从 parameters
获取名为属性 "text"
的结果。
如果 text 不是 String, 则返回一个错误,其错误码为 invalid argument。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session 和 URL variables[element id] trying 去获取已知元素的结果。
运行第一个匹配条件的子步骤:
令 files 为按换行符(\n)拆分 text
的结果。
如果 files 的长度为 0, 则返回一个错误,其错误码为 invalid argument。
令 multiple 等于在 element 上
使用 "multiple" 调用 hasAttribute()
的结果。
如果 multiple 是 false,且
files 的长度不等于 1,
则返回一个错误,其错误码为 invalid argument。
验证用户给定的每个文件是否存在。 如果有任何文件不存在,则返回错误, 其错误码为 invalid argument。
完成实现特定步骤,
其等价于在
input
元素上设置选定
文件。
如果 multiple 是 true,
则将 files 追加到 element 的选定文件中。
在 element 上按顺序触发这些事件:
如果 element 没有名为 value 的自身属性,
则返回一个错误,其错误
码为 element
not interactable
如果 element 不可变, 则返回一个错误,其错误码为 element not interactable。
在 element 上设置属性
value
为 text。
如果 element 遭受错误输入, 则返回一个错误,其错误码为 invalid argument。
令 input state 为使用 session 和 session 的当前顶级浏览 上下文获取输入 状态的结果。
令 input id 为生成 UUID的结果。
令 source 为使用 input state 和 "key"
创建输入
源的结果。
使用 input state、input id 和 source 添加输入源。
以 input state、input id 和 source、 text 以及 session 的当前浏览 上下文作为参数, 为字符串分派操作。
使用 input state 和 input id 移除输入源。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/source |
给定 session、URL variables 和 parameters 时,远程端步骤为:
集合是一个实现 Iterable 接口的Object, 且其满足:
toString 自身属性的初始值是 "Arguments"
Array 的实例
DOMTokenList 的实例
FileList 的实例
HTMLAllCollection 的实例
HTMLCollection 的实例
HTMLFormControlsCollection
的实例
HTMLOptionsCollection
的实例
NodeList 的实例
为了在给定 session、value 和可选参数 seen 时JSON 反序列化, 远程端必须运行以下 步骤:
如果未提供 seen, 则令 seen 为空List。
跳转到下面第一个适用的步骤:
对 value 进行匹配:
null
返回成功,其数据为 value。
返回 value 的反序列化shadow root。
返回 value 的反序列化web window。
为了在给定 session 和 value 时JSON 克隆, 返回使用 session、value 和空List 内部 JSON 克隆的结果。
为了在给定 session、value 和 seen 时进行内部 JSON 克隆, 对 value 进行匹配, 返回第一个匹配语句的值:
null
返回成功,其数据为 value。
Element 的实例
如果 element 已过时, 则返回错误,其错误码为 stale element reference。
否则:
令 reference 为 session 和 value 的web 元素引用对象。
返回成功,其数据为 reference。
ShadowRoot 的实例
如果 shadow root 已分离, 则返回错误,其错误码为 detached shadow root。
否则:
令 reference 为 session 和 value 的shadow root 引用对象。
返回成功,其数据为 reference。
WindowProxy 对象
如果 value 中
WindowProxy 对象的关联浏览上下文
已被销毁,
则返回错误,其错误码为 stale element reference。
否则:
令 reference 为
value 的WindowProxy 引用
对象。
返回成功,其数据为 reference。
toJSON"、且为
Function 的自身属性
toJSON)
返回的值。
令 result 为使用 session、 value 和 seen,并以内部 JSON 克隆 作为 clone algorithm, 克隆对象的结果。
为了给定 session、value、 seen 和 clone algorithm 来克隆对象:
如果 value 在 seen 中, 则返回错误,其错误码为 javascript error。
将 value 追加到 seen。
令 result 为第一个匹配语句的值, 对 value 进行匹配:
对于 value 中的每个可枚举属性, 运行以下子步骤:
令 name 为该属性的名称。
令 source property value 为从 value 获取名为 name 的属性的结果。 如果这样做导致脚本运行且该脚本抛出错误, 则返回错误,其错误 码为 javascript error。
令 cloned property result 为使用 session、 source property value 和 seen 调用 clone algorithm 的结果。
如果 cloned property result 是成功, 则用名称 name 和等于 cloned property result 的数据的值, 设置 result 的属性。
否则,返回 cloned property result。
移除 seen 的最后一个元素。
当要求用参数 parameters 从请求中提取脚本参数时, 实现必须:
令 script 为从 parameters
获取名为
"script" 的属性的结果。
如果 script 不是 String, 则返回错误,其错误码为 invalid argument。
令 args 为从 parameters
获取名为
"args" 的属性的结果。
如果 args 不是 Array,则返回错误, 其错误码为 invalid argument。
令 arguments 为使用 session 和 args JSON 反序列化的结果。
返回成功,其数据为 script 和 arguments。
执行函数体的规则如下。 该算法返回一个 ECMAScript 完成记录。
如果在算法执行期间的任何时刻出现用户提示,
则立即返回 Completion { [[Type]]: normal, [[Value]]: null,
[[Target]]: empty },但继续并行运行此算法的其他步骤。
令 environment settings 为 window 的相关设置对象。
如果 body 不能解析为 FunctionBody,
或者解析检测到早期错误,
则返回
Completion { [[Type]]: normal, [[Value]]: null, [[Target]]: empty }。
如果 body 以一个包含 use strict 指令的指令序言开头, 则令 strict 为 true, 否则令 strict 为 false。
使用 environment settings 准备运行脚本。
使用 environment settings 准备运行回调。
令 function 为调用 FunctionCreate 的结果,其参数为:
令 completion 为以 function 作为 this 值, 调用 Function.[[Call]](window, parameters) 的结果。
使用 environment settings 运行回调后清理。
使用 environment settings 运行脚本后清理。
返回 completion。
上述算法不与任何特定元素关联, 因此不受文档 CSP 指令约束。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/execute/sync |
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 body 和 arguments 为使用参数 parameters trying 去从请求中提取脚本 参数的结果。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 timer 为一个新的计时器。
如果 timeout 不为 null:
使用 timer 和 timeout 启动计时器。
令 promise 为一个新的 Promise。
并行运行以下子步骤:
令 scriptPromise 为带参数 body 和 arguments promise 调用 执行函数体的结果。
当 scriptPromise 以值 v 兑现时, 以值 v resolve promise。
当 scriptPromise 以值 r 拒绝时, 以值 r reject promise。
等待直到 promise 被解决, 或 timer 的timeout fired flag 被设置, 以先发生者为准。
如果 promise 仍处于待定状态,且 timer 的timeout fired flag 已设置, 则返回错误,其错误码为 script timeout。
如果 promise 以值 v 兑现, 则令 result 为使用 session 和 v 的JSON 克隆, 并返回成功,其 数据为 result。
如果 promise 以原因 r 被拒绝, 则令 result 为使用 session 和 r 的JSON 克隆, 并返回错误,其错误 码为 javascript error,且数据为 result。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/execute/async |
执行异步脚本命令 会使 JavaScript 作为匿名函数执行。 还会向该函数提供一个附加值作为最后一个参数。 这是一个可被调用以表示异步操作完成的函数。 提供给该函数的第一个参数会被序列化为 JSON,并由执行异步脚本返回。
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 body 和 arguments 为使用 参数 parameters trying 去 从请求中提取脚本 参数的结果。
如果 session 的当前浏览 上下文 不再打开,则返回错误,其错误 码为 no such window。
令 timer 为一个新的计时器。
如果 timeout 不为 null:
使用 timer 和 timeout 启动计时器。
令 promise 为一个新的 Promise。
并行运行以下子步骤:
令 resolvingFunctions 为 CreateResolvingFunctions(promise)。
将 resolvingFunctions.[[Resolve]] 追加到
arguments。
令 scriptResult 为用参数 body 和 arguments 调用 执行函数体的结果。
如果 scriptResult.[[Type]] 不是 normal,则以值
scriptResult.[[Value]]
reject
promise,并中止这些步骤。
本规范的先前修订没有识别所提供脚本的 返回值。为了保留遗留行为, 返回值只有在其为 "thenable" 对象,或判断这一点会产生异常时, 才会影响命令。
令 then 为 Get(scriptResult.[[Value]], "then")。
如果 then.[[Type]] 不是 normal,则以值
then.[[Value]]
reject
promise,并中止这些步骤。
如果 IsCallable(then.[[Type]]) 为
false,
则中止这些步骤。
令 scriptPromise 为 PromiseResolve(Promise, scriptResult.[[Value]])。
当 scriptPromise 以值 v 兑现时, 以值 v resolve promise。
当 scriptPromise 以值 r 拒绝时, 以值 r reject promise。
等待直到 promise 被解决, 或 timer 的timeout fired flag 被设置, 以先发生者为准。
如果 promise 仍处于待定状态,且 timer 的timeout fired flag 已设置, 则返回错误,其错误码为 script timeout。
如果 promise 以值 v 兑现, 则令 result 为使用 session 和 v 的JSON 克隆, 并返回成功,其 数据为 result。
如果 promise 以原因 r 被拒绝, 则令 result 为使用 session 和 r 的JSON 克隆, 并返回错误,其错误 码为 javascript error,且数据为 result。
Actions API 提供了一个低级接口, 用于向 Web 浏览器提供虚拟化设备输入。 从概念上说,Actions 命令将时间划分为一系列tick。 本地 端发送一系列操作, 这些操作对应于每个输入设备在每个tick期间状态的变化(如果有)。 例如,按下一个键 由一个操作序列表示, 该序列由一个按键输入设备和两个tick组成, 第一个包含一个 keyDown 操作, 第二个包含一个 keyUp 操作; 而捏合缩放输入则由一个操作序列表示, 该序列由三个tick 和两个类型为 touch 的指针输入设备组成, 每个设备都执行一系列操作:pointerDown, 后跟 pointerMove,然后是 pointerUp。
操作分派的配置由一个 操作 选项对象控制。它是一个结构,具有名为是 元素原点的字段,它是一组用于验证协议对象是否表示元素原点的步骤, 以及 获取元素 原点,它是一组 用于反序列化元素的步骤。
为了给定 session、origin 和 browsing context 来获取 WebElement 原点:,
输入源是一个提供输入 事件的虚拟设备。每个输入源都由一个特定于 该输入源类型的结构表示。 每个输入源都有一个input id,它作为键存储在输入状态映射中。
为了给定 input state、type 和可选的 subtype 来创建 输入源:
运行与 type 的第一个匹配值相匹配的子步骤:
none"
key"
pointer"
wheel"
null 输入 源是一个输入源, 不与特定物理设备关联。null 输入 源没有类型特定项,并支持 以下操作:
| 操作 | 非规范性描述 |
|---|---|
| pause | 与整数参数一起使用,以指定 一个tick的持续时间, 或作为占位符,用于指示某个输入 源在特定tick期间不执行任何操作。 |
为了创建 null 输入源,返回一个新的null 输入 源。
按键输入 源是一个输入源, 与键盘类型设备关联。
按键输入源具有以下项:
| 项 | 非规范性描述 | 默认值 |
|---|---|---|
| pressed | 表示当前按下按键的字符串集合。 | 空集合 |
| alt | 一个布尔值,指示 alt 修饰键是否被按下。 | False |
| ctrl | 一个布尔值,指示 ctrl 修饰键是否被按下。 | False |
| meta | 一个布尔值,指示 meta 修饰键是否被按下。 | False |
| shift | 一个布尔值,指示 shift 修饰键是否被按下。 | False |
按键输入源支持与null 输入源相同的 pause 操作, 以及以下操作:
| 操作 | 非规范性描述 |
|---|---|
| keyDown | 用于指示应按住某个特定按键。 |
| keyUp | 用于指示应释放一个已按下的按键。 |
为了创建按键输入源,返回一个新的按键 输入源,并将各项初始化为其默认值。
指针 输入源是一个输入源, 与指针类型输入设备关联。
指针输入源具有以下项:
| 项 | 非规范性描述 | 默认值 |
|---|---|---|
| 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的结果, 并将其他项设置为其默认值。
滚轮 输入源是一个输入源, 与滚轮类型输入设备关联。滚轮输入 源没有类型特定项,并支持与null 输入 源相同的 pause 操作,以及以下操作:
| 操作 | 非规范性描述 |
|---|---|
| scroll | 用于指示滚轮向下、向上、向右或向左滚动, 以使页面向下、向上、向右或向左滚动。 |
为了创建滚轮输入源,返回一个新的滚轮 输入源。
为了给定 session 和 browsing context 来获取 输入状态:
断言:browsing context 是顶级浏览 上下文。
令 input state map 为 session 的浏览上下文 输入状态映射。
如果 input state map 不 包含 browsing context,则将 input state map[browsing context] 设置为创建输入 状态的结果。
返回 input state map[browsing context]。
为了给定 session 和 browsing context 来重置 输入状态:
断言:browsing context 是顶级浏览 上下文。
令 input state map 为 session 的浏览上下文 输入状态映射。
如果 input state map[browsing context] 存在,则移除 input state map[browsing context]。
为了创建 输入状态:
为了给定 input state、 input id 和 source 来添加输入 源:
令 input state map 为 input state 的输入状态映射。
为了给定 input state 和 input id 来移除输入 源:
断言:input state 的输入取消列表中的任何项都没有等于 input id 的 id。
令 input state map 为 input state 的输入状态映射。
为了给定 input state 和 input id 来获取输入 源:
令 input state map 为 input state 的输入状态映射。
如果 input state map[input id] 存在, 返回 input state map[input id]。
返回 undefined。
为了给定 input state、type、input id 和 可选的 subtype 来获取或创建输入源:
令 source 为用 input state 和 input id 获取输入源的结果。
如果 source 不是 undefined 且 source 的 type 不等于 type,或者 source 是 指针输入源,则返回错误,其错误 码为 invalid argument。
如果 source 为 undefined,则将 source 设置为 使用 input state 和 type trying 去创建输入 源的结果。
返回成功,其数据为 source。
全局按键 状态是一个结构,其项为 pressed、 altKey、ctrlKey、metaKey 和 shiftKey。
为了给定 input state 来获取 全局按键状态:
令 input state map 为 input state 的输入状态映射。
令 sources 为使用 input state map 获取值的结果。
令 key state 为一个新的全局按键状态,
其 pressed 设置为空集合,
altKey、ctrlKey、metaKey
和 shiftKey 设置为 false。
对于 sources 中的每个 source:
如果 source 不是按键输入源, 则继续此循环的第一步。
将 key state 的 pressed 项设置为
其当前值与 source 的 pressed 项的并集。
如果 source 的 alt 项为 true,
则将 key state 的 altKey 项设置为 true。
如果 source 的 ctrl 项为 true,
则将 key state 的 ctrlKey 项设置为 true。
如果 source 的 meta 项为 true,
则将 key state 的 metaKey 项设置为 true。
如果 source 的 shift 项为 true,
则将 key state 的 shiftKey 项设置为 true。
返回 key state。
为了给定 input state 和 subtype 来获取指针 id:
tick 是可以执行操作的基本时间单位。在一个tick期间,每个输入源都有 一个被分配的操作——可能是一个 noop pause 操作——该操作可能 导致用户代理内部状态发生变化,并最终 导致 DOM 事件在页面上被触发。下一个tick会在 用户代理有机会处理当前tick中生成的所有 DOM 事件之后开始。
异步 等待是指在等待某事发生的同时, 允许浏览器继续处理 事件循环。
在最低层面,操作的行为旨在尽可能接近地模拟 远程端使用真实输入设备时的行为, 并且实现策略可能涉及例如将合成事件注入到浏览器事件 循环中。因此,分派操作的步骤不可避免地 会进入实现特定的领域。不过,仍有某些 内容可观察效果必须在各实现之间保持一致。 为了适应这一点,本规范要求 远程端在浏览上下文 context 以及一个 list of events 及其属性上执行实现特定的操作 分派步骤。这些步骤 必须等价于在 context 上执行给定的输入设备操作, 使得与 list of events 中各条目对应的受信任事件被分派。
从请求中提取 操作序列的算法会接受 表示操作序列的 JSON Object,验证 输入,并返回一个作为输入 JSON 转置的数据结构, 使得要在单个tick 中执行的操作会被分组在一起。
为了给定 source、x offset、y offset、 origin、browsing context 和 actions options 来获取相对于原点的坐标:
运行 origin 的第一个匹配值的子步骤:
viewport"
令 x 等于 x offset, 令 y 等于 y offset。
pointer"
令 start x 等于 source 的 x
属性。
令 start y 等于 source 的 y
属性。
令 x 等于 start x + x offset,令 y 等于 start y + y offset。
返回 (x, y)
为了给定 input state、parameters 和 actions options 来提取操作序列:
令 actions 为从 parameters 中
获取名为
"actions" 的属性的结果。
如果 actions 是 undefined 或不是 Array,则返回错误,其错误 码为 invalid argument。
令 actions by tick 为空List。
对于 actions 中与索引属性对应的每个值 action sequence:
返回成功,其数据为 actions by tick。
当要求给定 input state、action sequence 和 actions options 处理输入源操作 序列时,远程端 必须:
令 type 为从 action sequence
获取名为
"type" 的属性的结果。
如果 type 不是
"key"、"pointer"、
"wheel" 或 "none",
则返回一个错误,其
错误码为 invalid
argument。
令 id 为从
action sequence
获取 "id" 属性的结果。
如果 id 是 undefined 或不是 String, 则返回错误,其错误码为 invalid argument。
如果 type 等于 "pointer",
则令 parameters data 为从 action sequence
获取 "parameters"
属性的结果。
然后令 parameters 为以 parameters data
作为参数
trying
去处理指针参数的结果。
令 source 为给定 input state、type 和 id trying to 获取或 创建输入源的结果。
如果 parameters 不是 undefined,
则如果其 pointerType 属性不等于
source 的 subtype 属性,返回一个错误,
其错误码为 invalid
argument。
令 action items 为从
action sequence 获取名为
"actions" 的属性的结果。
如果 action items 不是 Array, 则返回错误,其错误码为 invalid argument。
令 actions 为一个新的列表。
对于 action items 中的每个 action item:
如果 action item 不是Object, 则返回错误,其错误 码为 invalid argument。
如果 type 是 "none",
则令 action 为以 id 和
action item 作为参数,
trying 去处理
null 操作的结果。
否则,如果 type 是 "key",
则令 action 为以 id 和
action item 作为参数,
trying 去处理
按键操作的结果。
否则,如果 type 是 "pointer",
则令 action 为以 id、
parameters、action item 和 actions
options 作为参数,
trying 去处理
指针操作的结果。
否则,如果 type 是 "wheel",
则令 action 为以 id、
action item 和 actions options 作为参数,
trying 去处理
滚轮操作的结果。
将 action 追加到 actions。
返回成功,其数据为 actions。
默认指针参数由一个对象组成,
该对象的属性 pointerType 设置为 mouse。
为了给定 parameters data 来处理指针参数:
令 parameters 为默认指针 参数。
如果 parameters data 不是Object, 则返回错误,其错误码为 invalid argument。
令 pointer type 为从 parameters data
获取名为
"pointerType" 的属性的结果。
如果 pointer type 不是 undefined:
如果 pointer type 不具有以下值之一:
"mouse"、
"pen"
或 "touch",
则返回错误,其错误
码为 invalid argument。
将 parameters 的 pointerType 属性
设置为 pointer type。
返回成功,其数据为 parameters。
使用参数 id、type 和 subtype 构造的 操作对象是 一个对象,其属性 id 设置为 id,type 设置为 type,subtype 设置 为 subtype。具体的操作对象会由本规范中的其他算法 添加更多属性。
为了给定 id 和 action item 来处理 null 操作:
令 subtype 为从 action item
获取名为
"type" 的属性的结果。
如果 subtype 不是 "pause",
则返回错误,其错误码为 invalid argument。
令 action 为一个使用参数
id、
"none"
和 subtype 构造的操作对象。
令 result 为以 action item 和 action 作为参数, trying 去处理 pause 操作的结果。
返回 result。
为了给定 id 和 action item 来处理 按键操作:
令 subtype 为从 action item
获取名为
"type" 的属性的结果。
如果 subtype 不是以下值之一:
"keyUp"、
"keyDown"
或 "pause",
则返回一个错误,其错误码为 invalid argument。
令 action 为一个使用参数
id、
"key"
和 subtype 构造的操作对象。
如果 subtype 是 "pause",
则令 result 为以
action item 和 action 作为参数
trying
去处理
pause 操作的结果,
并返回 result。
令 key 为从 action item
获取名为
"value" 的属性的结果。
如果 key 不是一个包含单个unicode 码点的 String 还是字素簇? 则返回错误,其错误码为 invalid argument。
将 action 上的 value 属性设置为 key。
返回成功,其数据为 action。
为了给定 id、 parameters、action item 和 action options 来处理 指针操作:
令 subtype 为从 action item
获取名为 "type"
的属性的结果。
如果 subtype 不是以下值之一:
"pause"、
"pointerUp"、
"pointerDown"、
"pointerMove"
或 "pointerCancel",
则返回一个错误,其错误码为 invalid argument。
令 action 为一个使用参数
id、
"pointer"
和 subtype 构造的操作对象。
如果 subtype 是 "pause",
则令 result 为以
action item、action 和 actions
options 作为参数,
trying
去
处理 pause 操作的结果,
并返回 result。
将 action 的 pointerType 属性设置为
等于 parameters 的 pointerType 属性。
如果 subtype 是 "pointerUp" 或 "pointerDown",
则以 action item 和 action 作为参数
处理
pointer up 或 pointer down 操作。
如果这样做产生错误,则返回该错误。
如果 subtype 是 "pointerMove",
则以
action item、action 和 actions
options 作为参数
处理 pointer move 操作。
如果这样做产生错误,则返回
该错误。
如果 subtype 是 "pointerCancel",
处理 pointer cancel 操作。
如果这样做产生错误,则返回该错误。
返回成功,其数据为 action。
为了给定 id、action item 和 actions options 来处理 滚轮操作:
令 subtype 为从 action item
获取名为 "type"
的属性的结果。
如果 subtype 不是值
"pause" 或
"scroll",
则返回一个错误,其错误码为 invalid argument。
令 action 为一个使用参数
id、
"wheel"
和 subtype 构造的操作对象。
如果 subtype 是 "pause",
则令 result 为以
action item 和 action 作为参数,
trying
去
处理 pause 操作的结果,
并返回 result。
令 duration 为从 action item
获取名为
"duration" 的属性的结果。
如果 duration 不是 undefined,且 duration 不是大于或等于 0 的Integer,则返回错误, 其错误码为 invalid argument。
将 action 的 duration 属性
设置为 duration。
令 origin 为从 action item
获取
origin 属性的结果。
如果 origin 是 undefined,则令
origin 等于 "viewport"。
如果 origin 不等于 "viewport",
或 actions options 的是元素原点步骤在给定
origin 时返回 false,则返回错误,其
错误码为 invalid
argument。
将 action 的 origin 属性
设置为 origin。
令 x 为从 action item
获取
x 属性的结果。
如果 x 不是Integer,则返回错误, 其错误码为 invalid argument。
将 action 的 x 属性设置为 x。
令 y 为从 action item
获取
y 属性的结果。
如果 y 不是Integer,则返回错误, 其错误码为 invalid argument。
将 action 的 y 属性设置为 y。
令 deltaX 为从 action item
获取
deltaX 属性的结果。
如果 deltaX 不是Integer, 则返回错误,其错误码为 invalid argument。
将 action 的 deltaX 属性设置为 deltaX。
令 deltaY 为从 action item
获取
deltaY 属性的结果。
如果 deltaY 不是Integer, 则返回错误,其错误码为 invalid argument。
将 action 的 deltaY 属性设置为 deltaY。
返回成功,其数据为 action。
为了给定 action item 和 action 来处理 pause 操作:
令 duration 为从 action item
获取
"duration" 属性的结果。
如果 duration 不是 undefined 且 duration 不是大于或等于 0 的Integer, 则返回错误,其错误码为 invalid argument。
将 action 的 duration 属性
设置为 duration。
返回成功,其数据为 action。
为了给定 action item 和 action 处理 pointer up 或 pointer down 操作:
令 button 为从 action item
获取 button 属性的结果。
如果 button 不是大于或等于 0 的Integer,则返回错误,其错误码 为 invalid argument。
将 action 的 button 属性
设置为 button。
令 width 为从 action item
获取 width 属性的结果。
如果 width 不是 undefined 且 width 不是大于或等于 0 的Number,则返回错误,其错误码 为 invalid argument。
将 action 的 width 属性
设置为 width。
令 height 为从 action item
获取 height 属性的结果。
如果 height 不是 undefined 且 height 不是大于或等于 0 的Number,则返回错误,其错误码 为 invalid argument。
将 action 的 height 属性
设置为 height。
令 pressure 为从 action item
获取 pressure 属性的结果。
如果 pressure 不是 undefined 且 pressure 不是大于或等于 0 且小于或等于 1 的Number,则返回错误,其 错误码为 invalid argument。
将 action 的 pressure 属性
设置为 pressure。
令 tangentialPressure 为从 action item
获取 tangentialPressure 属性的结果。
如果 tangentialPressure 不是 undefined 且 tangentialPressure 不是大于或等于 -1 且小于或等于 1 的Number,则返回错误, 其错误码为 invalid argument。
将 action 的 tangentialPressure 属性
设置为 tangentialPressure。
令 tiltX 为从 action item
获取 tiltX 属性的结果。
如果 tiltX 不是 undefined 且 tiltX 不是大于或等于 -90 且小于或等于 90 的Integer,则返回错误,其 错误码为 invalid argument。
将 action 的 tiltX 属性
设置为 tiltX。
令 tiltY 为从 action item
获取 tiltY 属性的结果。
如果 tiltY 不是 undefined 且 tiltY 不是大于或等于 -90 且小于或等于 90 的Integer,则返回错误,其 错误码为 invalid argument。
将 action 的 tiltY 属性
设置为 tiltY。
令 twist 为从 action item
获取 twist 属性的结果。
如果 twist 不是 undefined 且 twist 不是大于或等于 0 且小于或等于 359 的Integer,则返回错误,其 错误码为 invalid argument。
将 action 的 twist 属性
设置为 twist。
令 altitudeAngle 为从 action item
获取 altitudeAngle 属性的结果。
如果 altitudeAngle 不是 undefined 且 altitudeAngle 不是大于或等于 0 且小于或等于 π/2 的Number,则返回错误,其 错误码为 invalid argument。
将 action 的 altitudeAngle 属性
设置为 altitudeAngle。
令 azimuthAngle 为从 action item
获取 azimuthAngle 属性的结果。
如果 azimuthAngle 不是 undefined 且 azimuthAngle 不是大于或等于 0 且小于或等于 2π 的Number,则返回错误,其 错误码为 invalid argument。
将 action 的 azimuthAngle 属性
设置为 azimuthAngle。
返回成功,其数据为 null。
为了给定 action item、action 和 actions options 来处理 pointer move 操作:
令 duration 为从 action item
获取 duration 属性的结果。
如果 duration 不是 undefined 且 duration 不是大于或等于 0 的Integer, 则返回错误,其错误码为 invalid argument。
将 action 的 duration 属性
设置为 duration。
令 origin 为从 action item
获取 origin
属性的结果。
如果 origin 是 undefined,则令
origin 等于 "viewport"。
如果 origin 不等于 "viewport"
或 "pointer",且给定 origin 时,
actions options 的是
元素原点步骤返回 false,
则返回错误,其错误码为 invalid argument。
将 action 的 origin 属性
设置为 origin。
令 x 为从 action item
获取 x
属性的结果。
如果 x 不是Number,则返回错误, 其错误码为 invalid argument。
将 action 的 x 属性
设置为 x。
令 y 为从 action item
获取 y
属性的结果。
如果 y 不是Number,则返回错误, 其错误码为 invalid argument。
将 action 的 y 属性
设置为 y。
令 width 为从 action item
获取 width 属性的结果。
如果 width 不是 undefined 且 width 不是大于或等于 0 的Number,则返回错误,其错误码 为 invalid argument。
将 action 的 width 属性
设置为 width。
令 height 为从 action item
获取 height 属性的结果。
如果 height 不是 undefined 且 height 不是大于或等于 0 的Number,则返回错误,其错误码 为 invalid argument。
将 action 的 height 属性
设置为 height。
令 pressure 为从 action item
获取 pressure 属性的结果。
如果 pressure 不是 undefined 且 pressure 不是大于或等于 0 且小于或等于 1 的Number,则返回错误,其 错误码为 invalid argument。
将 action 的 pressure 属性
设置为 pressure。
令 tangentialPressure 为从 action item
获取 tangentialPressure 属性的结果。
如果 tangentialPressure 不是 undefined 且 tangentialPressure 不是大于或等于 -1 且小于或等于 1 的Number,则返回错误, 其错误码为 invalid argument。
将 action 的 tangentialPressure 属性
设置为 tangentialPressure。
令 tiltX 为从 action item
获取 tiltX 属性的结果。
如果 tiltX 不是 undefined 且 tiltX 不是大于或等于 -90 且小于或等于 90 的Integer,则返回错误,其 错误码为 invalid argument。
将 action 的 tiltX 属性
设置为 tiltX。
令 tiltY 为从 action item
获取 tiltY 属性的结果。
如果 tiltY 不是 undefined 且 tiltY 不是大于或等于 -90 且小于或等于 90 的Integer,则返回错误,其 错误码为 invalid argument。
将 action 的 tiltY 属性
设置为 tiltY。
令 twist 为从 action item
获取 twist 属性的结果。
如果 twist 不是 undefined 且 twist 不是大于或等于 0 且小于或等于 359 的Integer,则返回错误,其 错误码为 invalid argument。
将 action 的 twist 属性
设置为 twist。
令 altitudeAngle 为从 action item
获取 altitudeAngle 属性的结果。
如果 altitudeAngle 不是 undefined 且 altitudeAngle 不是大于或等于 0 且小于或等于 π/2 的Number,则返回错误,其 错误码为 invalid argument。
将 action 的 altitudeAngle 属性
设置为 altitudeAngle。
令 azimuthAngle 为从 action item
获取 azimuthAngle 属性的结果。
如果 azimuthAngle 不是 undefined 且 azimuthAngle 不是大于或等于 0 且小于或等于 2π 的Number,则返回错误,其 错误码为 invalid argument。
将 action 的 azimuthAngle 属性
设置为 azimuthAngle。
返回成功,其数据为 null。
分派操作算法接受一个按 tick 分组的操作列表,然后使每个操作在序列中 适当的点运行。
为了给定 input state 来等待操作队列令牌:
为了给定 input state、actions by tick、browsing context 和 actions options 来分派 操作:
使用 input state 等待操作队列令牌。
令 actions result 为使用 input state、actions by tick、browsing context 和 actions options 内部分派操作的结果。
从 input state 的操作队列出队。
断言:这会返回 token
返回 actions result。
为了给定 input state、actions by tick、browsing context 和 actions options 来内部 分派操作:
对于 actions by tick 中的每个项 tick actions:
令 tick duration 为以 tick actions 为参数 计算 tick 持续时间的结果。
Try 使用 input state、tick actions、tick duration、 browsing context 和 actions options 分派 tick 操作。
等待直到以下条件全部满足:
不存在由上一次调用分派 tick 操作 步骤产生的待处理异步 等待。
用户代理事件循环已转动足够次数, 以处理由上一次调用 分派 tick 操作步骤生成的 DOM 事件。
至少已经过 tick duration 毫秒。
返回成功,其数据为 null。
为了给定 tick actions 计算 tick 持续时间:
令 max duration 为 0。
对于 tick actions 中的每个 action object:
令 duration 为 undefined。
如果 action object 的 subtype 属性设置为
"pause",或者 action object 的 type 属性
设置为 "pointer" 且 subtype 属性设置为
"pointerMove",或者 action object 的 type
属性设置为 "wheel" 且 subtype 属性设置为
"scroll",则令 duration 等于
action object 的 duration 属性。
如果 duration 不是 undefined, 且 duration 大于 max duration, 则令 max duration 等于 duration。
返回 max duration。
为了给定 input state、tick actions、tick duration、 browsing context 和 actions options 来分派 tick 操作:
对于 tick actions 中的每个 action object:
令 input id 等于 action object 的 id 属性的值。
令 source type 等于 action object 的 type 属性的值。
令 source 为给定 input state 和 input id 获取 输入 源的结果。
断言:source 不是 undefined。
令 global key state 为使用 input state 获取 全局按键状态的结果。
令 subtype 为 action object 的 subtype。
令 algorithm 为下表中 source type 列为 source type 且 subtype 列等于 subtype 的行的 dispatch action algorithm 列的值。
| source type | subtype | 分派操作算法 |
|---|---|---|
"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 操作 |
如果 subtype 是 "keyDown",则将
action object 的副本(其 subtype
属性改为 "keyUp")追加到 input
state 的输入取消列表。
如果 subtype 是 "pointerDown",则将
action object 的副本(其 subtype
属性改为 "pointerUp")追加到 input
state 的输入取消列表。
为了给定 input state、actions、browsing context 和 actions options 来分派操作列表:
令 tick actions 为列表 «actions»
令 actions by tick 为列表 «tick actions»。
返回使用 input state、actions by tick、browsing context 和 actions options 分派操作的结果。
为了给定 action object、source、global key state、tick duration、 browsing context 和 actions options 来分派 pause 操作:
原始按键 key 的规范化按键值 是:如果 key 出现在下表中,则为包含 key 的 unicode 码点的行中第二列的字符串值,否则为 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 是下表中第一列或第二列中包含 key 的行的最后一列中的值, 如果存在这样的行; 否则为 undefined。
shifted 字符 是指出现在下表第二列中的字符。
| Key | Alternate Key | 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" |
The 按键
位置 for key 是下表中第一列出现 key 的行的
最后一列中的值,如果存在这样的行;否则
为 0。
| key 的码点 | 描述 | 位置 |
|---|---|---|
\uE007 |
Enter | 1 |
\uE008 |
Left Shift | 1 |
\uE009 |
Left Control | 1 |
\uE00A |
Left Alt | 1 |
\uE019 |
Numpad = | 3 |
\uE01A |
Numpad 0 | 3 |
\uE01B |
Numpad 1 | 3 |
\uE01C |
Numpad 2 | 3 |
\uE01D |
Numpad 3 | 3 |
\uE01E |
Numpad 4 | 3 |
\uE01F |
Numpad 5 | 3 |
\uE020 |
Numpad 6 | 3 |
\uE021 |
Numpad 7 | 3 |
\uE022 |
Numpad 8 | 3 |
\uE023 |
Numpad 9 | 3 |
\uE024 |
Numpad * | 3 |
\uE025 |
Numpad + | 3 |
\uE026 |
Numpad , | 3 |
\uE027 |
Numpad - | 3 |
\uE028 |
Numpad . | 3 |
\uE029 |
Numpad / | 3 |
\uE03D |
Left Meta | 1 |
\uE050 |
Right Shift | 2 |
\uE051 |
Right Control | 2 |
\uE052 |
Right Alt | 2 |
\uE053 |
Right Meta | 2 |
\uE054 |
Numpad PageUp | 3 |
\uE055 |
Numpad PageDown | 3 |
\uE056 |
Numpad End | 3 |
\uE057 |
Numpad Home | 3 |
\uE058 |
Numpad ArrowLeft | 3 |
\uE059 |
Numpad ArrowUp | 3 |
\uE05A |
Numpad ArrowRight | 3 |
\uE05B |
Numpad ArrowDown | 3 |
\uE05C |
Numpad Insert | 3 |
\uE05D |
Numpad Delete | 3 |
为了给定 action object、source、global key state、tick duration、browsing context 和 actions options 来分派 keyDown 操作:
令 raw key 等于
action object 的 value 属性。
令 key 等于 raw key 的规范化按键值。
如果 source 的 pressed 属性
包含 key,则令 repeat 为 true,否则
令 repeat 为 false。
令 code 为 raw key 的code。
令 location 为 raw key 的按键位置。
令 charCode、keyCode
和 which 为 charCode、keyCode
和 which 属性的实现特定值,
这些值适合 102 键美式键盘上具有
key key 和 location location 的按键,
并遵循 [UI-EVENTS] 中的指导。
如果 key 是 "Alt",则令
source 的 alt 属性为 true。
如果 key 是 "Shift",则令
source 的 shift 属性为 true。
如果 key 是 "Control",则令
source 的 ctrl 属性为 true。
如果 key 是 "Meta",则令
source 的 meta 属性为 true。
将 key 添加到 source 的 pressed
属性。
在 browsing context 上执行
实现特定的操作分派步骤,
等价于按照 [UI-EVENTS] 的要求按下键盘上的一个键,
并在适当时产生以下事件以及指定属性。这总会产生至少包含
一个 keyDown 事件在内的事件。
keyDown
及其属性:
| 属性 | 值 |
|---|---|
key |
key |
code |
code |
location |
location |
altKey |
source 的 alt 属性
|
shiftKey |
source 的 shift 属性
|
ctrlKey |
source 的 ctrl 属性
|
metaKey |
source 的 meta 属性
|
repeat |
repeat |
isComposing |
false |
charCode |
charCode |
keyCode |
keyCode |
which |
which |
keyPress
及其属性:
| 属性 | 值 |
|---|---|
key |
key |
code |
code |
location |
location |
altKey |
source 的 alt 属性
|
shiftKey |
source 的 shift 属性
|
ctrlKey |
source 的 ctrl 属性
|
metaKey |
source 的 meta 属性
|
repeat |
repeat |
isComposing |
false |
charCode |
charCode |
keyCode |
keyCode |
which |
which |
为了给定 action object、source、global key state、 tick duration、browsing context 和 actions options 来分派 keyUp 操作:
令 raw key 等于
action object 的 value 属性。
令 key 等于 raw key 的 规范化按键值。
如果 source 的 pressed 项
不包含 key,则返回。
令 code 为 raw key 的code。
令 location 为 raw key 的按键位置。
令 charCode、keyCode
和 which 为 charCode、keyCode
和 which 属性的实现特定值,
这些值适合 102 键美式键盘上具有
key key 和 location location 的按键,
并遵循 [UI-EVENTS] 中的指导。
如果 key 是 "Alt",则令
source 的 alt 属性为 false。
如果 key 是 "Shift",则令
source 的 shift 属性为 false。
如果 key 是 "Control",则令
source 的 ctrl 属性为 false。
如果 key 是 "Meta",则令
source 的 meta 属性为 false。
从 sources 的 pressed 属性中移除
key。
在 browsing context 上执行 实现特定的操作分派步骤, 等价于按照 [UI-EVENTS] 的要求释放键盘上的一个键, 并产生至少以下事件以及指定属性:
keyup,
及其属性:
| 属性 | 值 |
|---|---|
key |
key |
code |
code |
location |
location |
altKey |
source 的 altKey 属性 |
shiftKey |
source 的 shift 属性 |
ctrlKey |
source 的 ctrl 属性 |
metaKey |
source 的 meta 属性 |
repeat |
false |
isComposing |
false |
charCode |
charCode |
keyCode |
keyCode |
which |
which |
为了给定 action object、source、global key state、tick duration、browsing context 和 actions options 来分派 pointerDown 操作:
令 pointerType 等于
action object 的 pointerType 属性。
令 button 等于
action object 的 button 属性。
令 x 等于 source 的
x 属性。
令 y 等于 source 的
y 属性。
将 button 添加到与
source 的 pressed 属性对应的集合中,并
令 buttons 为该属性所得的值。
令 width 等于 action object 的
width 属性。
令 height 等于 action object 的
height 属性。
令 pressure 等于 action object 的
pressure 属性。
令 tangentialPressure 等于
action object 的 tangentialPressure 属性。
令 tiltX 等于 action object 的
tiltX 属性。
令 tiltY 等于 action object 的
tiltY 属性。
令 twist 等于 action object 的
twist 属性。
令 altitudeAngle 等于 action object 的
altitudeAngle 属性。
令 azimuthAngle 等于 action object 的
azimuthAngle 属性。
在 browsing context 上执行实现特定的操作分派步骤,
等价于按下 pointerId 等于 source 的 pointerId、
类型为 pointerType 的指针上编号为 button 的按钮,
该指针位于视口 x 坐标 x、
视口 y 坐标 y,具有 width、height、
pressure、tangentialPressure、tiltX、
tiltY、twist、altitudeAngle、
azimuthAngle,并按下 buttons 按钮,
且符合 [UI-EVENTS] 和
[POINTER-EVENTS] 的要求。将 ctrlKey、
shiftKey、
altKey 和 metaKey 设置为
global key state 中对应项的值。未通过
webdriver API 暴露的指针类型特定属性必须设置为
不支持该属性的硬件所指定的默认值。
为了给定 action object、source、global key state、tick duration、browsing context 和 actions options 来分派 pointerUp 操作:
令 pointerType 等于
action object 的 pointerType 属性。
令 button 等于
action object 的 button 属性。
令 x 等于 source 的
x 属性。
令 y 等于 source 的
y 属性。
从与 source 的 pressed 属性对应的集合中
移除 button,并令 buttons 为该
属性所得的值。
在 browsing context 上执行实现特定的操作分派步骤,
等价于释放 pointerId 等于 input source 的 pointerId、
类型为 pointerType 的指针上编号为 button 的按钮,
该指针位于视口 x 坐标 x、
视口 y 坐标 y,并按下 buttons 按钮,
且符合 [UI-EVENTS] 和
[POINTER-EVENTS] 的要求。生成的事件必须
将 ctrlKey、shiftKey、
altKey 和 metaKey 设置为
global key state 中对应项的值。未通过
webdriver API 暴露的指针类型特定属性必须设置为
不支持该属性的硬件所指定的默认值。
为了给定 action object、source、global key state、 tick duration、browsing context 和 actions options 来分派 pointerMove 操作:
令 x offset 等于 action object 的
x 属性。
令 y offset 等于 action object 的
y 属性。
令 origin 等于 action object 的
origin 属性。
令 (x, y) 为使用 source、x offset、y offset、 origin、browsing context 和 actions options trying 去获取 相对于原点的坐标的结果。
如果 x 小于 0 或大于以 CSS 像素表示的视口宽度,则返回错误,其 错误码为 move target out of bounds。
如果 y 小于 0 或大于以 CSS 像素表示的视口高度,则 返回错误,其错误码为 move target out of bounds。
如果 action object 的 duration 属性
不是 undefined,则令 duration 等于它;
否则令 duration 等于 tick duration。
如果 duration 大于 0 且处于任何 实现定义的边界内,则异步等待一段 实现定义的时间经过。
令 width 等于 action object 的
width 属性。
令 height 等于 action object 的
height 属性。
令 pressure 等于 action object 的
pressure 属性。
令 tangentialPressure 等于
action object 的 tangentialPressure 属性。
令 tiltX 等于 action object 的
tiltX 属性。
令 tiltY 等于 action object 的
tiltY 属性。
令 twist 等于 action object 的
twist 属性。
令 altitudeAngle 等于 action object 的
altitudeAngle 属性。
令 azimuthAngle 等于 action object 的
azimuthAngle 属性。
使用参数 source、global key state、duration、 start x、start y、x、y、 width、height、pressure、 tangentialPressure、tiltX、tiltY、 twist、altitudeAngle、azimuthAngle 执行 pointer move。
为了给定 source、 global key state、duration、start x、 start y、target x、target y、width、 height、pressure、tangentialPressure、 tiltX、tiltY、twist、altitudeAngle 和 azimuthAngle 来执行 pointer move:
令 time delta 为自当前 tick 开始以来的时间,以单调时钟上的毫秒数度量。
如果 duration 大于 0,则令 duration ratio 为 time delta 与 duration 的比值; 否则为 1。
如果 duration ratio 为 1,或者足够接近 1 以至于
实现不会进一步细分 move 操作,
则令 last 为 true。否则令 last
为 false。
如果 last 为 true,则令 x 等于 target x 且 y 等于 target y。
否则令 x 等于 duration ratio × (target x - start x) + start x 的近似值,并令 y 等于 duration ratio × (target y - start y) + start y 的近似值。
令 current x 等于 input state 的
x 属性。
令 current y 等于 input state 的
y 属性。
如果 x 不等于 current x 或 y 不等于 current y,则运行以下步骤:
令 buttons 等于 input
state 的 buttons 属性。
在 browsing context 上执行
实现特定的操作分派步骤,
等价于移动 pointerId 等于 input source 的 pointerId、
类型为 pointerType 的指针,从视口 x
坐标 current x、视口 y
坐标 current y 移动到视口 x
坐标 x 和视口 y
坐标 y,具有 width、height、
pressure、tangentialPressure、tiltX、
tiltY、twist、altitudeAngle、
azimuthAngle,并按下
buttons 按钮,且符合
[UI-EVENTS] 和 [POINTER-EVENTS] 的要求。生成的
事件必须将 ctrlKey、shiftKey、
altKey 和 metaKey 设置为
global key state 中对应项的值。未通过
WebDriver API 暴露的指针类型特定属性必须设置为
不支持该属性的硬件所指定的默认值。在
pointerType 为 "pen" 或
"touch" 且 buttons 为空的情况下,这可能是
no-op。对于类型为 "mouse" 的指针,这将
始终产生至少包含
一个 pointerMove 事件在内的事件。
令 input state 的 x 属性
等于 x,并令 y 属性
等于 y。
如果 last 为 true,则返回。
并行运行以下子步骤:
异步等待一段 实现定义的时间经过。
使用参数 input state、duration、 start x、start y、target x、 target y 执行 pointer move。
为了给定 action object、source、global key state、 tick duration、browsing context 和 actions options 来分派 pointerCancel 操作:
在 browsing context 上执行 实现特定的操作分派步骤, 等价于取消 pointerId 等于 source 的 pointerId 项、类型为 pointerType 的指针的任何操作, 且符合 [UI-EVENTS] 和 [POINTER-EVENTS] 的要求。
为了给定 action object、source、global key state、 tick duration、browsing context 和 actions options 来分派 scroll 操作:
令 x offset 等于 action object 的
x 属性。
令 y offset 等于 action object 的
y 属性。
令 origin 等于 action object 的
origin 属性。
令 (x, y) 为使用 source、x offset、y offset、 origin、browsing context 和 actions options trying 去获取 相对于原点的坐标的结果。
如果 x 小于 0 或大于以 CSS 像素表示的视口宽度,则 返回错误,其错误码为 move target out of bounds。
如果 y 小于 0 或大于以 CSS 像素表示的视口高度,则 返回错误,其错误码为 move target out of bounds。
令 delta x 等于 action object 的 deltaX
属性。
令 delta y 等于 action object 的 deltaY
属性。
如果 action object 的 duration 属性
不是 undefined,则令 duration 等于它;
否则令 duration 等于 tick duration。
如果 duration 大于 0 且处于任何 实现定义的边界内,则异步等待一段 实现定义的时间经过。
使用参数 global key state、duration、 x、y、delta x、delta y、 0、0 执行 scroll。
为了给定 duration、x、y、 target delta x、target delta y、 current delta x 和 current delta y 来执行 scroll:
令 time delta 为自当前 tick 开始以来的时间,以单调时钟上的毫秒数度量。
如果 duration 大于 0,则令 duration ratio 为 time delta 与 duration 的比值; 否则为 1。
如果 duration ratio 为 1,或者足够接近 1 以至于
实现不会进一步细分 move 操作,
则令 last 为 true。否则令 last
为 false。
如果 last 为 true,则令 delta x 等于 target delta x - current delta x,并令 delta y 等于 target delta y - current delta y。
否则令 delta x 等于 duration ratio × target delta x - current delta x 的近似值, 并令 delta y 等于 duration ratio × target delta y - current delta y 的近似值。
如果 delta x 不等于 0 或 delta y 不等于 0, 则运行以下步骤:
在 browsing context 上执行
实现特定的操作分派步骤,
等价于在视口 x 坐标 x、视口 y
坐标 y 处进行滚轮滚动,deltaX 值为
delta x,deltaY 值为 delta y,
且符合 [UI-EVENTS] 的要求。生成的事件必须
将 ctrlKey、shiftKey、
altKey 和 metaKey 设置为
global key state 中对应项的值。
令 current delta x 属性
等于 delta x + current delta x,并令
current delta y 属性等于
delta y + current delta y。
如果 last 为 true,则返回。
并行运行以下子步骤:
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/actions |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回 错误,其错误码为 no such window。
令 input state 为使用 session 和 session 的当前顶级浏览 上下文 获取输入 状态的结果。
令 actions options 为一个新的操作选项, 其是元素原点步骤设置为表示 web 元素,且获取元素原点步骤设置 为获取 WebElement 原点。
令 actions by tick 为使用 input state、parameters 和 actions options trying 去提取操作序列的结果。
使用 input state、 actions by tick、当前浏览 上下文 和 actions options 分派操作。如果这产生错误, 则返回该错误。
| HTTP 方法 | URI 模板 |
|---|---|
| DELETE | /session/{session id}/actions |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文 不再打开,则返回 错误,其错误 码为 no such window。
令 input state 为使用session 和当前顶级浏览 上下文 获取输入状态 的结果。
令 actions options 为一个新的操作选项, 其是元素原点步骤设置为表示 web 元素,且获取元素原点步骤设置 为获取 WebElement 原点。
使用 input state 等待操作队列令牌。
令 undo actions 为 input state 的输入取消列表的逆序。
Try 使用 input state、 undo actions、当前浏览 上下文 和 actions options 分派操作。
使用 session 和 session 的当前 顶级浏览上下文 重置输入状态。
本章描述与各种类型的用户 提示的交互。用户提示的共同点是: 它们都是模态窗口,需要用户先与其交互, 事件 循环才会取消暂停,并将控制权返回给 session 的当前顶级浏览 上下文。
默认情况下,用户提示不会被自动处理, 除非定义了用户提示处理程序。 当用户提示出现时, 后续命令负责处理它。 如果后续请求的命令不是本章列出的命令之一, 则会返回 unexpected alert open 错误。
只要活动会话是一个只包含一个 项的列表,并且该项是 HTTP 会话,但不是 BiDi 会话,则在触发 beforeunload 的步骤中, 实现必须表现得好像显示 unload 提示很可能会 令人厌烦、具有欺骗性或没有意义。
这意味着当存在活动的仅 HTTP 会话时, beforeunload 提示永远不会显示。
用户
提示有关联的用户提示消息,
它是显示给用户的字符串消息;
如果消息长度为 0,则为 null。
为了给定 browsing context: 来获取活动 用户提示
令 agent 为browsing context 的活动 文档的相关代理。
当前用户 提示是以当前浏览上下文 获取活动 用户提示的结果。
要dismiss 一个用户 提示,则表现得好像用户点击了该提示上的 Cancel 按钮; 如果不存在该按钮,则改为accept 该提示。
要accept 一个用户 提示,则表现得好像用户点击了该提示上的 OK 按钮。
远程端具有一个用户提示处理程序, 它定义当用户提示被显示时 WebDriver 会话将如何响应。 它要么为 null,要么为字符串和 提示处理程序配置值之间的映射。 初始时它为 null。
提示处理程序配置是一个有两个 项的结构体; 一个是 handler,它是一个 字符串;另一个是 notify, 它是一个布尔值。
为了给定 configuration 来序列化提示处理程序配置:
令 serialized 为 configuration 的handler。
如果 «"dismiss", "accept"»
包含 serialized,
且 configuration 的notify 为 true,则将
" and notify"
追加到 serialized。
返回 serialized。
| Handler key | 描述(非规范性)。 |
|---|---|
"dismiss"
|
遇到的所有简单对话框都应被dismissed。 |
"accept"
|
遇到的所有简单对话框都应被accepted。 |
"dismiss and notify"
|
遇到的所有简单对话框都应被dismissed, 并返回一个错误以表明该对话框已被处理。 |
"accept and notify"
|
遇到的所有简单对话框都应被accepted, 并返回一个错误以表明该对话框已被处理。 |
"ignore"
|
遇到的所有简单对话框都应留给用户处理。 |
有效提示
类型为 «"alert",
"beforeUnload", "confirm",
"default", "file", "prompt"»。
"default" 类型表示当没有为给定提示类型定义
特定处理程序时的后备,包括
"beforeUnload" 提示类型。只有在
unhandled prompt behavior 是一个映射并且
包含 "default" 时,才能设置它。
对于将 unhandled prompt behavior 设置为字符串值的仅 HTTP
会话,该值会被赋给内部类型 "fallbackDefault"。
"fallbackDefault" 值不会用于
"beforeUnload" 提示类型,而是回退到
"accept" 处理程序。这是因为仅 HTTP 会话不
允许自定义 "beforeUnload" 处理程序,并且启用
其他协议不应作为副作用改变用户提示处理。
"file" 提示类型只在
[WebDriver-BiDi] 会话中被尊重。
为了给定参数 value 来反序列化为 unhandled prompt behavior:
将 value 设置为使用 value 将 JSON 派生的 JavaScript 值转换为 Infra 值的结果。
如果 value 不是字符串,则不同时支持 [WebDriver-BiDi] 的实现可以返回 错误, 其错误码为 invalid argument。
这是为了避免 [WebDriver-BiDi] monkey-patching 当前规范。
令 is string value 为 false。
如果 value 是字符串,则将 value 设置为
映射 «["fallbackDefault"
→ value]»,并将 is string value 设置为 true。
如果 value 不是映射, 则返回 错误,其错误码为 invalid argument。
对于 value 中的每个 prompt type → handler:
如果 is string value 为 false,且有效 提示 类型不包含 prompt type, 则返回 错误,其错误 码为 invalid argument。
如果已知提示处理程序不包含 handler key 为 handler 的条目, 则返回 错误, 其错误码为 invalid argument。
令 notify 为 false。
如果 handler 是 "accept and notify",
则将 handler 设置为 "accept"
并将 notify 设置为 true。
如果 handler 是 "dismiss and notify",
则将 handler 设置为 "dismiss"
并将 notify 设置为 true。
如果 handler 是 "ignore",
则将 notify 设置为 true。
令 configuration 为一个提示处理程序 配置,其handler 为 handler,notify 为 notify。
设置 user prompt handler[prompt type] 为 configuration。
返回成功,其数据为 user prompt handler。
为了给定 requested prompt handler 来检查用户提示处理程序匹配:
如果用户提示处理程序为 null,则返回 true。
对于 requested prompt handler 中的每个 request prompt type → request handler:
为了给定 requested prompt handler 来更新用户提示处理程序:
对于 requested prompt handler 中的每个 request prompt type → request handler:
将user prompt handler[request prompt type] 设置为 request handler。
要序列化用户提示处理程序:
如果用户提示处理程序为 null,则返回
"dismiss and notify"。
如果用户提示处理程序的大小为 1,
且用户提示处理程序包含
"fallbackDefault",则返回以
user prompt
handler["fallbackDefault"] 调用序列化提示
处理程序配置的结果。
令 serialized 为空映射。
对于用户提示
处理程序中的每个 key → value:
将 serialized[key] 设置为以 value 调用序列化提示 处理程序配置的结果。
返回以 serialized 调用 将 Infra 值转换为 JSON 兼容的 JavaScript 值的结果。
带注解的 unexpected alert open 错误 是一个错误, 其错误码为 unexpected alert open, 并且带有可选的错误数据字典, 其具有以下条目:
text"
为了获取 type 的提示处理程序:
如果 handlers 包含 type, 则返回 handlers[type]。
如果 handlers 包含 "default",
则返回 handlers["default"]。
如果 type 是 "beforeUnload",则返回一个
提示处理程序配置,其handler 为 "accept",
notify 为 false。
如果 handlers 包含 "fallbackDefault",
则返回 handlers["fallbackDefault"]。
要处理 任何用户提示:
令 type 为 "default"。
如果当前用户提示是 alert 对话框,
则将 type 设置为 "alert"。否则,如果
当前用户提示是 beforeunload 对话框,
则将 type 设置为 "beforeUnload"。否则,如果
当前用户提示是 confirm 对话框,
则将 type 设置为 "confirm"。否则,如果
当前用户提示是 prompt 对话框,
则将 type 设置为 "prompt"。
令 handler 为以 type 调用获取提示处理程序 的结果。
根据 handler 的handler 执行以下子步骤:
如果 handler 的notify 为 true,则返回带注解的 unexpected alert open 错误。
返回成功。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/alert/dismiss |
Dismiss Alert 命令 会在存在简单对话框时 dismisses 它。 对 alert 用户提示的 dismiss 请求, 其不一定具有 dismiss 按钮, 与accepting 它具有相同效果。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
如果当前用户提示为 null, 则返回错误,其错误码为 no such alert。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/alert/accept |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
如果当前用户提示为 null, 则返回错误,其错误码为 no such alert。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/alert/text |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
如果当前用户提示为 null, 则返回错误,其错误码为 no such alert。
返回成功,其数据为 message。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/alert/text |
发送 Alert 文本命令
将 window.prompt
用户提示的文本字段设置为给定值。
给定 session、URL variables 和 parameters 时,远程端步骤为:
令 text 为从 parameters
获取属性 "text"
的结果。
如果 text 不是String, 则返回错误,其错误码为 invalid argument。
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
如果当前用户提示为 null, 则返回错误,其错误码为 no such alert。
运行创建当前 用户 提示的 API 的子步骤:
window.alert
window.confirm
返回错误,其 错误码为 element not interactable。
window.prompt
不执行任何操作。
返回错误,其 错误码为 unsupported operation。
执行依赖用户代理的步骤, 将当前用户提示的文本字段的值 设置为 text。
屏幕截图是一种用于提供 附加可视诊断信息的机制。 它们的工作方式是将可视视口的 framebuffer 的快照转储为无损 PNG 图像。 它会作为 Base64 编码字符串返回给本地端。
WebDriver 提供 Take Screenshot 命令 来捕获顶级浏览上下文的可视视口, 并提供一个命令 Take Element Screenshot, 用于在一个元素 已滚动到视图中后,对其 边界矩形的可见区域执行相同操作。
为了在给定一个矩形时, 从 framebuffer 绘制边界框:
如果可视视口的宽度或高度任一 为 0 CSS 像素, 则返回错误,其错误码为 unable to capture screen。
令 paint width 为可视视口的宽度 – min(rectangle x 坐标, rectangle x 坐标 + rectangle 宽度 尺寸)。
令 paint height 为可视视口的高度 – min(rectangle y 坐标, rectangle y 坐标 + rectangle 高度 尺寸)。
令 canvas 为一个新的
canvas
元素,
并将其
width
和
height
分别设置为 paint width 和 paint height。
令 context(一个canvas context mode) 为以 canvas 作为目标调用 2D context creation algorithm 的结果。
完成实现特定的步骤,等价于 将由以下坐标指定的 framebuffer 区域 绘制到 context 上:
返回成功,其数据为 canvas。
要将
canvas 元素编码为 Base64:
如果
canvas
元素的位图的
origin-clean 标志被设置为 false,
则返回错误,其错误码为 unable to capture screen。
如果
canvas
元素的位图
没有像素(即其水平尺寸或垂直尺寸任一为零),
则返回错误,其错误码为 unable to capture screen。
令 file 为
将
canvas 元素的位图序列化为文件的结果,
并使用 "image/png" 作为参数。
令 index 为 data URL 中
"," 的索引。
令 encoded string 为 data URL 的一个子字符串, 其中使用 (index + 1) 作为 start 参数。
返回成功,其数据为 encoded string。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/screenshot |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
当用户代理下一次将要运行动画帧回调时:
令 root rect 为 session 的当前 顶级浏览上下文的 文档元素的矩形。
令 screenshot result 为以 root rect 作为参数,trying 调用 从 framebuffer 绘制边界框 的结果。
令 canvas 为
screenshot result 的 data 的
canvas
元素。
令 encoding result 为trying 以 canvas 调用 将 canvas 编码为 Base64 的结果。
令 encoded string 为 encoding result 的 data。
返回成功,其数据为 encoded string。
| HTTP 方法 | URI 模板 |
|---|---|
| GET | /session/{session id}/element/{element id}/screenshot |
Take Element Screenshot 命令 会截取由一个元素的边界矩形 所包含的可见区域的屏幕截图。
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前浏览 上下文不再打开,则返回错误,其错误 码为 no such window。
令 element 为使用 session
和 URL variables["element id"]
trying
去获取已知元素的结果。
将 element 滚动到视图中。
当用户代理下一次将要运行动画帧回调时:
令 element rect 为 element 的 矩形。
令 screenshot result 为 以 element rect 作为参数 trying 调用 从 framebuffer 绘制边界框 的结果。
令 canvas 为
screenshot result 的 data 的
canvas
元素。
令 encoding result 为trying 以 canvas 调用 将 canvas 编码为 Base64 的结果。
令 encoded string 为 encoding result 的 data。
返回成功,其数据为 encoded string。
打印功能是一种将文档渲染为 分页格式的机制。它会作为包含分页 文档 PDF 表示的 Base64 编码字符串返回给本地端。
当要求以参数 pageRanges 和 totalPages 解析页面范围时,实现必须:
如果 range 是Number:
否则:
-" 字符上拆分
range 的结果。
否则:
1。否则
令 lowerBound 为对
rangeParts 的第一个元素
trying 去解析为整数的结果。
如果一个String 在移除所有空白字符后 长度为零,则它等价于空字符串。
当要求以参数 input 解析为整数时, 实现必须:
U+0030 - U+0039(即 0 - 9)
之外的任何字符,则返回错误,其状态为 invalid argument。
10 调用 parseInt
的结果。
| HTTP 方法 | URI 模板 |
|---|---|
| POST | /session/{session id}/print |
给定 session、URL variables 和 parameters 时,远程端步骤为:
如果 session 的当前 顶级浏览 上下文不再打开,则返回错误, 其错误码为 no such window。
令 orientation 为从 parameters
获取带默认值的
属性,该属性名为 "orientation",
默认值为 "portrait" 的结果。
如果 orientation 不是String,或者不是
"landscape" 或
"portrait" 这两个值之一,则返回错误,其错误
码为 invalid argument。
令 scale 为从 parameters
获取带默认值的
属性,该属性名为 "scale",
默认值为 1 的结果。
如果 scale 不是Number,或者小于
0.1 或大于 2,
则返回错误,其错误码为 invalid argument。
令 background 为从 parameters
获取带默认值的
属性,该属性名为 "background",
默认值为 false 的结果。
如果 background 不是Boolean, 则返回错误,其错误码为 invalid argument。
令 page 为从 parameters
获取带默认值的属性,
该属性名为 "page",默认值为一个
空Object 的结果。
令 pageWidth 为从 page
获取带默认值的
属性,该属性名为 "width",
默认值为 21.59 的结果。
令 pageHeight 为从 page
获取带默认值的
属性,该属性名为 "height",
默认值为 27.94 的结果。
如果 pageWidth 或 pageHeight 任一
不是Number,或者小于 (2.54 / 72),则返回错误,
其错误码为 invalid
argument。
最小页面大小为 1 point,按照
绝对长度即为
(2.54 / 72)。
令 margin 为从 parameters
获取带默认值的属性,
该属性名为 "margin",默认值为一个
空Object 的结果。
令 marginTop 为从 margin
获取带默认值的
属性,该属性名为 "top",
默认值为 1 的结果。
令 marginBottom 为从 margin
获取带默认值的
属性,该属性名为 "bottom",
默认值为 1 的结果。
令 marginLeft 为从 margin
获取带默认值的
属性,该属性名为 "left",
默认值为 1 的结果。
令 marginRight 为从 margin
获取带默认值的
属性,该属性名为 "right",
默认值为 1 的结果。
如果 marginTop、marginBottom、marginLeft 或 marginRight 中任何一个不是Number,或者小于 0, 则返回错误,其错误码为 invalid argument。
令 shrinkToFit 为从 parameters
获取带默认值的
属性,该属性名为 "shrinkToFit",
默认值为 true 的结果。
如果 shrinkToFit 不是Boolean, 则返回错误,其错误码为 invalid argument。
令 pageRanges 为从
parameters 获取带默认值的
属性,该属性名为 "pageRanges",
默认值为一个空Array 的结果。
如果 pageRanges 不是Array, 则返回错误,其错误码为 invalid argument。
当用户代理下一次将要运行动画帧
回调时,令 pdfData 为trying
执行 UA 特定步骤来生成 session 的当前浏览
上下文的分页表示的结果,其中
CSS 媒体类型设置为 print,编码为 PDF,
并带有以下纸张设置:
| 属性 | 值 |
|---|---|
| 宽度,单位 cm | 如果 orientation 为
"portrait",则为 pageWidth,否则为 pageHeight
|
| 高度,单位 cm | 如果 orientation 为
"portrait",则为 pageHeight,否则为 pageWidth
|
| 上边距,单位 cm | marginTop |
| 下边距,单位 cm | marginBottom |
| 左边距,单位 cm | marginLeft |
| 右边距,单位 cm | marginRight |
此外,UA 应应用以下格式化提示:
1falsetrue如果 pageRanges 不是空Array, 令 pages 为使用参数 pageRanges 以及 pdfData 中包含的页数 trying 去解析 页面范围的结果,然后从 pdfData 中移除 一基索引不包含在 pages 中的任何页面
令 encoding result 为在 pdfData 上 调用 Base64 Encode 的结果。
令 encoded string 为 encoding result 的 data。
返回成功,其数据为 encoded string
本节是非规范性的。
该列表并不详尽,且可能不是最新的。
以下外部规范定义了附加的 WebDriver 模块:
建议远程端 在创建新会话时创建新的配置文件。 这可以防止潜在敏感的会话数据 被新的会话访问, 从而确保隐私,并防止状态泄漏到下一个会话。
用户代理可以依赖命令行标志 或配置选项 来测试是否启用 WebDriver, 或者在用户代理没有 直接实现 HTTP 端点的情况下, 让用户代理通过 特权内容文档或控制小部件发起 或确认连接。
强烈建议用户代理 要求用户采取显式操作来启用 WebDriver, 并且在面向公众使用的用户代理版本中 保持禁用 WebDriver。
为了防止网络上的任意机器 连接并创建会话, 建议默认只允许来自 环回设备的连接。
远程端可以包含
一个配置选项,用于限制
允许连接并发出请求的可接受 IP 范围。
此项的默认设置可能是
将连接限制为 IPv4 localhost
CIDR 范围 127.0.0.0/8
以及 IPv6 localhost 地址 ::1。[RFC4632]
还建议用户代理 努力从视觉上区分 受 WebDriver 控制的用户代理会话 与用于正常浏览的会话。 这可以通过浏览器 chrome 元素实现, 例如“door hanger”、 对 OS 窗口进行彩色装饰, 或者在窗口中显著存在的某些小部件元素, 以便容易识别自动化窗口。
尽管 WebDriver 没有定义用于 确定一个元素在 视口中可见性的原语, 但我们承认它对许多用户而言是一个重要功能。 这里我们包含一种推荐方法, 它会给出一个元素可见性的 简化近似, 但请注意,它只依赖树遍历, 并且只覆盖可见性检查的一个子集。
一个元素的可见性
由人眼在感知上可见的内容所指导。
在此上下文中,一个元素的显示性
与 visibility
或 display 样式属性无关。
推荐实现者用来确定 一个元素可见性的方法最初由 Selenium 项目开发,并且 基于关于一个元素性质及其在树中 关系的粗略近似。一般而言,一个元素如果有任何部分绘制在 视口边界内的 canvas 上,就应被视为可见。
元素 显示状态是一个布尔值,表示 元素当前是否可见。
要使用
bot.dom.isShown Selenium atoms
获取元素显示状态,
给定 element:
令 function 为
bot.dom.isShown 函数。
令 result 为以参数 null 和 element 调用 function 的 [[Call]] 内部方法的结果。如果这引发异常,则返回 一个错误,其错误码为 unknown error。
返回成功,其数据为 result。
元素显示状态通常作为
GET 请求的端点暴露,其 URI 模板为
/session/{session id}/element/{element id}/displayed。
多年来,有许多人帮助使 浏览器自动化成为可能, 并由此推进了本标准的目标。 特别感谢 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 进行校对并提出改进建议。
本规范依赖若干其他底层规范。
以下术语定义于 Accessible Rich Internet Applications (WAI-ARIA) 1.2 规范中:[wai-aria-1.2]
以下术语定义于 Accessible Name and Description Computation 1.1 规范中:[accname-1.1]
以下术语定义于 Content Security Policy Level 3 规范中:[CSP3]
以下术语定义于 The Base16, Base32, and Base64 Data Encodings 规范中:[RFC4648]
以下术语定义于 DOM Parsing and Serialization 规范中:[DOM-PARSING]
以下属性定义于 UI Events 规范中:[UI-EVENTS]
以下属性定义于 UI Events Code 规范中:[UIEVENTS-KEY]
以下术语定义于 ECMAScript 语言规范中:[ECMA-262]
以下术语定义于 WHATWG Encoding 规范中:[ENCODING]
以下术语定义于 WHATWG Fetch 规范中:[FETCH]
以下术语定义于 WHATWG Fullscreen 规范中:[FULLSCREEN]
以下术语定义于 HTML 规范中:[HTML]
activeElement
属性,其位于 Document
Document 对象
Window 对象的
[[GetOwnProperty]]
Window
对象
WindowProxy
外来对象
setSelectionRange
confirm
alert
prompt
HTML 规范还定义了
input
元素的状态:
HTML 规范还定义了一系列不同的属性:
HTML Editing APIs 规范定义了以下术语:[EDITING]
以下事件也定义于 HTML 规范中:
“data” URL 方案规范定义了以下术语:[RFC2397]
若要 符合 HTTP, 则假定实现支持 [RFC7230]、 [RFC7231]、 [RFC7232]、 [RFC7234] 和 [RFC7235] 的相关子集。
以下术语定义于 Cookie 规范中:[RFC6265]
以下术语定义于 Same Site Cookie 规范中:[RFC6265bis]
以下术语定义于 Hypertext Transfer Protocol (HTTP) Status Code Registry:
以下术语定义于 Infra 规范中:[INFRA]
本规范使用 URI 模板。[URI-TEMPLATE]
hidden
visibilityState
属性
visible
775cfb33b193eb8832cd5488f298006f45254685。
visibility
属性
display
属性
以下术语定义于该标准中:[RFC1928]
本规范中的 IDL 片段 必须按 Web IDL 规范中对符合性 IDL 片段所要求的方式解释。[WEBIDL]
以下术语定义于 Promises Guide 中。[PROMISES-GUIDE]
以下术语定义于 Document Object Model XPath 标准中 [XPATH]
[[Call]],用于
Function 的内部插槽
§E.
[[GetOwnProperty]],用于
Object 的内部插槽
§E.
§E.
[[GetProperty]],用于
Object 的内部插槽
§E.
NavigatorAutomationInformation
接口
§4.
[[Put]],用于 Object 的内部插槽
§E.
getBoundingClientRect()(用于
Element)
getClientRects()(用于 Element)
compareDocumentPosition()(用于
Node)
tree)
Node)
DOMTokenList 接口
Element 接口
getAttribute()(用于 Element)
getElementsByTagName()(用于
Element)
hasAttribute()(用于 Element)
HTMLCollection 接口
tree)
tree)
isTrusted 属性(用于 Event)
Node)
NodeList 接口
querySelectorAll()(用于
ParentNode)
ShadowRoot 接口
tagName 属性(用于 Element)
textContent 属性(用于 Node)
Document)
FileList 接口
DOMRect 接口
a
元素
address
元素
canvas
元素
datalist 元素
frame
元素
height 属性(用于 canvas
元素)
HTMLAllCollection 接口
HTMLFormControlsCollection 接口
HTMLOptionsCollection 接口
iframe
元素
optgroup 元素
option
元素
output
元素
readonly 属性(用于 input
元素)
select
元素
textarea 元素
title 属性(用于 Document)
type 属性(用于 input
元素)
width 属性(用于 canvas
元素)
list)
map)
iteration)
map)
map)
struct)
string)
map)
map)
iteration)
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: