Selenium 如何与 Web 浏览器交互?

seleniumautomation testingtesting tools

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

Selenium 有 4 种版本 −

  • Selenium-IDE
  • Selenium-RC
  • Selenium Grid
  • Selenium Web Driver

让我们来看看每种版本的用途 −

  • Selenium IDE − 它是一个集成开发环境,具有易于使用的界面,可用于构建和运行 Selenium 测试用例。它是一种原型设计工具,用于构建测试脚本,记录用户执行的操作。记录的操作将存储为脚本,可在需要时重复使用。

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

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

  • Selenium RC − RC 是一种远程控制工具,其工作原理是获取浏览器的远程控制,然后通过注入编写的自定义脚本来注入待测试的自动化代码。Selenium RC 使用 Selenium RC 服务器与浏览器交互。它在网页加载时将 JavaScript 函数注入浏览器。

    RC 的优势在于它能够自动生成测试结果的 HTML 文件,而 Web 驱动程序不具备此功能。

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

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

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

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

  • Selenium Web 驱动程序 − Web 驱动程序直接在浏览器上运行,并使用浏览器内置功能来触发测试人员编写的自动化测试。

    Web 驱动程序的另一个优势是它可以在 HTMLUnit 浏览器上使用(HTMLUnit 浏览器是无头浏览器,这意味着它们对用户不可见,简单来说它们没有 GUI),由于 HTMLUnit 浏览器节省了加载页面元素所需的时间,因此在 HTMLUnit 浏览器上进行测试的速度更快。这可以减少测试用例的执行时间。

    由于 Web 驱动程序从操作系统级别控制浏览器,因此其速度比其前身 Selenium RC 更快。

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

上图展示了 Selenium Web 驱动程序的工作原理。以下是组合在一起执行自动化测试脚本的不同模块。

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

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

自定义客户端(无头浏览器) − 浏览器驱动程序充当浏览器的助手,它与相应的浏览器通信,但不透露浏览器功能的内部逻辑。当任何浏览器驱动程序收到任何命令时,它将在相应的浏览器上执行并返回 HTTP 响应。驱动程序专门针对用于安全连接的每个浏览器。所有这些浏览器驱动程序都直接在操作系统上运行,这使得它比传统的 Selenium RC 更快。

既然我们已经了解了 Selenium 的内部结构,现在让我们来看看在 Selenium 中执行脚本时各个步骤的典型执行情况 −

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

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

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

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

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


相关文章