您对Protocol和JsonWireProtocol都非常正确。此时值得一提的是,之前所有与浏览器或 RemoteWebDriver 服务器通信的WebDriver实现都应使用通用有线协议。此有线协议使用基于 HTTP的JSON定义了一个RESTful Web 服务。
JSON Wire Protocol是一种抽象规范,说明了自动化行为(如单击或键入)或您实际想要对自动化脚本执行的任何操作如何映射到 selenium 或 appium 或 HTTP 请求和响应。该协议将假定 WebDriver API 已“扁平化”,但期望客户端实现将采用更加面向对象的方法,如现有 Java API 所示。有线协议在“命令”和“响应”的请求/响应对中实现。
JSON(JavaScript Object Notation)是一种用于客户端和服务器之间数据交换的轻量级格式。应用程序使用 JSON 对象在网络世界中彼此之间发送和接收数据。JSON 数据结构是行业标准,可用于作为Key & Value 对发送和接收数据。有人说它是XML的一个非常好的替代品。我们可以将 JSON 文件保存为 .json 扩展名。
JSON 是什么样子的?
一个简单的 json 文件如下所示,有许多在线编辑器可用于编辑和验证 JSON 结构。
{
"Student":{
"FirstName":"Pawan",
"LastName":"Garia",
"IdNumber":"12345",
"City" : "New Delhi",
"EmailID" : "email@gmail.com" }
}
实现一个客户端-服务器架构,它可以给我们带来以下好处。
- 您可以使用任何编程语言编写测试。
- 您可以在 SauceLabs、BrowserStack 或 Selenium Grid 设置等云服务上执行或运行测试。
- 您不必只在本地机器上运行测试。
- 可以为浏览器创建不同的驱动程序(FirefoxDriver、ChromeDriver),并使用相同的标准分别实现。
因此,客户端-服务器实现需要事先制定一套标准的规范,以便服务器和客户端在请求和响应的到来和去向方面应该相互同步。这就像一种相互交流的语言。所以我们需要一些通用的规范来解决这种需求,而解决方案就是 HTTP。
为什么 HTTP 是解决方案?
HTTP 是 Web 标准,可以作为规范的良好基础。每种编程语言都有一个很好的 HTTP 库,可用于为请求和响应调用创建客户端和服务器。
JSON Wire 协议如何与 HTTP 一起使用?
HTTP 请求和响应通常由 GET 和 POST 请求组成,这超出了本讨论的范围。
当前状态
从Selenium的角度来看,JSON Wire Protocol现在已经过时,WebDriver W3C Living Document是新的实现。
WebDriver 通信
WebDriver 协议被组织成命令。每个带有规范中定义的方法和模板的HTTP 请求都代表一个命令,因此每个命令都会产生一个HTTP 响应。为响应命令,远程端将运行一系列称为远程端步骤的动作。这些提供了远程端在接收到特定命令时采取的操作序列。
命令处理
远程端是 HTTP 服务器从客户端读取请求并通常通过 TCP 套接字写入响应。在规范中,通信被建模为特定本地端和远程端之间的数据传输与远程端可以写入字节和读取字节的连接。这种连接如何工作以及如何建立的确切细节是一个更大的话题,超出了这个问题的范围。建立连接后,远程端必须从连接中读取字节,直到可以从数据构造完整的 HTTP 请求。如果无法构造完整的 HTTP 请求,则远程端必须关闭连接,返回状态码为 500 的 HTTP 响应,或者返回错误码未知错误的错误。
奥特罗
使用 Selenium 时 JsonWireProtocol 机制与 W3C Living Document 新标准的区别