JSON Wire 协议规范

这是现已过时的开源协议的端点和有效负载,该协议是 W3C 规范 的前身。

此文档以前位于 wiki 上

所有与浏览器或 RemoteWebDriver 服务器通信的 WebDriver 实现都应使用通用的 wire 协议。此 wire 协议定义了一个使用 HTTP 上的 JSONRESTful 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.alertwindow.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 对象。

类型描述
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成功命令执行成功。
6NoSuchDriver会话已终止或未启动
7NoSuchElement无法使用给定的搜索参数在页面上定位元素。
8NoSuchFrame切换到框架的请求无法满足,因为找不到该框架。
9UnknownCommand找不到请求的资源,或者使用映射的资源不支持的 HTTP 方法接收到请求。
10StaleElementReference元素命令失败,因为引用的元素不再附加到 DOM。
11ElementNotVisible元素命令无法完成,因为该元素在页面上不可见。
12InvalidElementState元素命令无法完成,因为该元素处于无效状态(例如,尝试单击禁用的元素)。
13UnknownError处理命令时发生未知的服务器端错误。
15ElementIsNotSelectable尝试选择无法选择的元素。
17JavaScriptError执行用户提供的 JavaScript 时发生错误。
19XPathLookupError通过 XPath 搜索元素时发生错误。
21Timeout操作在其超时到期之前未完成。
23NoSuchWindow切换到其他窗口的请求无法满足,因为找不到该窗口。
24InvalidCookieDomain尝试在与当前页面不同的域下设置 Cookie 的非法尝试。
25UnableToSetCookie设置 Cookie 值的请求无法满足。
26UnexpectedAlertOpen打开了一个模态对话框,阻止了此操作
27NoAlertOpenError当模态对话框未打开时,尝试对其进行操作。
28ScriptTimeout脚本在其超时到期之前未完成。
29InvalidElementCoordinates提供给交互操作的坐标无效。
30IMENotAvailableIME 不可用。
31IMEEngineActivationFailed无法启动 IME 引擎。
32InvalidSelector参数是无效的选择器(例如,XPath/CSS)。
33SessionNotCreatedException无法创建新会话。
34MoveTargetOutOfBounds移动操作的目标超出范围。

客户端应将服务器返回的 404 Not Found 响应解释为“未知命令”响应。来自服务器的所有其他 4xx 和 5xx 响应,如果未定义状态字段,则应解释为“未知错误”响应。

错误处理

线路协议指定了两个级别的错误处理:无效请求和失败的命令。

无效请求

所有无效请求都应导致服务器返回 4xx HTTP 响应。响应 Content-Type 应设置为 text/plain,并且消息正文应为描述性错误消息。无效请求的类别如下:

未知命令
如果服务器收到其路径未映射到 REST 服务中资源的命令请求,则应使用 404 Not Found 消息进行响应。

未实现的命令
每个实现 WebDriver 线路协议的服务器都必须响应每个定义的命令。如果服务器上尚未实现单个命令,则服务器应使用 501 Not Implemented 错误消息进行响应。请注意,这是“无效请求”类别中唯一不返回 4xx 状态码的错误。

找不到变量资源
如果请求路径映射到变量资源,但该资源不存在,则服务器应使用 404 Not Found 进行响应。例如,如果 ID my-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字符串(可选)如果包含,则指定命令失败时抛出的异常的完全限定类名。
stackTracearray(可选)如果包含,则指定描述命令失败时抛出的异常堆栈跟踪的 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 模式。在这些情况下,服务器应始终将请求路由到其路径与请求最匹配的资源。考虑以下两个资源路径

  1. /session/:sessionId/element/active
  2. /session/:sessionId/element/:id

给定这些映射,服务器应始终将最终路径段为 active 的请求路由到第一个资源。所有其他请求都应路由到第二个资源。

命令参考

命令摘要

