• Selenium Video Tutorials

Selenium Grid - 配置



最新版本的 Selenium Grid 与旧版本 Selenium Grid 有很多不同之处。旧版本的 Selenium Grid 只有 Hub 和 Node 两种模式,而最新版本的 Selenium Grid 支持三种模式:独立模式、Hub 和 Node 模式以及分布式模式。

以前的 Selenium Grid 版本只有两种模式:Hub 和 Node,而最新版本的 Selenium Grid 有六个组件,如路由器、分发器、节点、会话队列、会话映射和事件总线。

配置 Selenium Grid 的先决条件

步骤 1 - 在系统中安装 Java(版本高于 8)并使用以下命令检查它是否存在:java -version。如果安装已成功完成,则将显示安装的 Java 版本。

步骤 2 - 通过打开浏览器并输入以下内容来检查 Grid 状态 -

  • 对于 UI 版本,键入https://127.0.0.1:4444

  • 对于非 UI 版本,键入https://127.0.0.1:4444/status

在这两种情况下,我们都会收到错误 - 无法访问此站点。因为 Selenium Grid 尚未启动。

Selenium Grid Configuration 1

Selenium Grid 中的独立模式配置

在最新版本的 Selenium Grid 中,无需分别启动 Hub 和 Node。因此,可以在同一台机器上同时触发 Hub 和 Node。使用单个独立命令,Hub 和 Node 将同时启动。因此,独立模式有助于节省资源和时间。

配置独立模式的步骤如下所列 -

步骤 1 - 从以下链接下载 Selenium 独立 Jar 并将其保存在文件夹中 -

https://github.com/SeleniumHQ/.

步骤 2 - 从 Selenium 独立 Jar 所存储的文件夹位置,从终端运行以下命令 -

java -jar selenium-server-<version>.jar standalone.

步骤 3 - 通过打开浏览器并输入https://127.0.0.1:4444再次检查 Grid 状态。

错误 - 无法访问此站点将不再存在,我们将获得显示不同浏览器的 Grid 状态。这将证明 Selenium Grid 已在独立模式下触发。

Selenium Grid Configuration 2

步骤 4 -

Base.java 中的代码实现

package BaseClass;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class Base {
   public WebDriver setBrowser(String browserName) throws MalformedURLException {
      WebDriver driver = null;
      DesiredCapabilities dc = new DesiredCapabilities();
      if(browserName.equalsIgnoreCase("chrome")) {
         dc.setBrowserName("chrome");
      } else if(browserName.equalsIgnoreCase("edge")) {
         dc.setBrowserName("MicrosoftEdge");
      }

      // Initiate RemoteWebDriver
      driver = new RemoteWebDriver(new URL("https://127.0.0.1:4444"),dc);
      return driver;
   }
}

TestOne.java 中的代码实现

package Grid;

import BaseClass.Base;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.net.MalformedURLException;

public class TestOne extends Base {
   public WebDriver driver = null;
   @Test
   public void testOne() {
   
      // launch application
      driver.get("https://tutorialspoint.com/selenium/practice/links.php");

      // get page title
      System.out.println("Page title is: " + driver.getTitle() + " obtained from testOne");
   }
   @BeforeMethod
   public void setup() throws MalformedURLException {
      driver = setBrowser("chrome");
   }
   @AfterMethod
   public void tearDown() {
   
      // quitting browser
      driver.quit();
   }
}

TestOne.java 中的代码实现

package Grid;

import BaseClass.Base;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.net.MalformedURLException;

public class TestTwo extends Base {
   public WebDriver driver = null;
   @Test
   public void testTwo() {
   
      // launch application
      driver.get("https://tutorialspoint.com/selenium/practice/links.php");

      // get page title
      System.out.println("Page title is: " + driver.getTitle() + " obtained from testTwo");
   }
   @BeforeMethod
   public void setup() throws MalformedURLException {
      driver = setBrowser("edge");
   }

   @AfterMethod
   public void tearDown() {
   
      // quitting browser
      driver.quit();
   }
}

testng.xml 文件中的配置。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Grid Test">
   <test thread-count = "5" name="Test">
      <classes>
         <class name="Grid.TestOne" />
         <class name="Grid.TestTwo"/>
      </classes>
   </test>
</suite>

步骤 5 - 从 testng.xml 文件运行测试。

它将显示以下输出 -

Page title is: Selenium Practice - Links obtained from testOne
Page title is: Selenium Practice - Links obtained from testTwo

===============================================
Grid Test
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

Process finished with exit code 0

在上面的示例中,我们配置了 Selenium Grid 的独立模式。

Selenium Grid 中的 Hub 和 Node 模式配置

在最新版本的 Selenium Grid 中,Hub 和 Node 模式需要在单独的机器上触发 Hub 和 Node。Hub 包含路由器、分发器、会话映射、新会话队列和事件总线等组件。

配置 Hub 和 Node 模式的步骤如下所列 -

步骤 1 - 从以下链接下载 Selenium 独立 Jar 并将其保存在文件夹中 -

https://github.com/SeleniumHQ/selenium/releases.

步骤 2 - 从 Selenium 独立 Jar 所存储的文件夹位置,从终端运行以下命令 -

java -jar selenium-server-<version>.jar hub.

请注意 - 注册 Hub 时在命令行日志中收到的 Hub IP 地址。

步骤 3 - 通过打开浏览器并输入https://127.0.0.1:4444检查 Grid 状态。

错误 - 无法访问此站点将不再存在,我们将获得显示消息 - Grid 尚未注册任何节点的状态。这是因为节点尚未注册。

Selenium Grid Configuration 3

在同一台机器上运行节点

