Selenium网格教程:设置和跨浏览器测试


什么是硒网格?

SeleniumGrid是一个测试工具,它允许我们在不同的机器上针对不同的浏览器运行测试。它是Selenium套件的一部分,专门用于跨不同的浏览器,操作系统和计算机运行多个测试。您可以通过Selenium Remote的功能指定所需的浏览器,浏览器版本和操作系统,从而使用Selenium Remote连接到它。

Selenium网格有两个主要元素-集线器和节点。

什么是枢纽?

在Selenium网格中,集线器是一台计算机,它是我们可以加载测试的中心点。集线器还充当服务器,因此它充当控制测试机器网络的中心点。硒网格只有一个集线器,它是网络的主人。当将具有给定DesiredCapabilities的测试提供给hub时,hub将搜索与给定配置匹配的节点。例如,你可以说你想在Windows 10和任何版本的Chrome浏览器上运行测试。集线器将尝试在网格中找到一台符合标准的机器,并在该机器上运行测试。如果不匹配,则集线器返回错误。网格中应该只有一个集线器。

什么是节点?

在硒网格中,节点 是一台选择与集线器连接的测试机。集线器将使用此测试计算机来运行测试。网格网络可以有多个节点。一个节点应该有不同的平台,即不同的操作系统和浏览器。节点不需要与集线器相同的运行平台。

Selenium网格的工作原理

首先,您需要创建一个集线器。然后您可以将节点连接(或“注册”)到该集线器。节点是测试运行的地方,集线器负责确保测试在正确的机器上结束(例如,在测试中指定了操作系统和浏览器的机器)。

体系结构和RemoteWebDriver工作流

您可以使用与本地使用WebDriver相同的方式来使用RemoteWebDriver。主要区别在于,需要对RemoteWebDriver进行配置,以便它可以在单独的计算机上运行您的测试。RemoteWebDriver由两部分组成:客户端和服务器。客户端是您的WebDriver测试,服务器只是一个Java servlet,它可以托管在任何现代JEE应用程序服务器中。

RemoteWebDriver是WebDriver接口的实现类,测试脚本开发人员可以使用它通过远程计算机上的RemoteWebDriver服务器执行他们的测试脚本。

RemoteWebDriver有两个部分:服务器(集线器)和客户端(节点)。

RemoteWebDriver服务器是一个在端口上侦听来自RemoteWebDriver的各种请求的组件,一旦它接收到请求,它将它们转发到以下任一项:Firefox驱动程序,IE驱动程序或Chrome驱动程序,无论请求的是哪个。

作为RemoteWebDriver的语言绑定客户端库(客户端在本地执行测试时通常使用)将测试脚本请求转换为JSON有效负载,并使用JSON wire协议将它们发送到RemoteWebDriverserver。

当您在本地执行测试时,WebDriver客户端库直接与您的Firefox驱动程序,IE驱动程序或Chrome驱动程序对话。现在,当您尝试远程执行测试时,WebDriver客户端库会与RemoteWebDriver服务器进行对话,而服务器会与Firefox驱动程序,IE驱动程序或Chrome驱动程序进行对话,无论WebDriver客户端需要哪个。

在本教程中,我们将一步一步地完成这一工作,但首先让我们看看总体架构图,了解工作流是如何发生的。下面有些行话。

JSON over Wire:JSON消息保存服务器所需的全部信息[可以是Selenium GRID或WebDriver组件],因此在服务器和客户机之间交换的不是RPC,而是纯JSON消息。也称为WebDriver协议。

所需功能:自动化代码中的对象,它具有请求浏览器配置信息。

RemoteWebDriver:自动化代码中的对象,它知道如何与WebDriver/Selenium网格进行远程通信。

启动集线器

我们现在要推出一个集线器。打开命令提示符并导航到C:驱动器,因为那是我们放置Selenium服务器的目录。在命令提示符下,键入:

 java -jar selenium-server-standalone-3.3.1.jar -role hub 

要验证集线器是否正在运行,请打开浏览器并导航到http://localhost:4444。

现在单击Console链接,然后单击View Config。集线器的配置应如下所示:

单击View Config。

设置节点计算机

理想情况下,节点机器必须与集线器机器不同,但是为了保持本教程的简单性,我正在运行集线器的同一台机器上设置节点。步骤相同,只是将IP地址改为节点机IP地址。

要向节点计算机注册集线器计算机,请键入:

java -jar selenium-server-standalone-3.3.1.jar -role node -hubhttp://192.168.1.164:4444/grid/register -port 5555


执行命令后,返回集线器并导航URL http://localhost:4444或http://192.168.1.164:4444,集线器现在将显示附加到它的节点。