HTTP 方法路径摘要
GET/status查询服务器的当前状态。
POST/session创建新会话。
GET/sessions返回当前活动会话的列表。
GET/session/:sessionId检索指定会话的功能。
DELETE/session/:sessionId删除会话。
POST/session/:sessionId/timeouts配置特定类型的操作在中止和
POST/session/:sessionId/timeouts/async_script设置异步脚本通过 /session/:sessionId/execute_async 执行允许运行的时间量(以毫秒为单位),然后中止和
POST/session/:sessionId/timeouts/implicit_wait设置驱动程序在搜索元素时应等待的时间量。
GET/session/:sessionId/window_handle检索当前窗口句柄。
GET/session/:sessionId/window_handles检索会话可用的所有窗口句柄的列表。
GET/session/:sessionId/url检索当前页面的 URL。
POST/session/:sessionId/url导航到新的 URL。
POST/session/:sessionId/forward如果可能,在浏览器历史记录中向前导航。
POST/session/:sessionId/back如果可能,在浏览器历史记录中向后导航。
POST/session/:sessionId/refresh刷新当前页面。
POST/session/:sessionId/execute将 JavaScript 代码段注入页面,以便在当前选定框架的上下文中执行。
POST/session/:sessionId/execute_async将 JavaScript 代码段注入页面,以便在当前选定框架的上下文中执行。
GET/session/:sessionId/screenshot拍摄当前页面的屏幕截图。
GET/session/:sessionId/ime/available_engines列出计算机上的所有可用引擎。
GET/session/:sessionId/ime/active_engine获取活动 IME 引擎的名称。
GET/session/:sessionId/ime/activated指示 IME 输入当前是否处于活动状态(而不是是否可用)。
POST/session/:sessionId/ime/deactivate停用当前活动的 IME 引擎。
POST/session/:sessionId/ime/activate使可用的引擎(出现在 getAvailableEngines 返回的列表中)处于活动状态。
POST/session/:sessionId/frame将焦点更改为页面上的另一个框架。
POST/session/:sessionId/frame/parent将焦点更改为父上下文。
POST/session/:sessionId/window将焦点更改为另一个窗口。
DELETE/session/:sessionId/window关闭当前窗口。
POST/session/:sessionId/window/:windowHandle/size更改指定窗口的大小。
GET/session/:sessionId/window/:windowHandle/size获取指定窗口的大小。
POST/session/:sessionId/window/:windowHandle/position更改指定窗口的位置。
GET/session/:sessionId/window/:windowHandle/position获取指定窗口的位置。
POST/session/:sessionId/window/:windowHandle/maximize如果指定的窗口尚未最大化,则将其最大化。
GET/session/:sessionId/cookie检索当前页面可见的所有 cookie。
POST/session/:sessionId/cookie设置 cookie。
DELETE/session/:sessionId/cookie删除当前页面可见的所有 cookie。
DELETE/session/:sessionId/cookie/:name删除具有给定名称的 cookie。
GET/session/:sessionId/source获取当前页面源代码。
GET/session/:sessionId/title获取当前页面标题。
POST/session/:sessionId/element从文档根目录开始,在页面上搜索元素。
POST/session/:sessionId/elements从文档根目录开始,在页面上搜索多个元素。
POST/session/:sessionId/element/active获取页面上当前具有焦点的元素。
GET/session/:sessionId/element/:id描述已识别的元素。
POST/session/:sessionId/element/:id/element从已识别的元素开始,在页面上搜索元素。
POST/session/:sessionId/element/:id/elements从已识别的元素开始,在页面上搜索多个元素。
POST/session/:sessionId/element/:id/click单击元素。
POST/session/:sessionId/element/:id/submit提交 FORM 元素。
GET/session/:sessionId/element/:id/text返回元素的可见文本。
POST/session/:sessionId/element/:id/value向元素发送一系列按键。
POST/session/:sessionId/keys向活动元素发送一系列按键。
GET/session/:sessionId/element/:id/name查询元素的标签名称。
POST/session/:sessionId/element/:id/clear清除 TEXTAREAtext INPUT 元素的值。
GET/session/:sessionId/element/:id/selected确定 OPTION 元素,或类型为 checkboxradiobuttonINPUT 元素当前是否被选中。
GET/session/:sessionId/element/:id/enabled确定元素当前是否启用。
GET/session/:sessionId/element/:id/attribute/:name获取元素的属性值。
GET/session/:sessionId/element/:id/equals/:other测试两个元素 ID 是否指向同一个 DOM 元素。
GET/session/:sessionId/element/:id/displayed确定元素当前是否显示。
GET/session/:sessionId/element/:id/location确定元素在页面上的位置。
GET/session/:sessionId/element/:id/location_in_view确定元素滚动到视图中后在屏幕上的位置。
GET/session/:sessionId/element/:id/size确定元素以像素为单位的大小。
GET/session/:sessionId/element/:id/css/:propertyName查询元素的计算 CSS 属性的值。
GET/session/:sessionId/orientation获取当前浏览器方向。
POST/session/:sessionId/orientation设置浏览器方向。
GET/session/:sessionId/alert_text获取当前显示的 JavaScript alert()confirm()prompt() 对话框的文本。
POST/session/:sessionId/alert_text向 JavaScript prompt() 对话框发送按键。
POST/session/:sessionId/accept_alert接受当前显示的警报对话框。
POST/session/:sessionId/dismiss_alert关闭当前显示的警报对话框。
POST/session/:sessionId/moveto将鼠标移动到指定元素的偏移量位置。
POST/session/:sessionId/click单击任意鼠标按钮(在上次 moveto 命令设置的坐标处)。
POST/session/:sessionId/buttondown单击并按住鼠标左键(在上次 moveto 命令设置的坐标处)。
POST/session/:sessionId/buttonup释放之前按住的鼠标按钮(鼠标当前所在的位置)。
POST/session/:sessionId/doubleclick在当前鼠标坐标处双击(由 moveto 设置)。
POST/session/:sessionId/touch/click在启用触摸的设备上进行单次点击。
POST/session/:sessionId/touch/down手指在屏幕上按下。
POST/session/:sessionId/touch/up手指在屏幕上抬起。
POSTsession/:sessionId/touch/move手指在屏幕上移动。
POSTsession/:sessionId/touch/scroll使用基于手指的运动事件在触摸屏上滚动。
POSTsession/:sessionId/touch/scroll使用基于手指的运动事件在触摸屏上滚动。
POSTsession/:sessionId/touch/doubleclick使用手指运动事件在触摸屏上双击。
POSTsession/:sessionId/touch/longclick使用手指运动事件在触摸屏上长按。
POSTsession/:sessionId/touch/flick使用手指运动事件在触摸屏上轻弹。
POSTsession/:sessionId/touch/flick使用手指运动事件在触摸屏上轻弹。
GET/session/:sessionId/location获取当前的地理位置。
POST/session/:sessionId/location设置当前的地理位置。
GET/session/:sessionId/local_storage获取存储的所有键。
POST/session/:sessionId/local_storage为给定的键设置存储项。
DELETE/session/:sessionId/local_storage清除存储。
GET/session/:sessionId/local_storage/key/:key获取给定键的存储项。
DELETE/session/:sessionId/local_storage/key/:key删除给定键的存储项。
GET/session/:sessionId/local_storage/size获取存储中的项目数。
GET/session/:sessionId/session_storage获取存储的所有键。
POST/session/:sessionId/session_storage为给定的键设置存储项。
DELETE/session/:sessionId/session_storage清除存储。
GET/session/:sessionId/session_storage/key/:key获取给定键的存储项。
DELETE/session/:sessionId/session_storage/key/:key删除给定键的存储项。
GET/session/:sessionId/session_storage/size获取存储中的项目数。
POST/session/:sessionId/log获取给定日志类型的日志。
GET/session/:sessionId/log/types获取可用的日志类型。
GET/session/:sessionId/application_cache/status获取 html5 应用程序缓存的状态。

