Selenium 简明教程

Selenium - Keyword Driven Framework

Selenium Webdriver 可用于开发基于关键词驱动框架的测试脚本。关键词驱动框架主要用于创建功能测试用例,其中测试用例的设计和开发之间有明确的分界。

关键词驱动框架包含一系列执行一组操作的关键词和动作。这些关键词可以在同一个测试用例中多次重用。关键词被赋予自解释的名称,并描述它们打算对正在测试的应用程序执行的操作。因此,关键词驱动很容易用于自动化测试用例。

Keyword Driven Testing Framework

关键词测试或关键词驱动框架是在自动化测试用例时遵循的一组准则,其中隐藏了实现逻辑和技术信息。关键词驱动框架的使用和维护非常简单。

一组特定且有目的的关键词必须作为测试用例准备的一部分纳入其中,以对应用程序执行特定任务或任务。所有这些关键词都描述在通用存储库或可重用库中。

Need of Keyword Driven Testing Framework

在关键词驱动测试框架中,测试用例和测试自动化的编码逻辑之间有明确的划分。它有以下用法:-

  1. 任何人都可以用关键字驱动框架而不需技术专长。团队每位成员都能参与测试,这有助于确保产品质量和以更快的速度开发测试用例。

  2. 如果需要更新,则在实现逻辑中进行更改,而不需要重写或修改测试用例。

  3. 在关键字驱动框架中,在整个测试用例中使用有意义且一致的关键字,从而确保测试用例的统一性。

  4. 可以在关键字驱动框架中轻松创建新的测试用例,只需更新、合并或更改关键字的顺序。

Tools to Create Keyword Driven Testing Framework

可以使用以下工具来创建关键字驱动框架 -

  1. Robot Framework

  2. Selenium

  3. Playwright

Advantages of Keyword Driven Testing Framework

以下是关键字驱动测试框架的优点 -

  1. 创建、执行和维护基于关键字驱动测试框架的测试用例无需技术知识。

  2. 在关键字驱动测试框架中,可以在很大程度上重用测试用例。

  3. 测试用例、数据和实现逻辑与功能之间有明确的分离,因此任何一个部分需要的任何更改都不会影响其他部分。

  4. 在关键字驱动测试框架上开发的测试用例不包含任何实现逻辑,因此它让测试用例具有可读性。

Disadvantages of Keyword Driven Testing Framework

以下是关键字驱动测试框架的缺点 -

  1. 关键字驱动测试框架及其逻辑的实现需要很高的技术技能。

  2. 关键字驱动测试框架中创建的不必要的关键字可能会导致混淆。

  3. 需要在初始阶段进行广泛的计划和准备。

  4. 在关键字驱动测试框架中,需要定期维护测试用例级别和实现层。

What Comprises a Keyword Driven Testing Framework?

一个关键字驱动框架包含下列项目 -

  1. 包含关键字的 Excel 表格。

  2. 包含元素定位符的对象存储库。

  3. 包含关键字实现逻辑的关键字库。

  4. 包含框架中常用函数的库。

  5. 测试数据文件,其中包含测试用例所需数据。

  6. 驱动引擎,它控制和与测试用例通信。

  7. 任何工具(例如支持创建关键字驱动的框架的 Selenium)。

  8. 设计用于测试应用程序的测试用例。

Example

举个例子,在下方页面中,我们要在使用关键字驱动的测试框架点击 Yes 旁边的单选按钮后获取并验证消息 - You have checked Yes

selenium keyword driven framework 1

Step 1 − 首先,我们会准备一个名为 TestCase.xlsx 的 excel 文档,其中包括此示例中的所有关键字(如 launchBrowser、open、click、verifyTest 和 quit),形式为一个测试用例。我们将该文件放置在项目中的 excel 包中。

selenium keyword driven framework 2

Step 2 − 我们将在 Utils 包中的 StaticDatas.java 类文件中存储 TestCase.xlsx 的路径和应用程序 URL 等其他环境值。

StaticDatas.java 中进行代码实现

package Utils;

public class StaticDatas {
   public static final String exeData = "TestCase.xlsx";
   public static final String URLToOpen = "https://www.tutorialspoint.com/selenium/practice/radio-button.php";
}

Step 3 − 我们将创建 TestCase.xlsx 中标识的关键字的方法,以执行我们要执行的操作,为此我们将在 Action 包中创建类文件 ActionsToPerform.java

ActionsToPerform.java 中进行代码实现

package Action;

import Utils.StaticDatas;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import static org.testng.Assert.assertEquals;

