Selenium 简明教程
Selenium - Keyword Driven Framework
Selenium Webdriver 可用于开发基于关键词驱动框架的测试脚本。关键词驱动框架主要用于创建功能测试用例,其中测试用例的设计和开发之间有明确的分界。
关键词驱动框架包含一系列执行一组操作的关键词和动作。这些关键词可以在同一个测试用例中多次重用。关键词被赋予自解释的名称,并描述它们打算对正在测试的应用程序执行的操作。因此,关键词驱动很容易用于自动化测试用例。
Keyword Driven Testing Framework
关键词测试或关键词驱动框架是在自动化测试用例时遵循的一组准则,其中隐藏了实现逻辑和技术信息。关键词驱动框架的使用和维护非常简单。
一组特定且有目的的关键词必须作为测试用例准备的一部分纳入其中,以对应用程序执行特定任务或任务。所有这些关键词都描述在通用存储库或可重用库中。
Need of Keyword Driven Testing Framework
在关键词驱动测试框架中,测试用例和测试自动化的编码逻辑之间有明确的划分。它有以下用法:-
-
任何人都可以用关键字驱动框架而不需技术专长。团队每位成员都能参与测试,这有助于确保产品质量和以更快的速度开发测试用例。
-
如果需要更新,则在实现逻辑中进行更改,而不需要重写或修改测试用例。
-
在关键字驱动框架中,在整个测试用例中使用有意义且一致的关键字,从而确保测试用例的统一性。
-
可以在关键字驱动框架中轻松创建新的测试用例,只需更新、合并或更改关键字的顺序。
Tools to Create Keyword Driven Testing Framework
可以使用以下工具来创建关键字驱动框架 -
-
Robot Framework
-
Selenium
-
Playwright
Advantages of Keyword Driven Testing Framework
以下是关键字驱动测试框架的优点 -
-
创建、执行和维护基于关键字驱动测试框架的测试用例无需技术知识。
-
在关键字驱动测试框架中,可以在很大程度上重用测试用例。
-
测试用例、数据和实现逻辑与功能之间有明确的分离,因此任何一个部分需要的任何更改都不会影响其他部分。
-
在关键字驱动测试框架上开发的测试用例不包含任何实现逻辑,因此它让测试用例具有可读性。
Disadvantages of Keyword Driven Testing Framework
以下是关键字驱动测试框架的缺点 -
-
关键字驱动测试框架及其逻辑的实现需要很高的技术技能。
-
关键字驱动测试框架中创建的不必要的关键字可能会导致混淆。
-
需要在初始阶段进行广泛的计划和准备。
-
在关键字驱动测试框架中,需要定期维护测试用例级别和实现层。
What Comprises a Keyword Driven Testing Framework?
一个关键字驱动框架包含下列项目 -
-
包含关键字的 Excel 表格。
-
包含元素定位符的对象存储库。
-
包含关键字实现逻辑的关键字库。
-
包含框架中常用函数的库。
-
测试数据文件,其中包含测试用例所需数据。
-
驱动引擎,它控制和与测试用例通信。
-
任何工具(例如支持创建关键字驱动的框架的 Selenium)。
-
设计用于测试应用程序的测试用例。
Example
举个例子,在下方页面中,我们要在使用关键字驱动的测试框架点击 Yes 旁边的单选按钮后获取并验证消息 - You have checked Yes 。
Step 1 − 首先,我们会准备一个名为 TestCase.xlsx 的 excel 文档,其中包括此示例中的所有关键字(如 launchBrowser、open、click、verifyTest 和 quit),形式为一个测试用例。我们将该文件放置在项目中的 excel 包中。
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 Webdriver - 关键字驱动框架教程的全面讲解。我们从描述什么是关键字驱动框架开始,包括为什么使用关键字驱动框架、关键字驱动框架使用的工具、关键字驱动框架的优点和缺点、关键字驱动框架包含哪些内容,并通过一个示例说明如何实现一个关键字驱动框架,以及 Selenium Webdriver 的结合。
这使你能够深入了解 Selenium Webdriver 中的关键字驱动框架。最佳做法是继续实践你学到的知识,并探索与 Selenium 相关的其他内容,以加深你的理解并拓宽你的视野。