命令详细信息

/status

GET /status

查询服务器的当前状态。 如果服务器处于活动状态并接受命令,则应响应一个通用的“HTTP 200 OK”响应。 响应主体应是一个描述服务器状态的 JSON 对象。 所有服务器实现都应返回两个基本对象,描述服务器的当前平台和服务器的构建时间。 所有字段都是可选的;如果省略,客户端应假定该值为未知。 此外,服务器实现可能包含此处未列出的其他字段。

类型描述
buildobject
build.version字符串通用发布标签(例如“2.0rc3”)
build.revision字符串构建服务器的本地源代码控制客户端的修订版本
build.time字符串服务器的构建时间戳。
osobject
os.arch字符串当前系统架构。
os.name字符串服务器当前运行的操作系统的名称:“windows”、“linux”等。
os.version字符串操作系统版本。
Returns
{object} 一个描述服务器总体状态的对象。

/session

POST /session

创建新会话。 服务器应尝试创建最符合期望和所需功能的会话。 所需的功能比期望的功能具有更高的优先级,并且必须设置才能创建会话。
JSON 参数
desiredCapabilities - {object} 一个描述会话的期望功能的对象。
requiredCapabilities - {object} 一个描述会话的所需功能的对象(可选)。
Returns
{object} 一个描述会话的实际功能的对象。
潜在错误
SessionNotCreatedException - 如果无法设置所需的功能。

/sessions

GET /sessions

返回当前活动会话的列表。 每个会话都将作为 JSON 对象列表返回,其中包含以下键

