WebDriver 错误

任何发送到 WebDriver 的 命令 都可能收到错误 响应。错误由 HTTP 响应 表示,该响应包含 HTTP 状态代码(在 4xx 或 5xx 范围内),以及包含错误详细信息的 JSON 有效载荷。

有效载荷

**错误对象** 是一个 JSON 对象,它包含三个,有时四个字段

error

错误类型。

message

对错误性质的人类可读描述。

stacktrace

发生错误时活动堆栈帧的堆栈跟踪报告。

data(可选)

任意且由实现定义的数据,可以用来向用户展示这些数据。

许多驱动程序在遇到 意外打开警报 错误时,会包含 用户提示 的文本。

示例

例如,对 /session/1234/urlGET 请求(其中 1234 是一个伪造的会话)将返回一个带有 404 Not Found 状态的响应,以及以下主体

json
{
  "value": {
    "error": "invalid session id",
    "message": "No active session with ID 1234",
    "stacktrace": ""
  }
}

驱动程序可以选择使用其他错误数据来注释错误。值得注意的是,当用户提示(如 window.alert)在您之前的 WebDriver 命令请求执行后打开一个模态对话框时,这很常见。

由于 WebDriver 和 JavaScript 执行都会被此类对话框阻止,因此我们在后续响应中看到 意外打开警报 错误

json
{
  "value": {
    "error": "unexpected alert open",
    "message": "",
    "stacktrace": "",
    "data": {
      "text": "Message from window.alert"
    }
  }
}

在大多数 客户端 中,错误将由某种错误类型对象表示表示。在 Python 中,它表示为 WebDriverException,在 Node.js 中表示为 WebDriverError,在 Java 中也表示为 WebDriverException

错误表

错误类型 HTTP 状态代码 描述
元素点击被拦截 400 错误请求 元素点击 命令 无法完成,因为接收事件的 元素 遮挡了请求点击的元素。
元素不可交互 400 错误请求 命令 无法完成,因为元素无法通过指针或键盘进行交互。
不安全的证书 400 错误请求 导航导致用户代理遇到证书警告,这通常是由于 TLS 证书过期或无效造成的。
无效参数 400 错误请求 传递给 命令 的参数无效或格式错误。
无效的 Cookie 域 400 错误请求 尝试在与当前页面不同的域下设置 Cookie,这是非法的。
无效的元素状态 400 错误请求 命令 无法完成,因为元素处于无效状态,例如,尝试 清除 不可编辑且不可重置的元素。
无效选择器 400 错误请求 元素检索命令提供了一个未知的选择器策略。
无效的会话 ID 404 未找到 给定的会话 ID 无法识别,这意味着会话不存在或未处于活动状态。请注意,已删除 的会话无法重新使用。
JavaScript 错误 500 内部服务器错误 在执行用户提供的 JavaScript 时发生错误。
移动目标超出边界 500 内部服务器错误 鼠标交互的目标不在浏览器的视窗中,也无法移入视窗中。
没有此警报 404 未找到 尝试对未打开的用户提示进行操作。
没有此 Cookie 404 未找到 在当前 文档Cookie 中,没有找到与给定路径名称匹配的 Cookie。
没有此元素 404 未找到 使用给定的搜索参数无法在页面上找到元素。
没有此框架 404 未找到 切换到框架的 命令 无法满足,因为找不到该框架。
没有此窗口 404 未找到 切换到窗口的 命令 无法满足,因为找不到该窗口。
脚本超时 408 请求超时 脚本在超时时间到期前未完成。
未创建会话 500 内部服务器错误 无法创建新会话,原因可能是无法启动浏览器,或者提供的 功能 不匹配,无法启动会话。
过时的元素引用 404 未找到 命令 失败,因为引用的 元素 不再附加到 DOM。
超时 408 请求超时 操作在超时时间到期前未完成。
无法设置 Cookie 500 内部服务器错误 设置 Cookie 值的 命令 无法满足。
无法捕获屏幕 500 内部服务器错误 无法进行屏幕截图。
意外打开警报 500 内部服务器错误 模态对话框已打开,阻止了此操作。
未知命令 404 未找到 无法执行 命令,因为驱动程序不知道该命令。
未知错误 500 内部服务器错误 驱动程序在处理 命令 时发生未知错误。
未知方法 405 方法不允许 请求的 命令 与已知 URL 匹配,但与该 URL 的方法不匹配。
不支持的操作 500 内部服务器错误 指示应该已正确执行的 命令 由于某种原因无法支持。

另请参阅