Chrome 驱动程序如何与 Chrome 浏览器交互?

Jcy*_*rss 9 selenium google-chrome webdriver selenium-chromedriver selenium-webdriver

它说

ChromeDriver 是一个实现W3C WebDriver 标准的独立服务器

看起来W3C WebDriver标准只定义了自动化程序和Chromedriver之间的接口。Chromedriver 充当 HTTP 服务器来从自动化程序获取命令。

但是 ChromeDriver 如何与 Chrome 通信呢?

还是通过HTTP协议?

如果是,我们在哪里可以获得有关详细信息的文档?Chrome 内部的哪个组件负责处理来自 Chromedriver 的命令?它是 Chrome 内置的还是只是 Chrome 的扩展?

Deb*_*anB 6

Selenium的核心是WebDriver,它是远程控制接口,可实现用户代理的自省和控制。WebDriver 提供了一个平台和语言中立的有线协议,作为进程外程序远程指示 Web 浏览器行为的一种方式,因此指令集可以在许多浏览器中互换运行。


Selenium WebDriver指的是语言绑定和单个浏览器控制代码的实现,通常称为 WebDriver。WebDriver是一种 API 和协议,定义了用于控制 Web 浏览器行为的语言中立接口。每个浏览器都由特定的 WebDriver 实现(称为驱动程序)支持。驱动程序是负责委托给浏览器的组件,并处理 Selenium 和浏览器之间的通信。


零部件

在最低要求下,WebDriver 通过驱动程序与浏览器通信,并且通信有两种方式:

  • WebDriver通过驱动程序将命令传递给浏览器
  • 通过相同的路线接收返回的信息。

Chrome驱动程序

ChromeDriver是一个实现W3C WebDriver 标准的独立服务器。ChromeDriver 适用于 Android 版 Chrome 和桌面版 Chrome(Mac、Linux、Windows 和 ChromeOS)。驱动程序与浏览器运行在同一系统上。这可能是也可能不是执行测试本身的同一系统,并且是直接通信的示例。

basic_comms.png


远程网络驱动程序

然而,与浏览器的通信也可以是通过Selenium Server或RemoteWebDriver的远程通信。RemoteWebDriver 与驱动程序和浏览器运行在同一系统上。

basic_comms_driver_webdriver.png


硒网格

还可以使用 Selenium Server 或 Selenium Grid 进行远程通信,这两者又与主机系统上的驱动程序进行通信。

远程通信服务器.png


通过命令进行通信

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


命令处理

远程端是一个 HTTP 服务器,通常通过 TCP 套接字读取来自客户端的请求并写入响应。在本规范中,通信被建模为特定本地端远程端之间通过连接进行的数据传输,远程端可以向该连接写入字节和读取字节。这种连接如何工作以及如何建立的确切细节是一个更大的话题,超出了这个问题的范围。建立连接后,远程端必须从连接中读取字节,直到可以从数据构造完整的 HTTP 请求。如果无法构造完整的 HTTP 请求,则远程端必须关闭连接,返回状态码为 500 的 HTTP 响应,或者返回错误码为未知的错误。


Jcy*_*rss 5

为了方便查找,我将评论中的答案移到了这里。

Chrome 驱动程序通过基于 websocket 的Chrome DevTools 协议控制 Chrome 浏览器。这篇文章提供了更多细节