类型描述
id字符串会话 ID。
capabilitiesobject一个描述会话的实际功能的对象。
Returns
{Array.<Object>} 当前活动会话的列表。

/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 - 如果脚本抛出错误。

/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 事件。

/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

将焦点更改为页面上的另一个框架。如果框架 idnull,则服务器
应切换到页面的默认内容。
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

设置 cookie。如果未指定 cookie 路径,则应将其设置为 "/"。同样,如果省略了域,则应默认为当前页面的域。
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
JSON 参数
cookie - {object} 定义要添加的 cookie 的 JSON 对象

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 - 如果当前选定的窗口已关闭。

/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 并且输入表达式无效。

/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 并且输入表达式无效。

/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 并且输入表达式无效。

/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 并且输入表达式无效。

/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 用于表示可按下的非文本键(见下表)。


代码
NULLU+E000
取消U+E001
帮助U+E002
退格键U+E003
TabU+E004
清除U+E005
返回1U+E006
Enter1U+E007
ShiftU+E008
ControlU+E009
AltU+E00A
暂停U+E00B
EscU+E00C
代码
空格U+E00D
PageupU+E00E
PagedownU+E00F
EndU+E010
HomeU+E011
左箭头U+E012
上箭头U+E013
右箭头U+E014
下箭头U+E015
插入U+E016
删除U+E017
分号U+E018
等于号U+E019
代码
数字键盘 0U+E01A
数字键盘 1U+E01B
数字键盘 2U+E01C
数字键盘 3U+E01D
数字键盘 4U+E01E
数字键盘 5U+E01F
数字键盘 6U+E020
数字键盘 7U+E021
数字键盘 8U+E022
数字键盘 9U+E023
代码
乘号U+E024
加号U+E025
分隔符U+E026
减号U+E027
小数点U+E028
除号U+E029
代码
F1U+E031
F2U+E032
F3U+E033
F4U+E034
F5U+E035
F6U+E036
F7U+E037
F8U+E038
F9U+E039
F10U+E03A
F11U+E03B
F12U+E03C
Command/MetaU+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

向活动元素发送一系列按键。此命令在各个方面都与 send keys 命令相似,除了隐式终止:修饰符在调用结束时不会被释放。相反,修饰键的状态在调用之间保持,因此可以在按下修饰键的同时执行鼠标交互。
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
JSON 参数
value - {Array.<string>} 要发送的按键序列。该序列在send keys命令中定义。
潜在错误
NoSuchWindow - 如果当前选定的窗口已关闭。

/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

清除 TEXTAREAtext 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 元素,或类型为 checkboxradiobuttonINPUT 元素当前是否被选中。
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) 指的是页面的左上角。元素的坐标作为具有 xy 属性的 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

确定元素的大小(以像素为单位)。该大小将作为具有 widthheight 属性的 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。

/session/:sessionId/orientation

GET /session/:sessionId/orientation

获取当前的浏览器方向。服务器应返回 ScreenOrientation 中定义的有效方向值:{LANDSCAPE|PORTRAIT}
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
Returns
{string}ScreenOrientation 中定义的值对应的当前浏览器方向:{LANDSCAPE|PORTRAIT}
潜在错误
NoSuchWindow - 如果当前选定的窗口已关闭。

POST /session/:sessionId/orientation

设置浏览器方向。该方向应按照 ScreenOrientation 中的定义指定:{LANDSCAPE|PORTRAIT}
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
JSON 参数
orientation - {string} ScreenOrientation 中定义的新浏览器方向:{LANDSCAPE|PORTRAIT}
潜在错误
NoSuchWindow - 如果当前选定的窗口已关闭。

/session/:sessionId/alert_text

GET /session/:sessionId/alert_text

获取当前显示的 JavaScript alert()confirm()prompt() 对话框的文本。
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
Returns
{string} 当前显示的警报的文本。
潜在错误
NoAlertPresent - 如果没有显示警报。

POST /session/:sessionId/alert_text

向 JavaScript prompt() 对话框发送按键。
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
JSON 参数
text - {string} 要发送到 prompt() 对话框的按键。
潜在错误
NoAlertPresent - 如果没有显示警报。

/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

获取给定日志类型的日志。每次请求后日志缓冲区都会重置。
URL 参数
:sessionId - 要将命令路由到的会话的 ID。
JSON 参数
type - {string} 日志类型。必须提供此项。
Returns
{Array.<object>} 日志条目的列表。

/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}
上次修改时间:2022 年 1 月 10 日:更多维基 (#907) [部署站点] (adcf706a1ad)