4

我想知道使用 Selenium 进行 UI 测试时,JsonWireProtocol(状态:OBSOLETE)和 2019 年 12 月 31 日起的 W3C Living Document(新标准)中的机制有什么区别。我知道 Selenium 使用了以下内容:当我们创建一个新的驱动程序实例(C#)时:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
IWebDriver driver = new ChromeDriver();

我们实际上向 selenium 服务器发出POST /session请求。之后通过 JsonWireProtocol ,例如:

POST /session/:sessionId/element/:id/click,我们可以找到并点击特定元素,或者对其他请求进行一些其他操作...

那么现在有哪些新事物呢?谁能解释一下新标准?!如果有人深入这样做,我会很高兴!

WebDriver W3C 动态文档 2019 年 12 月 31 日

JsonWire协议

4

1 回答 1

3

WebDriver 有线协议

最初的WebDriver 有线协议草案是一个提议,即所有与浏览器或 RemoteWebDriver 服务器通信的 WebDriver 实现都应使用通用有线协议。该有线协议使用JSON over HTTP定义了一个RESTful Web 服务。

根据最初的提议和实践,一些 JSON 对象如下:

  • WebElement JSON Object:用于通过网络传输的 WebElement 的 JSON 表示。该对象将具有以下属性:

WebElement JSON 对象

  • 功能 JSON 对象:并非所有服务器实现都支持每个 WebDriver 功能。因此,在描述会话支持的功能时,客户端和服务器应使用具有下面列出的属性的 JSON 对象。
  • Desired Capabilities:客户端发送的 Capabilities JSON 对象,描述了服务器创建的新会话应具备的能力。任何省略的键都隐含地表明相应的能力是不相关的。更多在DesiredCapabilities
  • 实际功能:服务器返回的功能 JSON 对象,描述会话实际支持的功能。任何省略的键都隐含地表示不支持相应的功能。
  • ETC

WebDriver W3C 规范

随着WebDriver W3C 规范的引入,定义了以下标准:

  • WebDriver 远程端必须提供符合 HTTP 的有线协议,其中端点映射到不同的命令。
  • 虽然这个标准只定义了远端协议,但它对本地端应该如何实现没有提出任何要求。
  • 本地端仅在能够使用远程端协议的范围内兼容;对其暴露的面向用户的 API 没有任何要求。

命令

WebDriver 协议被组织成命令。每个带有本规范中定义的方法和模板的 HTTP 请求都代表一个命令,因此每个命令都会产生一个 HTTP 响应。作为对命令的响应,远程端将运行一系列称为远程端步骤的动作。这些提供了远程端在接收到特定命令时采取的操作序列。


端点

下面的端点表列出了每个端点节点命令的方法和 URI 模板以及它们在ChromeDriver中的当前支持

铬截图

奥特罗

协议和Json Wire协议有什么区别

于 2020-02-12T14:28:41.887 回答