【WebDriver】selenium自动化测试入门到进阶 二

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值