【WebDriver】selenium自动化测试入门到进阶 二
来源:互联网 发布:网络骗贷十六万借呗 编辑:程序博客网 时间:2024/05/19 15:41
Page Object设计模式
对一UI经常变动的自动化测试,可以采用Page Object 设计模式,Page Object 主要是对界面元素和基本操作进行封装,这样可以使测试用例更关注与业务而非界面细节,提高测试案例的可读性,且可以减少代码的重复性并提高可维护性。
下面以selenium自动化测试入门到进阶 一 中的用例来封装成Page Object模式为例
封装后项目框架如下
pages包下面存放封装页面元素的类
获取导入客户弹窗的元素
ImportCustomerPage.java
package com.kdzwy.pages;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.By.ByXPath;/* *包名:com.kdzwy.pages *作者:灵枢 *时间:2017-7-18 下午2:36:10 *描述:获取导入客户弹窗的元素 **/public class ImportCustomerPage { private static WebElement element = null; //客户名称输入框 public static WebElement cusNameInput(WebDriver driver) { WebElement element = driver.findElement(By.xpath("(//*[@id='con-wraper']//form//input)[1]")); return element; } //确认按钮 public static WebElement confirmBtn(WebDriver driver) { WebElement element = driver.findElement(By.xpath("//*[@id='con-wraper']/div[@class='el-dialog__wrapper addCustomer']//button[2]")); return element; }}
获取服务管理页面元素
ServiceManagePage.java
package com.kdzwy.pages;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;/* *包名:com.kdzwy.pages *作者:灵枢 *时间:2017-7-18 下午4:57:32 *描述:服务管理页面元素 **/public class ServiceManagePage { private static WebElement element = null; //代账服务标签 public static WebElement AgencyLabel(WebDriver driver) { WebElement element = driver.findElement(By.xpath("//span[text()='代账服务']")); return element; } //下拉菜单 public static WebElement dropdownBtn(WebDriver driver){ WebElement element = driver.findElement(By.xpath("//*[@id='control-con']//div[@class='el-dropdown']")); return element; } //导入客户按钮 public static WebElement importBtn(WebDriver driver){ WebElement element = driver.findElement(By.xpath("//ul[@class='el-dropdown-menu']//li[text()='导入客户']")); return element; } //导入成功提示语 public static WebElement tipText(WebDriver driver){ WebElement element = driver.findElement(By.xpath("//div[@class='el-message__group']//p[text()='新增客户成功']")); return element; } //搜索文本框 public static WebElement searchInput(WebDriver driver){ WebElement element = driver.findElement(By.xpath("//input[@placeholder='企业名称/编号']")); return element; } //搜索确认按钮 public static WebElement searchBtn(WebDriver driver){ WebElement element = driver.findElement(By.xpath("//div[@class='el-input el-input--small el-input-group el-input-group--append']" + "//button[@class='el-button el-button--default']")); return element; } //获取搜索结果的第一个客户 public static WebElement firstSearchResult(WebDriver driver){ WebElement element = driver.findElement(By.xpath(".//*[@id='con-wraper']/div[1]/div[5]/div/div[2]/div[1]")); return element; }}
Operate包下面存放封装页面基本操作的类
封装导入客户弹窗的公共操作
ImportCustomerOperate.java
package com.kdzwy.operate;import org.openqa.selenium.WebDriver;import com.kdzwy.pages.ImportCustomerPage;/* *包名:com.kdzwy.operate *作者:灵枢 *时间:2017-7-18 下午5:13:53 *描述:封装导入客户弹窗的公共操作 **/public class ImportCustomerOperate { //导入单个客户 public static void importOneCustomer(WebDriver driver,String customerName){ // 获取输入用户名文本框,并输入客户名 ImportCustomerPage.cusNameInput(driver).sendKeys(customerName); // 点击确定按钮 ImportCustomerPage.confirmBtn(driver).click(); } //批量导入客户 public static void importBatchCustomer(WebDriver driver){ }}
封装服务管理页面的公共操作
ServiceManageOperate.ava
package com.kdzwy.operate;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import com.kdzwy.bean.Customer;import com.kdzwy.pages.ServiceManagePage;/* *包名:com.kdzwy.operate *作者:灵枢 *时间:2017-7-18 下午5:14:33 *描述:封装服务管理页面的公共操作 **/public class ServiceManageOperate { //搜索客户 public static void searchCustomer(WebDriver driver,String customerName){ ServiceManagePage.AgencyLabel(driver).click(); // 获取搜索文本框,并输入用户名 WebElement searchInput = ServiceManagePage.searchInput(driver); searchInput.clear(); searchInput.sendKeys(customerName); // 点击搜索 ServiceManagePage.searchBtn(driver).click(); }}
cases包下面存放测试用例类
最后的测试用例如下:
AgencyServiceCase.java
package com.kdzwy.cases;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.Assert;import org.testng.annotations.AfterClass;import org.testng.annotations.BeforeClass;import org.testng.annotations.Parameters;import org.testng.annotations.Test;import com.kdzwy.bean.Customer;import com.kdzwy.operate.ImportCustomerOperate;import com.kdzwy.operate.ServiceManageOperate;import com.kdzwy.pages.ImportCustomerPage;import com.kdzwy.pages.ServiceManagePage;import com.kdzwy.publics.CommonMethods;/* *包名:com.kdzwy.case *作者:灵枢 *时间:2017-5-25 上午10:27:31 *描述:代账服务自动化用例 **/public class AgencyServiceCase { private static ChromeDriver driver; @BeforeClass public static void setUp() { // 设置chrome驱动器的地址 System.setProperty("webdriver.chrome.driver","resource/chromedriver.exe"); driver = new ChromeDriver(); // 识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement 异常 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // 浏览器窗口最大化 driver.manage().window().maximize(); // 调用封装后的登录方法,传入driver、用户名和密码 CommonMethods.login(driver, "13152640586", "123456@"); } @AfterClass public static void tearDown() { driver.quit(); } @Test public static void testImportCustomer() throws Exception { // 线程停1s,等待页面加载 Thread.sleep(1000); // 通过CommonMethods.getCurrentTime()获取当期时间 String customerName = "AutoTest" + CommonMethods.getCurrentTime(); // 点击代账服务标签 ServiceManagePage.AgencyLabel(driver).click(); // 点击下拉选项 ServiceManagePage.dropdownBtn(driver).click(); Thread.sleep(1500); // 获得“导入客户”元素,该元素直接点击会报“element not visible”,所以用js来执行点击事件 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].click()", ServiceManagePage.importBtn(driver)); //调用PageObject封装后的操作 ImportCustomerOperate.importOneCustomer(driver, customerName); // 获取新增客户成功的提示语 String successTip = ServiceManagePage.tipText(driver).getText(); // 验证提示语是否正确 Assert.assertEquals(successTip, "新增客户成功"); System.out.println("导入的客户名:" + customerName); Customer.setCustomerName(customerName); } @Test public static void testSearchCustomer() throws Exception { Thread.sleep(1000); // 获取要搜索的客户名 String customerName =Customer.getCustomerName(); //调用PageObject封装后的操作 ServiceManageOperate.searchCustomer(driver, customerName); Thread.sleep(3000); // 获取搜索结果的第一个客户名称 String resultName = ServiceManagePage.firstSearchResult(driver).getText(); // 验证搜索结果的第一个客户名称是否和输入的客户名相同 Assert.assertEquals(resultName, customerName); }}
项目源码下载:http://download.csdn.net/detail/galen2016/9903268
下一篇介绍testng自动获取用例失败截图,以及谷歌浏览器定位插件xpathHelper
阅读全文
1 0
- 【WebDriver】selenium自动化测试入门到进阶 二
- 【WebDriver】selenium自动化测试入门到进阶 一
- Selenium Webdriver 自动化测试环境搭建、入门
- Selenium自动化测试Python二:WebDriver基础
- 自动化测试--selenium-webDriver
- 自动化测试selenium webdriver简单入门教学java版
- 自动化测试selenium webdriver启动
- selenium+python自动化测试(二)--使用webdriver操作浏览器
- 自动化测试(python+selenium)入门(二)
- Selenium自动化测试-入门
- 自动化测试工具 Selenium WebDriver 入门教程
- selenium webdriver junit自动化测试架构
- Selenium WebDriver 自动化测试截图问题
- 自动化测试工具 Selenium WebDriver 入门教程
- 自动化测试工具 Selenium WebDriver 入门教程
- SoapUI + Selenium Webdriver 自动化测试学习
- python3里使用selenium webdriver自动化测试
- 使用selenium和webdriver进行自动化测试
- window下编译qt5.6.1含QWebengine模块开启MP4
- 负载均衡(SLB)使用最佳实践
- CSDN-markdown基本语法说明
- Makefile
- ios-AppDelegate中设置根视图控制器
- 【WebDriver】selenium自动化测试入门到进阶 二
- CoreOS有状态应用管理的框架--Operator详解
- 限制input输入类型(多种方法实现)
- 页面实战应用(持续更新)
- 初创企业想扩大工程师团队?先了解这五件事!
- HelloWorld
- Hadoop环境配置参考一
- 深度工作法让你超越自我
- Centos7安装mplayer播放器和一些简单开发环境的配置