按照上述步骤 1、2 和 3 配置 Hub 后,导航到 Selenium 独立 Jar 所存储的文件夹位置,并通过打开另一个新的终端窗口运行以下命令 -

java -jar selenium-server-<version>.jar node.

这将有助于在同一台机器上启动节点。

通过打开浏览器并输入https://127.0.0.1:4444再次检查 Grid 状态。

显示的消息 - Grid 尚未注册任何节点将不存在,取而代之的是,节点将反映出来。

Selenium Grid Configuration 4

在不同的机器上运行节点

步骤 1 - 在另一台机器上从以下链接下载 Selenium 独立 Jar 并将其保存在文件夹中 -

https://github.com/SeleniumHQ/selenium/releases.

步骤 2 - 导航到 Selenium 独立 Jar 所存储的文件夹位置,并通过打开终端窗口运行以下命令 -

java -jar selenium-server-<version>.jar node 
   --detect-drivers true --publish-events tcp://{hub IP Address}:4442 
   --subscribe-events tcp://{hub IP Address}:4443.

请注意 - Hub IP 地址将在步骤 3 中获得的注册 Hub 时收到的命令行日志中提供。

这将有助于在不同的机器上启动节点。

步骤 3 - 通过打开浏览器并输入https://127.0.0.1:4444再次检查 Grid 状态。

显示的消息 - Grid 尚未注册任何节点将不存在,取而代之的是,节点将反映出来。

Selenium Grid Configuration 5

步骤 4 - 运行为独立模式编写的相同测试,该测试来自 testng.xml 文件。

它将显示以下输出 -

Page title is: Selenium Practice - Links obtained from testOne
Page title is: Selenium Practice - Links obtained from testTwo

===============================================
Grid Test
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

Process finished with exit code 0

在上面的示例中,我们配置了 Selenium Grid 的 Hub 和 Node 模式。

Selenium Grid 中的分布式配置

当需要设置大量节点以构建大型 Grid 时,使用 Selenium Grid 的分布式模式,其中只有一个 Hub 和许多分布在多台机器上的节点。在这种情况下,Hub 和 Node 模式不是理想的选择。

此外,在分布式模式下,每个组件(路由器、分发器、会话映射、新会话队列和事件总线)都可以使用不同的命令单独启动。

配置分布式模式的步骤如下所列 -

步骤 1 - 从以下链接下载 Selenium 独立 Jar 并将其保存在文件夹中 -

https://github.com/SeleniumHQ/selenium/releases

步骤 2 - 从 Selenium 独立 Jar 所存储的文件夹位置,从终端运行以下命令以启动事件总线 -

java -jar selenium-server-<version>.jar event-bus.

请注意在终端的命令行日志中事件总线启动时的IP地址。

步骤 3 − 在按照步骤 2 配置事件总线后,导航到存储 Selenium 独立 Jar 的文件夹位置,并通过打开另一个新的终端窗口运行以下命令以启动 Session Map −

java -jar selenium-server-<version>.jar sessions.

请注意在终端的命令行日志中 Session Map 启动时的IP地址。

步骤 4 − 在按照步骤 3 配置 Session Map 后,导航到存储 Selenium 独立 Jar 的文件夹位置,并通过打开另一个新的终端窗口运行以下命令以启动 Session Queue −

java -jar selenium-server-<version>.jar sessionqueue.

请注意在终端的命令行日志中 Session Queue 启动时的IP地址。

步骤 5 − 在按照步骤 4 配置 Session Queue 后,导航到存储 Selenium 独立 Jar 的文件夹位置,并通过打开另一个新的终端窗口运行以下命令以启动 Distributor −

java -jar selenium-server-<version>.jar distributor 
   --sessions http://{IP Address of Session Map}:5556 
   --sessionqueue http://{IP Address of Session Queue}:5559 --bind-bus false.

请注意在终端的命令行日志中 Distributor 启动时的IP地址。

步骤 6 − 在按照步骤 5 配置 Distributor 后,导航到存储 Selenium 独立 Jar 的文件夹位置,并通过打开另一个新的终端窗口运行以下命令以启动 Router −

java -jar selenium-server-<version>.jar router 
   --sessions http://{IP Address of Session Map}:5556 
   --distributor http://{IP Address of Distributor}:5553 
   --sessionqueue http://{IP Address of Session Queue}:5559.

请注意在终端的命令行日志中 Router 启动时的IP地址。

在按照步骤 6 配置 Router 后,导航到存储 Selenium 独立 Jar 的文件夹位置,并通过打开另一个新的终端窗口运行以下命令 −

java -jar selenium-server-<version>.jar node.

这将有助于在同一台机器上启动节点。

在不同的机器上运行节点

在按照步骤 6 配置 Router 后,导航到存储 Selenium 独立 Jar 的文件夹位置,并通过打开一个新的终端窗口运行以下命令 −

java -jar selenium-server-<version>.jar node 
   --detect-drivers true --publish-events tcp://{hub IP Address}:4442 
   --subscribe-events tcp://{hub IP Address}:4443.

我们在 Hub 和 Node 配置期间注册 Hub 时收到的 Hub IP 地址。

这将有助于在不同的机器上启动节点。

这总结了我们关于 Selenium Grid - 配置教程的全面概述。我们从描述配置 Selenium Grid 的先决条件开始,并逐步介绍了 Selenium Grid 中独立、Hub 和 Node 以及分布式模式配置的步骤。

这使您具备了 Selenium Grid 配置的深入知识。明智的做法是不断练习您学到的知识,并探索与 Selenium 相关的其他知识,以加深您的理解并扩展您的视野。

广告