首页 > 解决方案 > 协议和Json Wire协议有什么区别

问题描述

协议:定义通过网络交换数据的方法的标准。如果浏览器想要与服务器通信,它必须创建一个 HTTP 请求并将该 HTTP 请求发送到服务器以传达其对资源和选项的请求。服务器接收请求并对其进行处理并执行必要的操作并创建 HTTP 响应以发送到浏览器。浏览器在创建 HTTP 请求时必须遵循 HTTP 规范。服务器还必须遵循 HTTP 规范来创建 HTTP 响应。这就是浏览器和服务器之间的通信以标准方式发生的方式,通过遵循 HTTP 协议来避免冲突。

Json Wire Protocol:客户端有一个必须发送到服务器的对象。客户端将此对象转换为 JSON 对象并将其发送到服务器。服务器解析 JSON 对象并将其转换回对象以供使用。服务器将响应对象转换为 JSON 对象并将其发送回客户端。然后客户端将 JSON 对象转换为对象以供使用。

为什么后者被称为Json Wire Protocol

标签: jsonhttpselenium-webdriverprotocolswebdriver-w3c-spec

解决方案


您对ProtocolJsonWireProtocol都非常正确。此时值得一提的是,之前所有与浏览器或 RemoteWebDriver 服务器通信的WebDriver实现都应使用通用有线协议。此有线协议使用基于 HTTP的JSON定义了一个RESTful Web 服务。

JSON Wire Protocol是一种抽象规范,说明了自动化行为(如单击或键入)或您实际想要对自动化脚本执行的任何操作如何映射到 selenium 或 appium 或 HTTP 请求和响应。该协议将假定 WebDriver API 已“扁平化”,但期望客户端实现将采用更加面向对象的方法,如现有 Java API 所示。有线协议在“命令”和“响应”的请求/响应对中实现。


什么是JSON Wire 协议

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" }
}

为什么首先使用JSON Wire 协议?

实现一个客户端-服务器架构,它可以给我们带来以下好处。

  • 您可以使用任何编程语言编写测试。
  • 您可以在 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 新标准的区别


推荐阅读