【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