JSON Wire 协议规范
此文档以前位于 wiki 上
所有与浏览器或 RemoteWebDriver 服务器通信的 WebDriver 实现都应使用通用的 wire 协议。此 wire 协议定义了一个使用 HTTP 上的 JSON 的 RESTful Web 服务。
该协议将假定 WebDriver API 已被“扁平化”,但期望客户端实现将采用更面向对象的方法,如现有的 Java API 中所示。wire 协议以“命令”和“响应”的请求/响应对的形式实现。
术语和概念
客户端
正在使用 WebDriver API 的机器。
会话
运行 RemoteWebDriver 的机器。此术语也可能指直接实现 wire 协议的特定浏览器,例如 FirefoxDriver 或 IPhoneDriver。
服务器应为每个会话维护一个浏览器。发送到会话的命令将定向到相应的浏览器。
WebElement
WebDriver API 中表示页面上的 DOM 元素的对象。
WebElement JSON 对象
WebElement 通过 wire 传输的 JSON 表示形式。此对象将具有以下属性
键 | 类型 | 描述 |
---|---|---|
ELEMENT | 字符串 | 服务器分配给元素的不透明 ID。此 ID 应用于后续针对该元素发出的所有命令。 |
Capabilities JSON 对象
并非所有服务器实现都将支持每个 WebDriver 功能。因此,客户端和服务器在描述会话支持哪些功能时应使用具有以下属性的 JSON 对象。
键 | 类型 | 描述 |
---|---|---|
browserName | 字符串 | 正在使用的浏览器的名称;应为 {android, chrome, firefox, htmlunit, internet explorer, iPhone, iPad, opera, safari} 之一。 |
version | 字符串 | 浏览器版本,如果未知则为空字符串。 |
platform | 字符串 | 一个键,指定浏览器运行所在的平台。此值应为 {WINDOWS|XP|VISTA|MAC|LINUX|UNIX} 之一。当请求新会话时,客户端可以指定 ANY 来指示可以使用任何可用平台。 |
javascriptEnabled | 布尔值 | 会话是否支持在当前页面的上下文中执行用户提供的 JavaScript。 |
takesScreenshot | 布尔值 | 会话是否支持获取当前页面的屏幕截图。 |
handlesAlerts | 布尔值 | 会话是否可以与模态弹出窗口(例如 window.alert 和 window.confirm )交互。 |
databaseEnabled | 布尔值 | 会话是否可以与数据库存储交互。 |
locationContextEnabled | 布尔值 | 会话是否可以设置和查询浏览器的位置上下文。 |
applicationCacheEnabled | 布尔值 | 会话是否可以与应用程序缓存交互。 |
browserConnectionEnabled | 布尔值 | 会话是否可以查询浏览器的连接性,并在需要时禁用它。 |
cssSelectorsEnabled | 布尔值 | 会话在搜索元素时是否支持 CSS 选择器。 |
webStorageEnabled | 布尔值 | 会话是否支持与 存储对象 的交互。 |
rotatable | 布尔值 | 会话是否可以在纵向和横向方向之间旋转当前页面的当前布局(仅适用于移动平台)。 |
acceptSslCerts | 布尔值 | 会话是否应默认接受所有 SSL 证书。 |
nativeEvents | 布尔值 | 会话在模拟用户输入时是否能够生成本机事件。 |
proxy | 代理对象 | 要使用的任何代理的详细信息。如果未指定代理,则使用系统当前的或默认的状态。格式在“Proxy JSON 对象”下指定。 |
unexpectedAlertBehaviour | 字符串 | 在抛出 UnhandledAlertException 之前,浏览器应如何处理未处理的警报。可能的值为“accept”、“dismiss”和“ignore” |
elementScrollBehavior | 整数 | 允许用户指定是否将元素滚动到视口中以进行交互,以与视口的顶部 (0) 或底部 (1) 对齐。默认值是与视口的顶部对齐。在 IE 和 Firefox(自 2.36 起)中受支持 |
所需功能
客户端发送的 Capabilities JSON 对象,描述了服务器创建的新会话应具备的功能。任何省略的键都隐含地表明相应的功能是不相关的。更多信息请参见 DesiredCapabilities。
实际功能
服务器返回的 Capabilities JSON 对象,描述了会话实际支持的功能。任何省略的键都隐含地表明不支持相应的功能。
Cookie JSON 对象
描述 Cookie 的 JSON 对象。
键 | 类型 | 描述 |
---|---|---|
name | 字符串 | Cookie 的名称。 |
value | 字符串 | Cookie 值。 |
path | 字符串 | (可选) Cookie 路径。1 |
domain | 字符串 | (可选) Cookie 可见到的域。1 |
secure | 布尔值 | (可选) Cookie 是否为安全 Cookie。1 |
httpOnly | 布尔值 | (可选) Cookie 是否为 httpOnly Cookie。1 |
expiry | 数字 | (可选) Cookie 过期时间,以自 1970 年 1 月 1 日午夜 UTC 以来的秒数指定。1 |
1 返回 Cookie 对象时,如果服务器无法提供该信息,则服务器应仅省略可选字段。
日志条目 JSON 对象
描述日志条目的 JSON 对象。
键 | 类型 | 描述 |
---|---|---|
timestamp | 数字 | 条目的时间戳。 |
level | 字符串 | 条目的日志级别,例如,“INFO”(请参见日志级别)。 |
message | 字符串 | 日志消息。 |
日志级别
日志级别按顺序排列,最精细的级别在顶部,最粗糙的级别在底部。
级别 | 描述 |
---|---|
ALL | 所有日志消息。用于获取日志和配置日志。 |
DEBUG | 用于调试的消息。 |
INFO | 带有用户信息的消息。 |
WARNING | 与非严重问题对应的消息。 |
SEVERE | 与严重错误对应的消息。 |
OFF | 无日志消息。用于配置日志。 |
日志类型
下表列出了常见的日志类型。也可能提供其他日志类型,例如,用于性能日志。
日志类型 | 描述 |
---|---|
client | 来自客户端的日志。 |
driver | 来自 webdriver 的日志。 |
browser | 来自浏览器的日志。 |
server | 来自服务器的日志。 |
Proxy JSON 对象
描述代理配置的 JSON 对象。
键 | 类型 | 描述 |
---|---|---|
proxyType | 字符串 | (必需) 使用的代理类型。可能的值为:direct - 直接连接 - 没有使用代理,manual - 配置了手动代理设置,例如,为 HTTP 设置代理,为 FTP 设置代理等,pac - 来自 URL 的代理自动配置,autodetect - 代理自动检测,可能是使用 WPAD,system - 使用系统设置 |
proxyAutoconfigUrl | 字符串 | (如果 proxyType == pac,则为必需,否则忽略) 指定用于代理自动配置的 URL。预期格式示例:http://hostname.com:1234/pacfile |
ftpProxy, httpProxy, sslProxy, socksProxy | 字符串 | (可选,如果 proxyType != manual 则忽略) 分别指定用于 FTP、HTTP、HTTPS 和 SOCKS 请求的代理。如果进行请求,而特定协议的代理未定义,并且 proxyType 为 manual,则行为未定义。预期格式示例:hostname.com:1234 |
socksUsername | 字符串 | (可选,如果 proxyType != manual 并且未设置 socksProxy,则忽略) 指定 SOCKS 代理用户名。 |
socksPassword | 字符串 | (可选,如果 proxyType != manual 且未设置 socksProxy,则忽略)指定 SOCKS 代理密码。 |
noProxy | 字符串 | (可选,如果 proxyType != manual,则忽略)指定代理绕过地址。格式是驱动程序特定的。 |
消息
命令
WebDriver 命令消息应符合 HTTP/1.1 请求规范。尽管服务器可能会扩展以响应其他内容类型,但线路协议规定所有命令都接受 application/json;charset=UTF-8
的内容类型。同样,POST 和 PUT 请求的消息体必须使用 application/json;charset=UTF-8
内容类型。
WebDriver 服务中的每个命令都将映射到特定路径的 HTTP 方法。以冒号 (:) 开头的路径段表示该段是用于进一步标识底层资源的变量。例如,考虑一个任意资源映射为
GET /favorite/color/:name
给定此映射,服务器应响应发送到“/favorite/color/Jack”和“/favorite/color/Jill”的 GET 请求,变量 :name
分别设置为“Jack”和“Jill”。
响应
命令响应应作为 HTTP/1.1 响应消息发送。如果远程服务器必须返回 4xx 响应,则响应正文应具有 text/plain 的 Content-Type,并且消息正文应为不良请求的描述性消息。对于所有其他情况,如果响应包含消息正文,则它必须具有 application/json;charset=UTF-8 的 Content-Type,并且将是一个具有以下属性的 JSON 对象
键 | 类型 | 描述 |
---|---|---|
sessionId | 字符串 | null |
status | 数字 | 总结命令结果的状态码。非零值表示命令失败。 |
value | * | 响应 JSON 值。 |
响应状态码
线路协议将继承 InternetExplorerDriver 使用的状态码
代码 | 摘要 | 详细信息 |
---|---|---|
0 | 成功 | 命令执行成功。 |
6 | NoSuchDriver | 会话已终止或未启动 |
7 | NoSuchElement | 无法使用给定的搜索参数在页面上定位元素。 |
8 | NoSuchFrame | 切换到框架的请求无法满足,因为找不到该框架。 |
9 | UnknownCommand | 找不到请求的资源,或者使用映射的资源不支持的 HTTP 方法接收到请求。 |
10 | StaleElementReference | 元素命令失败,因为引用的元素不再附加到 DOM。 |
11 | ElementNotVisible | 元素命令无法完成,因为该元素在页面上不可见。 |
12 | InvalidElementState | 元素命令无法完成,因为该元素处于无效状态(例如,尝试单击禁用的元素)。 |
13 | UnknownError | 处理命令时发生未知的服务器端错误。 |
15 | ElementIsNotSelectable | 尝试选择无法选择的元素。 |
17 | JavaScriptError | 执行用户提供的 JavaScript 时发生错误。 |
19 | XPathLookupError | 通过 XPath 搜索元素时发生错误。 |
21 | Timeout | 操作在其超时到期之前未完成。 |
23 | NoSuchWindow | 切换到其他窗口的请求无法满足,因为找不到该窗口。 |
24 | InvalidCookieDomain | 尝试在与当前页面不同的域下设置 Cookie 的非法尝试。 |
25 | UnableToSetCookie | 设置 Cookie 值的请求无法满足。 |
26 | UnexpectedAlertOpen | 打开了一个模态对话框,阻止了此操作 |
27 | NoAlertOpenError | 当模态对话框未打开时,尝试对其进行操作。 |
28 | ScriptTimeout | 脚本在其超时到期之前未完成。 |
29 | InvalidElementCoordinates | 提供给交互操作的坐标无效。 |
30 | IMENotAvailable | IME 不可用。 |
31 | IMEEngineActivationFailed | 无法启动 IME 引擎。 |
32 | InvalidSelector | 参数是无效的选择器(例如,XPath/CSS)。 |
33 | SessionNotCreatedException | 无法创建新会话。 |
34 | MoveTargetOutOfBounds | 移动操作的目标超出范围。 |
客户端应将服务器返回的 404 Not Found 响应解释为“未知命令”响应。来自服务器的所有其他 4xx 和 5xx 响应,如果未定义状态字段,则应解释为“未知错误”响应。
错误处理
线路协议指定了两个级别的错误处理:无效请求和失败的命令。
无效请求
所有无效请求都应导致服务器返回 4xx HTTP 响应。响应 Content-Type 应设置为 text/plain,并且消息正文应为描述性错误消息。无效请求的类别如下:
- 未知命令
- 如果服务器收到其路径未映射到 REST 服务中资源的命令请求,则应使用
404 Not Found
消息进行响应。 - 未实现的命令
- 每个实现 WebDriver 线路协议的服务器都必须响应每个定义的命令。如果服务器上尚未实现单个命令,则服务器应使用
501 Not Implemented
错误消息进行响应。请注意,这是“无效请求”类别中唯一不返回4xx
状态码的错误。 - 找不到变量资源
- 如果请求路径映射到变量资源,但该资源不存在,则服务器应使用
404 Not Found
进行响应。例如,如果 IDmy-session
不是服务器上的有效会话 ID,并且命令已发送到GET /session/my-session HTTP/1.1
,则服务器应正常返回404
。 - 无效的命令方法
- 如果请求路径映射到有效资源,但该资源不响应请求方法,则服务器应使用
405 Method Not Allowed
进行响应。响应必须包含带有请求资源的允许方法列表的 Allows 标头。 - 缺少命令参数
- 如果 POST/PUT 命令映射到需要一组 JSON 参数的资源,并且响应正文不包含其中一个参数,则服务器应使用
400 Bad Request
进行响应。响应正文应列出缺少的参数。
失败的命令
如果请求映射到有效命令并且在请求正文中包含所有预期参数,但未能成功执行,则服务器应发送 500 Internal Server Error。此响应应具有 application/json;charset=UTF-8
的 Content-Type,并且响应正文应为格式正确的 JSON 响应对象。
响应状态应为定义的 状态代码之一,并且响应值应是另一个 JSON 对象,其中包含失败命令的详细信息
键 | 类型 | 描述 |
---|---|---|
message | 字符串 | 命令失败的描述性消息。 |
screen | 字符串 | (可选)如果包含,则为当前页面的屏幕截图,作为 base64 编码的字符串。 |
class | 字符串 | (可选)如果包含,则指定命令失败时抛出的异常的完全限定类名。 |
stackTrace | array | (可选)如果包含,则指定描述命令失败时抛出的异常堆栈跟踪的 JSON 对象数组。该数组的第零个元素表示堆栈的顶部。 |
stackTrace 数组中的每个 JSON 对象都必须包含以下属性
键 | 类型 | 描述 |
---|---|---|
fileName | 字符串 | 包含此帧表示的行的源文件的名称。 |
className | 字符串 | 此帧中处于活动状态的类的完全限定类名。如果无法确定类名,或者不适用于服务器实现的语言,则此属性应设置为空字符串。 |
methodName | 字符串 | 此帧中处于活动状态的方法的名称,如果未知/不适用,则为空字符串。 |
lineNumber | 数字 | 帧的原始源文件中的行号,如果未知,则为 0。 |
资源映射
WebDriver REST 服务中的资源映射到单独的 URL 模式。每个资源可以响应一个或多个 HTTP 请求方法。如果资源响应 GET 请求,则它也应该响应 HEAD 请求。所有资源都应该使用 Allow
标头字段响应 OPTIONS 请求,该字段的值是该资源响应的所有方法的列表。
如果资源映射到包含可变路径段名称的 URL,则该路径段应用于进一步路由请求。可变路径段在资源映射中用冒号前缀表示。例如,考虑以下内容
/favorite/color/:person
映射到此 URL 的资源应解析 :person
路径段的值,以进一步确定如何响应请求。如果此资源收到 /favorite/color/Jack
的请求,则应返回 Jack 最喜欢的颜色。同样,服务器应为 /favorite/color/Jill
的任何请求返回 Jill 最喜欢的颜色。
只有当其中一个资源的模式包含可变路径段而另一个资源的模式不包含可变路径段时,两个资源才能映射到同一 URL 模式。在这些情况下,服务器应始终将请求路由到其路径与请求最匹配的资源。考虑以下两个资源路径
/session/:sessionId/element/active
/session/:sessionId/element/:id
给定这些映射,服务器应始终将最终路径段为 active 的请求路由到第一个资源。所有其他请求都应路由到第二个资源。
命令参考
命令摘要
命令详细信息
/status
GET /status
- 查询服务器的当前状态。 如果服务器处于活动状态并接受命令,则应响应一个通用的“HTTP 200 OK”响应。 响应主体应是一个描述服务器状态的 JSON 对象。 所有服务器实现都应返回两个基本对象,描述服务器的当前平台和服务器的构建时间。 所有字段都是可选的;如果省略,客户端应假定该值为未知。 此外,服务器实现可能包含此处未列出的其他字段。
键 类型 描述 build object build.version 字符串 通用发布标签(例如“2.0rc3”) build.revision 字符串 构建服务器的本地源代码控制客户端的修订版本 build.time 字符串 服务器的构建时间戳。 os object os.arch 字符串 当前系统架构。 os.name 字符串 服务器当前运行的操作系统的名称:“windows”、“linux”等。 os.version 字符串 操作系统版本。 - Returns
{object}
一个描述服务器总体状态的对象。
- 查询服务器的当前状态。 如果服务器处于活动状态并接受命令,则应响应一个通用的“HTTP 200 OK”响应。 响应主体应是一个描述服务器状态的 JSON 对象。 所有服务器实现都应返回两个基本对象,描述服务器的当前平台和服务器的构建时间。 所有字段都是可选的;如果省略,客户端应假定该值为未知。 此外,服务器实现可能包含此处未列出的其他字段。
/session
POST /session
/sessions
GET /sessions
- 返回当前活动会话的列表。 每个会话都将作为 JSON 对象列表返回,其中包含以下键
键 类型 描述 id 字符串 会话 ID。 capabilities object 一个描述会话的实际功能的对象。 - Returns
{Array.<Object>}
当前活动会话的列表。
- 返回当前活动会话的列表。 每个会话都将作为 JSON 对象列表返回,其中包含以下键
/session/:sessionId
GET /session/:sessionId
- 检索指定会话的功能。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{object}
一个描述会话的实际功能的对象。
DELETE /session/:sessionId
- 删除会话。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
/session/:sessionId/timeouts
POST /session/:sessionId/timeouts
- 配置特定类型的操作在中止并向客户端返回 |Timeout| 错误之前可以执行的时间量。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
type
-{string}
要设置超时的操作类型。 有效值是:“script”用于脚本超时、“implicit”用于修改隐式等待超时,“page load”用于设置页面加载超时。ms
-{number}
允许时间限制命令运行的时间量(以毫秒为单位)。
/session/:sessionId/timeouts/async_script
POST /session/:sessionId/timeouts/async_script
- 设置由
/session/:sessionId/execute_async
执行的异步脚本在中止并向客户端返回 |Timeout| 错误之前允许运行的时间量(以毫秒为单位)。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
ms
-{number}
允许时间限制命令运行的时间量(以毫秒为单位)。
- 设置由
/session/:sessionId/timeouts/implicit_wait
POST /session/:sessionId/timeouts/implicit_wait
- 设置驱动程序在搜索元素时应等待的时间量。 当
搜索单个元素时,驱动程序应轮询页面,直到找到元素或
超时过期(以较早者为准)。 当搜索多个元素时,驱动程序
应轮询页面,直到找到至少一个元素或超时过期为止,此时
它应返回一个空列表。
如果从不发送此命令,则驱动程序应默认使用 0 毫秒的隐式等待。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
ms
-{number}
要等待的时间量(以毫秒为单位)。 此值的下限为 0。
- 设置驱动程序在搜索元素时应等待的时间量。 当
/session/:sessionId/window_handle
GET /session/:sessionId/window_handle
- 检索当前窗口句柄。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
当前窗口句柄。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/window_handles
GET /session/:sessionId/window_handles
- 检索会话可用的所有窗口句柄的列表。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{Array.<string>}
窗口句柄的列表。
/session/:sessionId/url
GET /session/:sessionId/url
- 检索当前页面的 URL。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
当前 URL。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
POST /session/:sessionId/url
- 导航到新的 URL。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
url
-{string}
要导航到的 URL。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/forward
POST /session/:sessionId/forward
- 如果可能,在浏览器历史记录中向前导航。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/back
POST /session/:sessionId/back
- 如果可能,在浏览器历史记录中向后导航。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/refresh
POST /session/:sessionId/refresh
- 刷新当前页面。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/execute
POST /session/:sessionId/execute
- 将 JavaScript 代码段注入到页面中,以便在当前选定框架的上下文中执行。 执行的脚本被假定为同步的,并且将评估脚本的结果返回给客户端。
script
参数以函数体的形式定义要执行的脚本。 该函数返回的值将返回给客户端。 该函数将使用提供的args
数组进行调用,并且可以通过按指定顺序的arguments
对象访问这些值。
参数可以是任何 JSON 基元、数组或 JSON 对象。 定义 WebElement 引用的 JSON 对象将转换为相应的 DOM 元素。 同样,脚本结果中的任何 WebElement 都将作为 WebElement JSON 对象返回给客户端。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
script
-{string}
要执行的脚本。args
-{Array.<*>}
脚本参数。
- Returns
{*}
脚本结果。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果其中一个脚本参数是一个未附加到页面 DOM 的 WebElement。JavaScriptError
- 如果脚本抛出错误。
- 将 JavaScript 代码段注入到页面中,以便在当前选定框架的上下文中执行。 执行的脚本被假定为同步的,并且将评估脚本的结果返回给客户端。
/session/:sessionId/execute_async
POST /session/:sessionId/execute_async
- 注入一段 JavaScript 代码到当前选定框架的页面中执行。执行的脚本被认为是异步的,并且必须通过调用提供的回调函数来表示完成,回调函数始终作为函数的最后一个参数提供。此回调函数的值将返回给客户端。
异步脚本命令可能不会跨越页面加载。如果在等待脚本结果时触发了unload
事件,则应向客户端返回错误。script
参数定义要执行的脚本,以函数体的形式。该函数将使用提供的args
数组调用,并且可以按指定的顺序通过arguments
对象访问这些值。最后一个参数将始终是一个回调函数,必须调用该函数以表示脚本已完成。
参数可以是任何 JSON 基元、数组或 JSON 对象。 定义 WebElement 引用的 JSON 对象将转换为相应的 DOM 元素。 同样,脚本结果中的任何 WebElement 都将作为 WebElement JSON 对象返回给客户端。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
script
-{string}
要执行的脚本。args
-{Array.<*>}
脚本参数。
- Returns
{*}
脚本结果。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果其中一个脚本参数是一个未附加到页面 DOM 的 WebElement。Timeout
- 如果在超时过期之前未调用脚本回调函数。超时由/session/:sessionId/timeout/async_script
命令控制。JavaScriptError
- 如果脚本抛出错误,或者在等待脚本完成时触发了unload
事件。
- 注入一段 JavaScript 代码到当前选定框架的页面中执行。执行的脚本被认为是异步的,并且必须通过调用提供的回调函数来表示完成,回调函数始终作为函数的最后一个参数提供。此回调函数的值将返回给客户端。
/session/:sessionId/screenshot
GET /session/:sessionId/screenshot
- 拍摄当前页面的屏幕截图。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
屏幕截图,以 base64 编码的 PNG 格式。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/ime/available_engines
GET /session/:sessionId/ime/available_engines
- 列出机器上所有可用的引擎。要使用某个引擎,它必须存在于此列表中。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{Array.<string>}
可用引擎的列表
- 潜在错误
ImeNotAvailableException
- 如果主机不支持 IME
/session/:sessionId/ime/active_engine
GET /session/:sessionId/ime/active_engine
- 获取活动 IME 引擎的名称。名称字符串是特定于平台的。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
活动 IME 引擎的名称。
- 潜在错误
ImeNotAvailableException
- 如果主机不支持 IME
/session/:sessionId/ime/activated
GET /session/:sessionId/ime/activated
- 指示 IME 输入当前是否处于活动状态(而不是是否可用)。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{boolean}
如果 IME 输入可用且当前处于活动状态,则为 true,否则为 false
- 潜在错误
ImeNotAvailableException
- 如果主机不支持 IME
/session/:sessionId/ime/deactivate
POST /session/:sessionId/ime/deactivate
- 停用当前活动的 IME 引擎。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
ImeNotAvailableException
- 如果主机不支持 IME
/session/:sessionId/ime/activate
POST /session/:sessionId/ime/activate
- 使一个可用的引擎(出现在列表中
由 getAvailableEngines 返回)处于活动状态。在此调用之后,引擎将
被添加到 IME 守护程序中加载的引擎列表中,并且发送的输入
使用 sendKeys 将由活动引擎转换。
请注意,这是一种与平台无关的激活 IME 的方法
(特定于平台的方法是使用键盘快捷键 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
engine
-{string}
要激活的引擎的名称。
- 潜在错误
ImeActivationFailedException
- 如果引擎不可用,或者由于其他原因激活失败。ImeNotAvailableException
- 如果主机不支持 IME
- 使一个可用的引擎(出现在列表中
/session/:sessionId/frame
POST /session/:sessionId/frame
- 将焦点更改为页面上的另一个框架。如果框架
id
为null
,则服务器
应切换到页面的默认内容。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
id
-{string|number|null|WebElement JSON Object}
要将焦点更改到的框架的标识符。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。NoSuchFrame
- 如果找不到由id
指定的框架。
- 将焦点更改为页面上的另一个框架。如果框架
/session/:sessionId/frame/parent
POST /session/:sessionId/frame/parent
- 将焦点更改为父上下文。如果当前上下文是顶级浏览上下文,则上下文保持不变。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
/session/:sessionId/window
POST /session/:sessionId/window
- 将焦点更改为另一个窗口。要将焦点更改到的窗口可以由其
服务器分配的窗口句柄或其name
属性的值指定。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
name
-{string}
要将焦点更改到的窗口。
- 潜在错误
NoSuchWindow
- 如果找不到由name
指定的窗口。
- 将焦点更改为另一个窗口。要将焦点更改到的窗口可以由其
DELETE /session/:sessionId/window
- 关闭当前窗口。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭
/session/:sessionId/window/:windowHandle/size
POST /session/:sessionId/window/:windowHandle/size
- 更改指定窗口的大小。如果 :windowHandle URL 参数为“current”,则将调整当前活动窗口的大小。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
width
-{number}
新窗口宽度。height
-{number}
新窗口高度。
GET /session/:sessionId/window/:windowHandle/size
- 获取指定窗口的大小。如果 :windowHandle URL 参数为“current”,则将返回当前活动窗口的大小。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{width: number, height: number}
窗口的大小。
- 潜在错误
NoSuchWindow
- 如果找不到指定的窗口。
/session/:sessionId/window/:windowHandle/position
POST /session/:sessionId/window/:windowHandle/position
- 更改指定窗口的位置。如果 :windowHandle URL 参数为“current”,则将移动当前活动窗口。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
x
-{number}
将窗口定位到的 X 坐标,相对于屏幕的左上角。y
-{number}
将窗口定位到的 Y 坐标,相对于屏幕的左上角。
- 潜在错误
NoSuchWindow
- 如果找不到指定的窗口。
GET /session/:sessionId/window/:windowHandle/position
- 获取指定窗口的位置。如果 :windowHandle URL 参数为“current”,则将返回当前活动窗口的位置。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{x: number, y: number}
窗口的 X 和 Y 坐标,相对于屏幕的左上角。
- 潜在错误
NoSuchWindow
- 如果找不到指定的窗口。
/session/:sessionId/window/:windowHandle/maximize
POST /session/:sessionId/window/:windowHandle/maximize
- 如果尚未最大化,则最大化指定的窗口。如果 :windowHandle URL 参数为“current”,则将最大化当前活动窗口。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果找不到指定的窗口。
/session/:sessionId/cookie
GET /session/:sessionId/cookie
- 检索当前页面可见的所有 cookie。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{Array.<object>}
cookie 的列表。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
POST /session/:sessionId/cookie
DELETE /session/:sessionId/cookie
- 删除当前页面可见的所有 cookie。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
InvalidCookieDomain
- 如果 cookie 的domain
从当前页面不可见。NoSuchWindow
- 如果当前选定的窗口已关闭。UnableToSetCookie
- 如果尝试在不支持 cookie 的页面上设置 cookie(例如,mime 类型为text/plain
的页面)。
/session/:sessionId/cookie/:name
DELETE /session/:sessionId/cookie/:name
- 删除具有给定名称的 cookie。如果当前页面看不到
这样的 cookie,则此命令应为无操作。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:name
- 要删除的 cookie 的名称。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
- 删除具有给定名称的 cookie。如果当前页面看不到
/session/:sessionId/source
GET /session/:sessionId/source
- 获取当前页面源代码。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
当前页面源代码。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/title
GET /session/:sessionId/title
- 获取当前页面标题。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
当前页面标题。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/element
POST /session/:sessionId/element
- 从文档根目录开始,在页面上搜索元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。每个定位器必须返回 DOM 中找到的第一个匹配元素。
策略 描述 类名 返回一个类名包含搜索值的元素;不允许使用复合类名。 css 选择器 返回与 CSS 选择器匹配的元素。 id 返回一个 ID 属性与搜索值匹配的元素。 name 返回一个 NAME 属性与搜索值匹配的元素。 链接文本 返回一个可见文本与搜索值匹配的锚元素。 部分链接文本 返回一个可见文本部分匹配搜索值的锚元素。 标签名称 返回一个标签名称与搜索值匹配的元素。 xpath 返回与 XPath 表达式匹配的元素。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
using
-{string}
要使用的定位器策略。value
-{string}
搜索目标。
- Returns
{ELEMENT:string}
找到的元素的 WebElement JSON 对象。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。NoSuchElement
- 如果找不到该元素。XPathLookupError
- 如果使用 XPath 并且输入表达式无效。
- 从文档根目录开始,在页面上搜索元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。每个定位器必须返回 DOM 中找到的第一个匹配元素。
/session/:sessionId/elements
POST /session/:sessionId/elements
- 从文档根目录开始,在页面上搜索多个元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。应按在 DOM 中找到的顺序返回元素。
策略 描述 类名 返回所有类名包含搜索值的元素;不允许使用复合类名。 css 选择器 返回所有与 CSS 选择器匹配的元素。 id 返回所有 ID 属性与搜索值匹配的元素。 name 返回所有 NAME 属性与搜索值匹配的元素。 链接文本 返回所有可见文本与搜索值匹配的锚元素。 部分链接文本 返回所有可见文本部分匹配搜索值的锚元素。 标签名称 返回所有标签名称与搜索值匹配的元素。 xpath 返回所有与 XPath 表达式匹配的元素。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
using
-{string}
要使用的定位器策略。value
-{string}
搜索目标。
- Returns
{Array.<{ELEMENT:string}>}
找到的元素的 WebElement JSON 对象列表。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。XPathLookupError
- 如果使用 XPath 并且输入表达式无效。
- 从文档根目录开始,在页面上搜索多个元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。应按在 DOM 中找到的顺序返回元素。
/session/:sessionId/element/active
POST /session/:sessionId/element/active
- 获取页面上当前具有焦点的元素。该元素将作为 WebElement JSON 对象返回。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{ELEMENT:string}
活动元素的 WebElement JSON 对象。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/element/:id
GET /session/:sessionId/element/:id
- 描述已识别的元素。
注意:此命令保留供将来使用;其返回类型当前未定义。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 描述已识别的元素。
/session/:sessionId/element/:id/element
POST /session/:sessionId/element/:id/element
- 从已标识的元素开始,在页面上搜索元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。每个定位器必须返回 DOM 中找到的第一个匹配元素。
策略 描述 类名 返回一个类名包含搜索值的元素;不允许使用复合类名。 css 选择器 返回与 CSS 选择器匹配的元素。 id 返回一个 ID 属性与搜索值匹配的元素。 name 返回一个 NAME 属性与搜索值匹配的元素。 链接文本 返回一个可见文本与搜索值匹配的锚元素。 部分链接文本 返回一个可见文本部分匹配搜索值的锚元素。 标签名称 返回一个标签名称与搜索值匹配的元素。 xpath 返回与 XPath 表达式匹配的元素。提供的 XPath 表达式必须按原样应用于服务器;如果表达式不是相对于元素根的,则服务器不应修改它。因此,XPath 查询可能会返回不包含在根元素的子树中的元素。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- JSON 参数
using
-{string}
要使用的定位器策略。value
-{string}
搜索目标。
- Returns
{ELEMENT:string}
找到的元素的 WebElement JSON 对象。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。NoSuchElement
- 如果找不到该元素。XPathLookupError
- 如果使用 XPath 并且输入表达式无效。
- 从已标识的元素开始,在页面上搜索元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。每个定位器必须返回 DOM 中找到的第一个匹配元素。
/session/:sessionId/element/:id/elements
POST /session/:sessionId/element/:id/elements
- 从已标识的元素开始,在页面上搜索多个元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。应按在 DOM 中找到的顺序返回元素。
策略 描述 类名 返回所有类名包含搜索值的元素;不允许使用复合类名。 css 选择器 返回所有与 CSS 选择器匹配的元素。 id 返回所有 ID 属性与搜索值匹配的元素。 name 返回所有 NAME 属性与搜索值匹配的元素。 链接文本 返回所有可见文本与搜索值匹配的锚元素。 部分链接文本 返回所有可见文本部分匹配搜索值的锚元素。 标签名称 返回所有标签名称与搜索值匹配的元素。 xpath 返回所有与 XPath 表达式匹配的元素。提供的 XPath 表达式必须按原样应用于服务器;如果表达式不是相对于元素根的,则服务器不应修改它。因此,XPath 查询可能会返回不包含在根元素的子树中的元素。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- JSON 参数
using
-{string}
要使用的定位器策略。value
-{string}
搜索目标。
- Returns
{Array.<{ELEMENT:string}>}
找到的元素的 WebElement JSON 对象列表。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。XPathLookupError
- 如果使用 XPath 并且输入表达式无效。
- 从已标识的元素开始,在页面上搜索多个元素。找到的元素将作为 WebElement JSON 对象返回。下表列出了每个服务器应支持的定位器策略。应按在 DOM 中找到的顺序返回元素。
/session/:sessionId/element/:id/click
POST /session/:sessionId/element/:id/click
- 单击元素。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。ElementNotVisible
- 如果引用的元素在页面上不可见(被 CSS 隐藏、宽度为 0 或高度为 0)
/session/:sessionId/element/:id/submit
POST /session/:sessionId/element/:id/submit
- 提交
FORM
元素。提交命令也可以应用于FORM
元素的任何后代元素。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 提交
/session/:sessionId/element/:id/text
GET /session/:sessionId/element/:id/text
- 返回元素的可见文本。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
/session/:sessionId/element/:id/value
POST /session/:sessionId/element/:id/value
- 向元素发送一系列按键。
可以指定任何 UTF-8 字符,但是,如果服务器不支持原生键盘事件,则应模拟标准美国键盘布局的按键。Unicode 专用区 代码点 0xE000-0xF8FF 用于表示可按下的非文本键(见下表)。键 代码 NULL U+E000 取消 U+E001 帮助 U+E002 退格键 U+E003 Tab U+E004 清除 U+E005 返回1 U+E006 Enter1 U+E007 Shift U+E008 Control U+E009 Alt U+E00A 暂停 U+E00B Esc U+E00C 键 代码 空格 U+E00D Pageup U+E00E Pagedown U+E00F End U+E010 Home U+E011 左箭头 U+E012 上箭头 U+E013 右箭头 U+E014 下箭头 U+E015 插入 U+E016 删除 U+E017 分号 U+E018 等于号 U+E019 键 代码 数字键盘 0 U+E01A 数字键盘 1 U+E01B 数字键盘 2 U+E01C 数字键盘 3 U+E01D 数字键盘 4 U+E01E 数字键盘 5 U+E01F 数字键盘 6 U+E020 数字键盘 7 U+E021 数字键盘 8 U+E022 数字键盘 9 U+E023 键 代码 乘号 U+E024 加号 U+E025 分隔符 U+E026 减号 U+E027 小数点 U+E028 除号 U+E029 键 代码 F1 U+E031 F2 U+E032 F3 U+E033 F4 U+E034 F5 U+E035 F6 U+E036 F7 U+E037 F8 U+E038 F9 U+E039 F10 U+E03A F11 U+E03B F12 U+E03C Command/Meta U+E03D 1 返回键与 Enter 键不同。 服务器必须按如下方式处理按键序列
- 键盘上出现的每个不需要修饰符的键都作为按下键然后松开键发送。
- 如果服务器不支持原生事件并且必须使用 JavaScript 模拟按键,则必须按顺序生成 keydown、keypress 和 keyup 事件。仅当对应的键是可打印字符时才应触发 keypress 事件。
- 如果一个键需要修饰键(例如,标准美国键盘上的“!”),则顺序为:修饰键 按下,键 按下,键 松开,修饰键 松开,其中 键 是理想的未修改键值(使用之前的示例,为“1”)。
- 修饰键(Ctrl、Shift、Alt 和 Command/Meta)被认为是“粘性的”;每个修饰键应保持按下状态(例如,仅一个按下键事件),直到在序列中再次遇到该修饰键或遇到
NULL
(U+E000) 键。 - 每个按键序列都以隐式的
NULL
键终止。随后,所有按下的修饰键必须在序列末尾释放(具有相应的松开键事件)。
- 键盘上出现的每个不需要修饰符的键都作为按下键然后松开键发送。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- JSON 参数
value
-{Array.<string>}
要输入的按键序列。必须提供数组。服务器应将数组项展平为要输入的单个字符串。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。ElementNotVisible
- 如果引用的元素在页面上不可见(被 CSS 隐藏、宽度为 0 或高度为 0)
- 向元素发送一系列按键。
/session/:sessionId/keys
POST /session/:sessionId/keys
/session/:sessionId/element/:id/name
GET /session/:sessionId/element/:id/name
- 查询元素的标签名称。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{string}
元素的标签名称,为小写字符串。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
/session/:sessionId/element/:id/clear
POST /session/:sessionId/element/:id/clear
- 清除
TEXTAREA
或text INPUT
元素的值。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。ElementNotVisible
- 如果引用的元素在页面上不可见(被 CSS 隐藏、宽度为 0 或高度为 0)InvalidElementState
- 如果引用的元素被禁用。
- 清除
/session/:sessionId/element/:id/selected
GET /session/:sessionId/element/:id/selected
- 确定
OPTION
元素,或类型为checkbox
或radiobutton
的INPUT
元素当前是否被选中。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{boolean}
元素是否被选中。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 确定
/session/:sessionId/element/:id/enabled
GET /session/:sessionId/element/:id/enabled
- 确定元素当前是否启用。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{boolean}
元素是否被启用。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
/session/:sessionId/element/:id/attribute/:name
GET /session/:sessionId/element/:id/attribute/:name
- 获取元素的属性值。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{string|null}
属性的值,如果元素上未设置,则为 null。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
/session/:sessionId/element/:id/equals/:other
GET /session/:sessionId/element/:id/equals/:other
- 测试两个元素 ID 是否指向同一个 DOM 元素。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。:other
- 要比较的元素的 ID。
- Returns
{boolean}
两个 ID 是否引用同一个元素。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果:id
或:other
引用的元素不再附加到页面的 DOM。
/session/:sessionId/element/:id/displayed
GET /session/:sessionId/element/:id/displayed
- 确定元素当前是否显示。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{boolean}
元素是否显示。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
/session/:sessionId/element/:id/location
GET /session/:sessionId/element/:id/location
- 确定元素在页面上的位置。点
(0, 0)
指的是页面的左上角。元素的坐标作为具有x
和y
属性的 JSON 对象返回。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{x:number, y:number}
元素在页面上的 X 和 Y 坐标。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 确定元素在页面上的位置。点
/session/:sessionId/element/:id/location_in_view
GET /session/:sessionId/element/:id/location_in_view
- 确定元素滚动到视图后在屏幕上的位置。
注意: 这被认为是一个内部命令,仅应用于确定元素的
位置,以正确生成原生事件。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{x:number, y:number}
元素的 X 和 Y 坐标。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 确定元素滚动到视图后在屏幕上的位置。
/session/:sessionId/element/:id/size
GET /session/:sessionId/element/:id/size
- 确定元素的大小(以像素为单位)。该大小将作为具有
width
和height
属性的 JSON 对象返回。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{width:number, height:number}
元素的宽度和高度(以像素为单位)。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 确定元素的大小(以像素为单位)。该大小将作为具有
/session/:sessionId/element/:id/css/:propertyName
GET /session/:sessionId/element/:id/css/:propertyName
- 查询元素的计算 CSS 属性的值。要查询的 CSS 属性应使用 CSS 属性名称指定,而不是 JavaScript 属性名称(例如,使用
background-color
而不是backgroundColor
)。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:id
- 将命令路由到的元素的 ID。
- Returns
{string}
指定 CSS 属性的值。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。StaleElementReference
- 如果由:id
引用的元素不再附加到页面的 DOM。
- 查询元素的计算 CSS 属性的值。要查询的 CSS 属性应使用 CSS 属性名称指定,而不是 JavaScript 属性名称(例如,使用
/session/:sessionId/orientation
GET /session/:sessionId/orientation
- 获取当前的浏览器方向。服务器应返回 ScreenOrientation 中定义的有效方向值:
{LANDSCAPE|PORTRAIT}
。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
与 ScreenOrientation 中定义的值对应的当前浏览器方向:{LANDSCAPE|PORTRAIT}
。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
- 获取当前的浏览器方向。服务器应返回 ScreenOrientation 中定义的有效方向值:
POST /session/:sessionId/orientation
- 设置浏览器方向。该方向应按照 ScreenOrientation 中的定义指定:
{LANDSCAPE|PORTRAIT}
。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
orientation
-{string}
ScreenOrientation 中定义的新浏览器方向:{LANDSCAPE|PORTRAIT}
。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
- 设置浏览器方向。该方向应按照 ScreenOrientation 中的定义指定:
/session/:sessionId/alert_text
GET /session/:sessionId/alert_text
- 获取当前显示的 JavaScript
alert()
、confirm()
或prompt()
对话框的文本。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{string}
当前显示的警报的文本。
- 潜在错误
NoAlertPresent
- 如果没有显示警报。
- 获取当前显示的 JavaScript
POST /session/:sessionId/alert_text
- 向 JavaScript
prompt()
对话框发送按键。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
text
-{string}
要发送到prompt()
对话框的按键。
- 潜在错误
NoAlertPresent
- 如果没有显示警报。
- 向 JavaScript
/session/:sessionId/accept_alert
POST /session/:sessionId/accept_alert
- 接受当前显示的警报对话框。通常,这相当于单击对话框中的“确定”按钮。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoAlertPresent
- 如果没有显示警报。
/session/:sessionId/dismiss_alert
POST /session/:sessionId/dismiss_alert
- 关闭当前显示的警报对话框。对于
confirm()
和prompt()
对话框,这相当于单击“取消”按钮。对于alert()
对话框,这相当于单击“确定”按钮。 - URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoAlertPresent
- 如果没有显示警报。
- 关闭当前显示的警报对话框。对于
/session/:sessionId/moveto
POST /session/:sessionId/moveto
- 通过指定元素的偏移量移动鼠标。如果没有指定元素,则移动相对于当前鼠标光标。如果提供了元素但没有偏移量,则鼠标将移动到元素的中心。如果元素不可见,它将被滚动到视图中。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
element
-{string}
分配给要移动到的元素的不透明 ID,如 WebElement JSON 对象中所述。如果未指定或为 null,则偏移量相对于鼠标的当前位置。xoffset
-{number}
要移动到的 X 偏移量,相对于元素的左上角。如果未指定,则鼠标将移动到元素的中间。yoffset
-{number}
要移动到的 Y 偏移量,相对于元素的左上角。如果未指定,则鼠标将移动到元素的中间。
/session/:sessionId/click
POST /session/:sessionId/click
- 单击任何鼠标按钮(在上次 moveto 命令设置的坐标处)。请注意,在调用 buttondown 后和调用 button up 之前(或任何乱序交互序列)调用此命令将产生未定义的行为)。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
button
-{number}
哪个按钮,枚举:{LEFT = 0, MIDDLE = 1 , RIGHT = 2}
。如果未指定,则默认为鼠标左键。
/session/:sessionId/buttondown
POST /session/:sessionId/buttondown
- 单击并按住鼠标左键(在上次 moveto 命令设置的坐标处)。请注意,接下来应执行的鼠标相关命令是 buttonup。任何其他鼠标命令(例如单击或另一次 buttondown 调用)都将产生未定义的行为。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
button
-{number}
哪个按钮,枚举:{LEFT = 0, MIDDLE = 1 , RIGHT = 2}
。如果未指定,则默认为鼠标左键。
/session/:sessionId/buttonup
POST /session/:sessionId/buttonup
- 释放先前按住的鼠标按钮(鼠标当前所在的位置)。对于发出的每个 buttondown 命令,必须调用一次。请参阅单击和 buttondown 中的注释,了解乱序命令的含义。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
button
-{number}
哪个按钮,枚举:{LEFT = 0, MIDDLE = 1 , RIGHT = 2}
。如果未指定,则默认为鼠标左键。
/session/:sessionId/doubleclick
POST /session/:sessionId/doubleclick
- 在当前鼠标坐标处双击(由 moveto 设置)。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
/session/:sessionId/touch/click
POST /session/:sessionId/touch/click
- 在启用触摸的设备上进行单次点击。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
element
-{string}
要单次点击的元素的 ID。
/session/:sessionId/touch/down
POST /session/:sessionId/touch/down
- 手指在屏幕上按下。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
x
-{number}
屏幕上的 X 坐标。y
-{number}
屏幕上的 Y 坐标。
/session/:sessionId/touch/up
POST /session/:sessionId/touch/up
- 手指在屏幕上抬起。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
x
-{number}
屏幕上的 X 坐标。y
-{number}
屏幕上的 Y 坐标。
session/:sessionId/touch/move
POST session/:sessionId/touch/move
- 手指在屏幕上移动。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
x
-{number}
屏幕上的 X 坐标。y
-{number}
屏幕上的 Y 坐标。
session/:sessionId/touch/scroll
POST session/:sessionId/touch/scroll
- 使用基于手指的运动事件在触摸屏上滚动。使用此命令在特定屏幕位置开始滚动。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
element
-{string}
滚动开始的元素的 ID。xoffset
-{number}
要滚动的 x 偏移量(以像素为单位)。yoffset
-{number}
要滚动的 y 偏移量(以像素为单位)。
session/:sessionId/touch/scroll
POST session/:sessionId/touch/scroll
- 使用基于手指的运动事件在触摸屏上滚动。如果您不关心滚动在屏幕上的起始位置,请使用此命令。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
xoffset
-{number}
要滚动的 x 偏移量(以像素为单位)。yoffset
-{number}
要滚动的 y 偏移量(以像素为单位)。
session/:sessionId/touch/doubleclick
POST session/:sessionId/touch/doubleclick
- 使用手指运动事件在触摸屏上双击。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
element
-{string}
要双击的元素的 ID。
session/:sessionId/touch/longclick
POST session/:sessionId/touch/longclick
- 使用手指运动事件在触摸屏上长按。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
element
-{string}
要长按的元素的 ID。
session/:sessionId/touch/flick
POST session/:sessionId/touch/flick
- 使用手指运动事件在触摸屏上轻拂。此轻拂命令从特定屏幕位置开始。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
element
-{string}
轻拂开始的元素的 ID。xoffset
-{number}
要轻拂的 x 偏移量(以像素为单位)。yoffset
-{number}
要轻拂的 y 偏移量(以像素为单位)。speed
-{number}
每秒像素移动速度。
session/:sessionId/touch/flick
POST session/:sessionId/touch/flick
- 在触摸屏上使用手指滑动事件进行快速滑动。如果不需要关心滑动在屏幕上的起始位置,请使用此快速滑动命令。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
xspeed
-{number}
每秒横向像素移动速度。yspeed
-{number}
每秒纵向像素移动速度。
/session/:sessionId/location
GET /session/:sessionId/location
- 获取当前的地理位置。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{latitude: number, longitude: number, altitude: number}
当前地理位置。
POST /session/:sessionId/location
- 设置当前的地理位置。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
location
-{latitude: number, longitude: number, altitude: number}
新的地理位置。
/session/:sessionId/local_storage
GET /session/:sessionId/local_storage
- 获取存储的所有键。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{Array.<string>}
键的列表。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
POST /session/:sessionId/local_storage
- 为给定的键设置存储项。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
key
-{string}
要设置的键。value
-{string}
要设置的值。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
DELETE /session/:sessionId/local_storage
- 清除存储。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/local_storage/key/:key
GET /session/:sessionId/local_storage/key/:key
- 获取给定键的存储项。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:key
- 要获取的键。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
DELETE /session/:sessionId/local_storage/key/:key
- 删除给定键的存储项。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:key
- 要移除的键。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/local_storage/size
GET /session/:sessionId/local_storage/size
- 获取存储中的项目数。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{number}
存储中的项目数量。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/session_storage
GET /session/:sessionId/session_storage
- 获取存储的所有键。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{Array.<string>}
键的列表。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
POST /session/:sessionId/session_storage
- 为给定的键设置存储项。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- JSON 参数
key
-{string}
要设置的键。value
-{string}
要设置的值。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
DELETE /session/:sessionId/session_storage
- 清除存储。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/session_storage/key/:key
GET /session/:sessionId/session_storage/key/:key
- 获取给定键的存储项。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:key
- 要获取的键。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
DELETE /session/:sessionId/session_storage/key/:key
- 删除给定键的存储项。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。:key
- 要移除的键。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/session_storage/size
GET /session/:sessionId/session_storage/size
- 获取存储中的项目数。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{number}
存储中的项目数量。
- 潜在错误
NoSuchWindow
- 如果当前选定的窗口已关闭。
/session/:sessionId/log
POST /session/:sessionId/log
/session/:sessionId/log/types
GET /session/:sessionId/log/types
- 获取可用的日志类型。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{Array.<string>}
可用的日志类型列表。
/session/:sessionId/application_cache/status
GET /session/:sessionId/application_cache/status
- 获取 html5 应用程序缓存的状态。
- URL 参数
:sessionId
- 要将命令路由到的会话的 ID。
- Returns
{number}
应用程序缓存的状态码:{UNCACHED = 0, IDLE = 1, CHECKING = 2, DOWNLOADING = 3, UPDATE_READY = 4, OBSOLETE = 5}