协议:定义通过网络交换数据的方法的标准。 如果浏览器想要与服务器通信,它必须创建一个HTTP请求并将该HTTP请求发送到服务器以传达其资源和选项请求。服务器接收请求并对其进行处理,并执行必要的操作并创建要发送到浏览器的HTTP响应。浏览器在创建 HTTP 请求时必须遵循 HTTP 规范。服务器在创建 HTTP 响应时还必须遵循 HTTP 规范。这就是浏览器和服务器之间的通信以标准方式发生的方式,以避免通过遵循HTTP协议来避免冲突。
Json Wire 协议:客户端有一个必须发送到服务器的对象。客户端将此对象转换为 JSON 对象并将其发送到服务器。服务器解析 JSON 对象并将其转换回对象以供使用。服务器将响应对象转换为 JSON 对象,并将其发送回客户端。然后,客户端将 JSON 对象转换为对象以供使用。
为什么后者被称为Json Wire Protocol?
你对Protocol和JsonWireProtocol的看法都非常正确。在这一点上值得一提的是,早期所有与浏览器或远程WebDriver服务器通信的WebDriver实现都应使用通用的有线协议。此有线协议使用 JSON over HTTP 定义了一个 RESTful Web 服务。
JSON Wire 协议是一个抽象的规范,说明自动化行为(如单击或键入)或您实际想要对自动化脚本执行的任何操作如何映射到 selenium 或 appium 或 HTTP 请求和响应。该协议将假定WebDriver API已被"扁平化",但期望客户端实现将采用更加面向对象的方法,如现有的Java API所示。线路协议在"命令"和"响应"的请求/响应对中实现。
什么是JSON Wire协议?
JSON(JavaScript Object Notation)是一种轻量级格式,用于客户端和服务器之间的数据交换。应用程序使用 JSON 对象在 Web 世界中相互发送和接收数据。JSON 数据结构是行业标准,可用于作为键值对发送和接收数据。有人说它是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协议现在已经过时了,WebDriver W3C Living Document是新的实现。
网络驱动程序通信
WebDriver 协议被组织成命令。具有规范中定义的方法和模板的每个 HTTP 请求表示单个命令,因此每个命令生成单个 HTTP 响应。为了响应命令,远程端将运行一系列称为远程端步骤的操作。这些提供了远程端在接收特定命令时执行的操作序列。
命令处理
远程端是 HTTP 服务器读取来自客户端的请求并通常通过 TCP 套接字写入响应。在规范中,通信被建模为特定本地端和远程端之间的数据传输,远程端可以写入字节和读取字节的连接。这种联系如何工作以及如何建立的确切细节是一个更大的话题,超出了这个问题的范围。建立连接后,远程端必须从连接中读取字节,直到可以从数据构造完整的 HTTP 请求。如果无法构造完整的 HTTP 请求,则远程端必须关闭连接,返回状态代码为 500 的 HTTP 响应,或返回错误代码未知错误的错误。
尾声
使用Selenium时JsonWireProtocol机制与W3C Living Document新标准的区别