硒UI测试自动化框架
我最近为样品飞行/酒店预订网站创建了一个硒UI测试自动化框架。该框架基于页面图和流利的接口模式,并使用硒,测试和范围报告。
该框架设计为易于使用和维护。它包括一组代表网站不同页面的页面类,以及一组练习页面类的测试类。测试类是使用Fluent接口模式编写的,这使它们更可读和可维护。
该框架还包括一个报告生成器,该生成器为测试结果创建交互式和详细的报告。报告包括诸如测试名称,测试状态和测试步骤之类的信息。
此框架可用于任何Web应用程序的UI自动化测试。我相信它也将成为其他开发人员的宝贵工具。
框架详细信息
测试申请
对于此框架,我使用ClearTrip作为样品飞行/酒店预订网站。
框架 - 什么,为什么?
一个框架是一种已有的代码库,可提供共同的功能并解决软件需求的基本任务。通过在框架之上构建,开发人员可以专注于解决特定要求而无需重新发明轮子。所选框架是实施特定项目的软件要求的基础。
项目结构
该项目遵循标准目录结构。页面类和相关文件位于src/main/java/com/cleartrip/casestudy
路径中,而测试类和相关文件可以在src/test/java/com/cleartrip/casestudy
路径中找到。这种分离允许更好的组织和可维护性。
框架的主要特征:
- 每个正在测试的页面的页面类,利用PageFactory模型查找和初始化Web元素。
- 测试类创建页面类实例以访问其方法,将测试从页面元素分离。
- WebDriver的静态实例化,以确保在所有测试类中仅共享一个实例。
- 相关依赖关系和插件在
pom.xml
文件中定义。
软件包
主包
src/main/java/
软件包包含核心框架代码。所有页面类别和相关文件都位于此主包中。可以在<working-dir>/doc/index.html
的Javadoc中找到详细的文档。
测试包
src/test/java/
软件包包含实际的测试类。子包com.cleartrip.casestudy.tests
保存了与ClearTrip应用程序相关的所有测试测试类。这些测试类的Javadoc可以在<working-dir>/doc/com/cleartrip/casestudy/tests/package-summary.html
上找到。
报告
在范围内,我们可以为UI测试结果生成交互式和详细的报告。可以在
workingDir/ExtentReports/ExtentReportResults.html
中找到测试报告。
安装
要在本地系统上设置并运行UI自动化框架,请执行以下步骤:
在本地系统中设置硒的步骤:
1。安装Java:
- 检查Java是否已通过在终端中运行
java -version
和javac -version
安装。 - 如果没有安装Java或存在过时的版本,请安装最新的Java开发套件(JDK)。
2。安装日食或任何其他最新IDE:
- 下载日食安装程序并运行它。
- 选择为Java开发人员安装Eclipse的选项。
- 打开Eclipse Workbench。
3。获取代码库:
- 克隆来自GitHub的
selenium-pom-factory-fluent-pattern
存储库。
4。在Eclipse中设置项目:
- 开放日食,转到
File -> Open Project from File System
。 - 浏览克隆的项目文件夹并打开它。
- 通过进入
Help -> Eclipse Marketplace
->搜索testng并在安装后安装并重新启动蚀。 - 默认情况下应提供Maven插件。要验证,请右键单击项目,并检查是否有一个名为“ Maven”的选项。
可能的问题:
- 如果
pom.xml
文件中存在错误,请尝试以下步骤:- 打开终端并导航到
Users/<profile_name>/.m2
。 - Run
rm -r repository
. - 右键单击项目,然后选择“更新项目”。
- 打开终端并导航到
- 如果所有导入语句中都有错误,请尝试以下步骤:
- 单击
src/main/java
文件夹,转到Build Path
,然后从构建路径中删除。 - 单击
src -> main -> java
,右键单击,转到Build Path
,然后选择“用作源文件夹”。 - 刷新项目。
- 单击
5。设置验证:
- 在测试软件包中,右键单击任何Java文件,然后选择“作为testng测试运行”。
简单的示例测试
让我们开始以一个简单的示例,即使用页面工厂/流利接口模式为飞行预订进行测试。
测试步骤:
- Go to www.cleartrip.com.
- 选择旅行类型(单向旅行)。
- 选择原点(班加罗尔)。
- 选择目标(德里)。
- 选择一个日期(任何随机日期)。
- 单击“搜索”按钮。
请参阅下图以了解不同应用程序页面的页面类和测试类:
步骤1:创建页面类
我们需要为ClearTrip站点中的所有已实现页面创建页面对象:HomePage.java
,FlightResultsPage.java
,HotelResultsPage.java
,HotelsPage.java
和SignInPopup.java
。这些页面类将在测试类中用于执行操作和断言。
让我们考虑以下方案:在主页上,用户选择“飞行预订”选项,输入有效的详细信息,然后单击搜索按钮,该按钮将它们重定向到飞行结果页面。
主页的示例页面类(HomePage.java
):
public class HomePage {
private WebDriver driver;
private WebDriverWait wait;
@FindBy(xpath = "//nav[@class='row fieldRow tripType']")
private WebElement tripType;
@FindBy(id = "FromTag")
private WebElement origin;
// Other web elements and methods...
public HomePage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
wait = new WebDriverWait(driver, WaitTimes.TIME_5_SECONDS.getWaitTime());
}
// Methods for interacting with the elements and performing actions on the Home page...
/**
* This method launches the home page
*/
public HomePage launch() {
driver.get("https://www.cleartrip.com/");
return this;
}
/**
* This method selects the trip type
*
* @param tripTypeOption Value of Trip Type
*/
public HomePage selectTripType(String tripTypeOption) {
tripType.findElement(By.xpath("//input[@value='" + tripTypeOption + "']")).click();
return this;
}
/**
* This method selects the place of origin
*
* @param origin Value of Origin
*/
public HomePage selectOrigin(String origin) {
this.origin.clear();
this.origin.sendKeys(origin);
wait.until(ExpectedConditions.visibilityOfAllElements(originOptions));
originOptions.get(Indices.INDEX_0.getIndexValue()).click();
return this;
}
/**
* This method clicks on the search button after
*/
public FlightResultsPage clickSearchButton() {
searchButton.click();
return new FlightResultsPage(driver);
}
/**
* This method clicks on the "Hotels" link in the home page
*/
public HotelsPage clickHotelsLink() {
hotelLink.click();
return new HotelsPage(driver);
}
/**
* This method clicks on the SignIn option which appears after clicking the "Your Trips" options
*/
public SignInPopup clickSignInOption() {
signIn.click();
return new SignInPopup(driver);
}
}
在上面的示例中,我们为ClearTrip主页创建了一个页面类。它包含与主页相关的必要的Web元素和操作方法,使用PageFactory模型初始化。
请注意,这只是一个示例,您需要为应用程序中的其他页面创建类似的页面类。
步骤2:创建一个测试库类
创建一个在所有测试类中扩展的基本测试类。因此,将WebDriver实例化,以使其是静态的,并且将在所有测试类中创建和共享一个实例。驾驶员只有完成所有测试后才退出。
testbase.java
/**
* Base Test Class which is extended Test Classes
*/
public abstract class TestBase {
/**
* Static WebDriver Instance
*/
protected static WebDriver driver;
public WebDriver getDriver() {
return driver;
}
/**
* Suite level setup method where the static instance of the WebDriver is instantiated
*/
@BeforeSuite
public static void initDriver() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
ChromeOptions options = new ChromeOptions();
// The following statement sets the argument to disable notification in chrome when executing the tests
options.addArguments("--disable-notifications");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
}
/**
* Suite level tear-down method to quit the WebDriver instance
*/
@AfterSuite
public void quitDriver() {
driver.quit();
}
}
步骤3:创建一个测试类
在测试类中,将创建页面类的实例以访问页面类中的方法。因此,测试与所测试的页面/元素分离。这使框架更加可维护。
因此,在此
FlightBookingTest
类中,我们必须创建主页的对象,FlightresultSpage才能访问这些页面中可用的方法。
FlightBookingTest.java
/**
* Class containing test for validating search-flight results
*/
public class FlightBookingTest extends TestBase {
/**
* Instance of HomePage class
*/
private HomePage homePage;
/**
* Instance of FlightResultsPage class
*/
private FlightResultsPage flightResultsPage;
/**
* Class level test-Setup method that intantiates {@link HomePage} and {@link FlightResultsPage}
*/
@BeforeClass
public void testClasSetup() {
homePage = new HomePage(driver);
flightResultsPage = new FlightResultsPage(driver);
}
/**
* Test method for verifying whether search summary is rightly displayed when searching for flights
*/
@Test
public void testThatResultsAppearForAOneWayJourney(Method method) {
ExtentTestManager.startTest(method.getName(), "Test method for verifying whether search summary is rightly displayed when searching for flights");
ExtentTestManager.getTest().log(LogStatus.INFO, "Launching the browser");
homePage.launch()
.selectTripType(TripTypes.ONE_WAY.getTripType())
.selectOrigin(Cities.BANGALORE.getCity())
.selectDestination(Cities.Delhi.getCity())
.selectDate()
.clickSearchButton();
ExtentTestManager.getTest().log(LogStatus.INFO, "Asserting flight search summary details");
Assert.assertTrue(
flightResultsPage.isSearchSummaryAvailable(),
"Search Summary is not available after clicking the Search Button when searching for flights");
}
}
在上面的示例中,我们创建一个测试类FlightBookingTest
,该类别使用HomePage
页面在ClearTrip网站的主页上执行操作,然后在飞行结果页面上断言或执行进一步的操作。
步骤4:进行测试
运行测试,右键单击测试类FlightBookingTest
,然后选择“作为测试测试”。这将执行测试步骤并在控制台中显示测试结果。
范围HTML Report
可以在
中找到测试报告workingDir/ExtentReports/ExtentReportResults.html
测试摘要
特定的测试细节
结论
该框架提供了一种用于创建页面类,测试类并使用范围报告生成交互式测试报告的构造结构。
通过遵循安装步骤和提供的示例,您可以在本地系统上设置框架并开始为Web应用程序创建UI自动化测试。
有关对每个组件和完整源代码的更详细的了解,请参阅GitHub repository。