Selenium 如何与 Web 浏览器交互?


Selenium 是一个用于 Web 应用自动化测试的开源框架。除此之外,它还可以用于各种管理任务,例如网站监控。

Selenium 有四种主要类型:

  • Selenium-IDE。
  • Selenium-RC。
  • Selenium Grid。
  • Selenium WebDriver。

让我们看看每种类型的用途:

  • Selenium IDE - 这是一个集成开发环境,具有易于使用的界面,用于构建和运行 Selenium 测试用例。它是一个原型工具,用于以记录用户操作的方式构建测试脚本。记录的操作将存储为脚本,可以根据需要重复使用。

    虽然 Selenium IDE 是一个 Firefox 插件,但通过使用 Selenium RC,可以在任何浏览器上运行在其上创建的脚本。

    它可以用于创建简单的测试用例,并对选定位置使用断言和验证,但对于创建高级测试用例,我们使用 Selenium RC 或 WebDriver。

  • Selenium RC - RC 是一个远程控制,它通过接管浏览器的控制权,然后通过注入编写的自定义脚本来执行自动化代码进行测试。Selenium RC 使用 Selenium RC 服务器与浏览器交互。它在网页加载时将 JavaScript 函数注入浏览器。

    RC 具有一个优势,因为它为用户提供自动化测试结果的 HTML 文件,而 WebDriver 则不具备此功能。

    Selenium RC 为其支持的每种语言(如 Java、C#、Perl、Ruby、PHP、Python)提供 API 和库,使其成为第一个允许用户使用他们喜欢的任何语言进行编程的自动化 Web 测试工具。

    它跨平台、跨浏览器工作,并且可以轻松支持新的浏览器。

  • Selenium Grid - 要在不同的远程机器上同时运行不同的测试用例,我们使用 Selenium Grid。这提高了执行速度。假设我们有一个测试套件,其中包含复杂和简单的测试用例。在这种情况下,我们可以根据复杂性划分测试用例并分别运行它们。

    更快地执行和并行执行测试用例是 Selenium Grid 的主要优势。在 Selenium RC 的支持下,它可以在多台远程机器上的多个环境中运行多个测试用例。

  • Selenium WebDriver - WebDriver 直接作用于浏览器,并使用浏览器内置的功能来触发测试人员编写的自动化测试。

    WebDriver 的另一个优势是它可以使用 HTMLUnit 浏览器(HTMLUnit 浏览器是无头浏览器,这意味着对用户来说是不可见的,简单来说就是没有 GUI),由于这些原因,在 HTMLUnit 浏览器上进行测试速度更快,因为这些浏览器节省了加载页面元素所需的时间。这导致测试用例的执行时间更短。

    由于 WebDriver 从操作系统级别控制浏览器,因此它比其前身 Selenium RC 更快。

现在让我们来看看 Selenium 的架构,以了解 Selenium 如何与不同的语言协同工作并支持不同的浏览器,从而产生相同的输出,即测试用例执行。

上图描述了 Selenium WebDriver 的工作原理。以下是组合在一起执行自动化测试脚本的不同模块。

Selenium 库 - 由于不同语言的限制,开发人员构建了 Selenium 客户端库/语言绑定以支持多种语言,例如,如果我们在 Java 中使用浏览器驱动程序,它将使用 Java 绑定。

数据通信 - 为在服务器和客户端(浏览器)之间进行通信,Selenium WebDriver 使用 JSON。JSON Wire Protocol 是一种 REST API,用于在 HTTP 服务器之间传输信息。每个浏览器驱动程序都有自己的 HTTP 服务器。

自定义客户端(无头浏览器) - 浏览器驱动程序充当浏览器的助手,它与相应的浏览器进行通信,而不会泄露浏览器功能的内部逻辑。当任何浏览器驱动程序接收到任何命令时,它将在相应浏览器上执行该命令并发送回 HTTP 响应。驱动程序只是特定于每个浏览器,用于安全连接。所有这些浏览器驱动程序都直接在操作系统之上工作,这使得它比传统的 Selenium RC 更快。

既然我们已经了解了 Selenium 的内部工作原理,那么让我们来看看当我们在 Selenium 中执行脚本时,典型情况下的执行步骤:

  • Selenium 脚本为每个 Selenium 命令创建一个 HTTP 请求并将其发送到浏览器驱动程序。

  • 然后使用浏览器驱动程序将 HTTP 请求发送到服务器。

  • 在 HTTP 服务器上执行步骤。

  • 执行状态被发送到 HTTP 服务器,然后由自动化脚本捕获。

简而言之,这就是 Selenium 的整个工作原理及其架构。

更新于:2020年7月1日

2K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告