Selenium 简明教程

Selenium Grid - Test Execution

最新版本的 Selenium Grid 与早期版本的 Selenium Grid 有很多不同之处。早期版本的 Selenium Grid 仅具有一种模式,即 Hub 和 Node,而最新版本的 Selenium Grid 支持三种模式:Standalone、Hub 和 Node 以及 Distributed。

以前版本的 Selenium Grid 仅包含两种模式 - Hub 和 Node,而最新版本的 Selenium Grid 具有六个组件,如 Router、Distributor、Nodes、Session Queue、Session Map 和 Event Bus。

Selenium Grid 是一种将测试分布在多台物理机或虚拟机上以使我们可以并行(同时)执行脚本的工具。它极大地加速了测试过程,并且可在多个浏览器和平台上运行测试,并向我们提供有关产品的快速且准确的反馈。

Selenium Grid 允许我们执行 WebDriver 的多个实例,或者 Selenium Remote Control 允许执行使用相同代码库的测试,因此代码不必存在于它们执行的系统上。 selenium-server-standalone 程序包包括 Hub、WebDriver 和 Selenium RC 来执行 grid 中的脚本。

Prerequisites For Test Execution in Selenium Grid

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

Step 2 − 通过打开浏览器并输入来检查 Grid 状态:

  1. 对于 UI 版本,键入 http://localhost:4444

  2. 对于非 UI 版本,键入 http://localhost:4444/status

对于这两种情况,我们都会收到错误 - 无法使用此网站。因为 Selenium Grid 尚未启动。

selenium grid test execution 1

Test Execution in Selenium Grid

在 Hub 和 Node 模式下在 Selenium Grid 中设置测试执行的步骤如下 −

Step 1 − 从以下链接下载 Selenium Standalone Jar 并将其保存在文件夹中 − https://github.com/SeleniumHQ/selenium/releases

Step 2 - 从已存储 Selenium Standalone Jar 的文件夹位置,从终端运行以下命令 -

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

Please Note - 在注册 hub 时从命令行日志中获得的 hub IP 地址。

在下面的图像中,它显示了 Hub 的成功触发。

selenium grid test execution 2

Step 3 − 通过打开浏览器并输入来检查 Grid 状态: http://localhost:4444

The Error - 将不再有“此网站无法访问”的显示,并且我们会获得显示消息的 Grid 状态 - Grid 还没有注册的 Node。这是因为尚未注册 Node。

selenium grid test execution 3

Run Node in Same Machine

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

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

这将有助于在同一台计算机中启动节点。

Run Node in Different Machine

Step 1 − 在另一台计算机上从以下链接下载 Selenium Standalone Jar 并将其保存在文件夹中 − https://github.com/SeleniumHQ/selenium/releases

Step 2 - 导航到已存储 Selenium Standalone 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.

Please Note - 在第 3 步中获得的注册中心时收到的命令行日志中可以获得注册中心的 IP 地址。

这将有助于在另一台计算机中启动节点。

在下面的图像中,它显示了从同一台计算机成功注册 Node。

selenium grid test execution 4

Step 3 − 通过打开浏览器并输入再次检查 Grid 状态: http://localhost:4444

The Message Showing - Grid 尚未注册任何节点,而不会在那里,取而代之的是,该节点将反映。

selenium grid test execution 5

Step 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("http://localhost: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://www.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();
   }
}

TestTwo.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://www.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>

Step 5 - 从 testng.xml 文件中运行测试。

它将显示以下内容 output

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 - 测试执行教程的全面讲解。我们首先描述了在 Selenium Grid 中执行测试执行的先决条件,以及如何在 Selenium Grid 中实际执行测试执行。

这为您提供了对 Selenium Grid - 测试执行的深入了解。明智的做法是继续练习您所学的内容并探索与 Selenium 相关的其他内容,以加深您的理解并拓宽您的视野。