IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 如何在Selenium中对象模型进行更快的应用测试 -> 正文阅读

[开发测试]如何在Selenium中对象模型进行更快的应用测试

Selenium 中的页面对象模型是一种对开发和测试团队非常有用的设计模式。继续阅读以了解如何使用它进行更快的应用测试

什么是页面对象模型?

页面对象模型,也称为 POM,在 Selenium 中是一种设计模式,可为按钮、输入字段和其他 Web 元素创建对象存储库。在 Selenium 中使用 POM 的主要目标是减少代码重复并改进未来测试用例的维护。在页面对象模型中,将应用程序的每个网页视为一个类文件。?

每个类文件都会联系您在页面中找到的元素。使用这些元素,测试人员可以与被测系统进行交互。

让我们看一个来自Web应用程序的登录页面的实际示例,以及如何使用Selenium中的页面对象模型方法来构建它。

Web 登录页面示例

页面对象模型

如果我们查看生成的 HTML,我们可以看到登录表单和页面中包含的各种元素。

页面对象模型

以下是我们需要在测试自动化脚本中使用的在此页面上完成登录的元素示例。我们将使用这个例子构建一个页面对象模型。

在此示例中用作用户名的电子邮件字段:

<input id="email" name="email" type="text" class="form-control" placeholder="email">

密码字段:

<input id="password" name="password" type="password" class="form-control" placeholder="Password">

将验证提供的详细信息的登录按钮:

<button type="button" class="btn btn-primary" value="" name="btnLoginAuth" id="btnLoginAuth">Log In</button>

成功或错误消息显示在此处:

<span id="spanAuthResponse" name="spanAuthResponse">Error! Invalid Auth Details provided.</span>

首先,考虑一个不使用页面对象模型的典型测试自动化脚本的示例。

/***
*Login Page Feature – Not using Page Object Model
*/
Public class LoginPage {

Public void TestLogin() {

?? ??? ?//Enter the login data
? ? ?? ??? ?driver.findElement(By.name("email")).sendKeys("testUser@gmail.com");
? ? ?? ??? ?driver.findElement(By.name("password")).sendKeys("my supersecret password");
? ? ?? ??? ?driver.findElement(By.name("btnLoginAuth")).click();

? ? ?? ??? ?//Verify error message is shown
? ? ?? ??? ?driver.findElement(By.name("spanAuthResponse")).isDisplayed();
? ? ?? ??? ?assertThat(driver.findElement(By.name("spanAuthResponse")).getText(), is("Error! Invalid Auth Details provided."));?? ?

}

}

您可能想知道这种方法有什么问题,因为这是在Selenium 中开始测试自动化的一种非常常见的方法。但是,有两个问题。

  • 测试方法和目标定位器之间没有分离。两者都交织在一种方法中。所以如果登录变了,完整的测试也必须变,这导致了以后的大量维护。
  • 定位器(我们如何找到元素)将分布在多个测试中,因此没有简单的方法来更新和维护它们。

应用页面对象模型技术,上面的示例对于登录页面将如下所示。

/**
?* Page Object for the Login page.
?*/
public class LoginPage {
? protected static WebDriver driver;

? // <input name="email" type="text">
? private By usernameBy = By.name("email");
? // <input name="password" type="password">
? private By passwordBy = By.name("password");
? // <button name="btnLoginAuth" type="button">
? private By signinBy = By.name("btnLoginAuth");

? public LoginPage(WebDriver driver){
? ? this.driver = driver;
? }

? /**
? ? * Login as valid user for this application
? ? *
? ? * @param userName
? ? * @param password
? ? * @return Next Dashboard Page object
? ? */
? public DashboardPage loginValidUser(String userName, String password) {
? ? driver.findElement(usernameBy).sendKeys(userName);
? ? driver.findElement(passwordBy).sendKeys(password);
? ? driver.findElement(signinBy).click();

? ? return new DashboardPage(driver); //Not Yet implemented in this example
? }
}

这种方法现在允许您按以下方式实施验证(测试)。

/***
?* Tests login feature
?*/
public class TestLogin {

? @Test
? public void testLogin() {
? ? LoginPage loginPage = new LoginPage(driver);
? ? DashboardPage dashboardPage = loginPage.loginValidUser("userName", "password"); //Not yet implemented
? ? assertThat(dashboardPage.getMessageText(), is("Hello userName"));
? }

}

以下是允许使用此方法实现测试代码所需可维护性的规则。

  1. 页面对象永远不应该进行断言或验证。这是您测试的一部分,应该始终在您的测试用例中,而不是在页面对象中。页面对象只是页面的表示。
  2. 您的页面对象中可以有一个验证,即验证页面是否正确加载。这可能包含页面正常工作的关键元素。
  3. 只添加您需要的元素,尽可能保持干净,并在需要时添加。不要过度设计它。

大规模测试

还存在其他框架,为浏览器和移动测试实现此 (POM) 概念。Quantum 框架使用这种方法。这是使用Quantum的示例:

这是我用简单英语进行的 BDD 测试。

页面对象模型

Given、When 和 Then 部分中语句的执行用下面的代码表示。

页面对象模型

如您所见,此处使用了 Google 页面,就像我们对 Selenium 示例中的登录页面所做的一样。

总结

页面对象模型是创建易于维护的测试的好方法,并且可以让您更快地扩展测试工作,因为您可以根据任何测试自动化流程的需要重用对象。

尝试在 Selenium 中使用页面对象模型,看看它如何适用于您的项目。对于那些寻求适用于该概念的 BDD 框架的人,请尝试使用 Quantum 框架并更快地完成更多工作。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:36:19  更:2021-09-29 10:38:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:45:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码