public class ActionsToPerform {
   public static WebDriver driver;
   public void launchBrowser(){

      // Initiate the Webdriver
      driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
   }
   public void open(){

      //launch URL
      driver.get(StaticDatas.URLToOpen);
   }
   public void click(){

      // identify element then click
      WebElement radioBtn = driver.findElement(By.xpath("/html/body/main/div/div/div[2]/form/div[1]/input"));
      radioBtn.click();
   }
   public void verifyText(){

      // identify element
      WebElement chkMessage = driver.findElement(By.xpath("//*[@id='check']"));

      // get element text
      String text = chkMessage.getText();
      System.out.println("Message is: " + text);

      // verify message
      assertEquals("You have checked Yes", text);
   }
   public void quit(){

      // quitting browser
      driver.quit();
   }
}

Step 4 − 我们需要读取 TestCase.xlsx 文件(使用 Apache POI Library)以获取应用程序要执行的操作所需的关键字,为此我们将在 ExcelUtils 包中创建 GetDataFromExcel.java 类文件。

GetDataFromExcel.java 中进行代码实现

package ExcelUtils;

import Utils.StaticDatas;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

public class GetDataFromExcel {
   public ArrayList getExcel(int c) throws IOException {

      // get excel file path
      String f = StaticDatas.exeData;

      // load the excel file
      File fl = new File(f);
      FileInputStream fileInputStream = new FileInputStream(fl);

      // instance of XSSFWorkbook
      XSSFWorkbook w = new XSSFWorkbook(fileInputStream);

      // create sheet in XSSFWorkbook with name TestCase1
      XSSFSheet s = w.getSheet("TestCase1");

      // iterating through rows in sheet
      Iterator r = s.rowIterator();

      // moving to next row
      r.next();
      ArrayList<String> arr = new ArrayList();

      // iterate till next row data exists
      while(r.hasNext()){
         Row rw = (Row) r.next();

         // move to next cell in same row
         Cell cell = rw.getCell(c);

         // get cell data
         String cellValue = cell.getStringCellValue();

         // store cell data in arraylist
         arr.add(cellValue);

         // store all cell data in subsequent rows in arraylist
         arr.add(((Row) r.next()).getCell(c).getStringCellValue());
      }
      System.out.println("Get all cell data in the list : " + arr);
      return arr;
   }
   public void getFile(int j) {
   }
}

Step 5 − 我们需要从 GetDataFromExcel 类文件中调用方法 getExcel 以读取 TestCase.xlsx 文件和 ActionsToPerform 类文件的方法,为此我们将在 DriveEngine 包中创建 ActualTest.java 类文件。

ActualTest.java 中进行代码实现

package DriverEngine;

import Action.ActionsToPerform;
import ExcelUtils.GetDataFromExcel;

public class ActualTest {
   public static void main(String[] args) {

      GetDataFromExcel  getDataFromExcel = new GetDataFromExcel();

      // get column number of containing keywords in the excel
      getDataFromExcel.getFile(4);

      // get the keyword actions
      ActionsToPerform actionsToPerform = new ActionsToPerform();

      // execute the test steps starting with browser launch
      actionsToPerform.launchBrowser();

      // open URL
      actionsToPerform.open();

      // click radio button
      actionsToPerform.click();

      // verify message
      actionsToPerform.verifyText();

      // quit browser
      actionsToPerform.quit();
      System.out.println("Keyword driven testing framework executed successfully");
   }
}

Step 6 − 添加的依赖关系已添加到 pom.xml 中。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>SeleniumJava</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
      <maven.compiler.source>16</maven.compiler.source>
      <maven.compiler.target>16</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependencies>
      <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.11.0</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
      <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
         <version>5.2.5</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
      <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
         <version>5.2.5</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/org.testng/testng -->
      <dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
         <version>7.9.0</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

Output

Message is: You have checked Yes
Keyword driven testing framework executed successfully

Process finished with exit code 0

在上述示例中,我们已实现一个关键字驱动的测试框架来验证和在控制台中获取消息 - You have checked Yes

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

selenium keyword driven framework 3

这完成了我们对 Selenium Webdriver - 关键字驱动框架教程的全面讲解。我们从描述什么是关键字驱动框架开始,包括为什么使用关键字驱动框架、关键字驱动框架使用的工具、关键字驱动框架的优点和缺点、关键字驱动框架包含哪些内容,并通过一个示例说明如何实现一个关键字驱动框架,以及 Selenium Webdriver 的结合。

这使你能够深入了解 Selenium Webdriver 中的关键字驱动框架。最佳做法是继续实践你学到的知识,并探索与 Selenium 相关的其他内容,以加深你的理解并拓宽你的视野。