zoukankan      html  css  js  c++  java
  • 通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化

    Page Objects 设计模式

    简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位、业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试

    Page Objects实现的方法

    1、@FindBy()注解

    @FindBy(id=" "),id也可以换位xpath、name、textlink等

    通过此注解实现元素定位

    2、功能实现

    通过自定义的方法,来实现具体的业务逻辑

    pageFactory

    page object 类主要实现页面对象的初始化,负责把页面对象加单化。

    PageFactory类提供的方法都是静态的,可以直接调用,

    PageFactory.initElements(WebDriver driver, java.lang.Class<T> pageClassToProxy)

    我的实际设计思想是:

    三层:

    1、编写BasePage.java

    该类主要作用是把所有测试的页面公共的方法抽出来单独包装

    2、编写具体的某个页面对象类,例如:Login.java

    该类主要是对某个测试页面元素的定位、和业务逻辑实现;该类需要继承BasePage类

    3、使用testNG编写具体测是类,例如:TestLogin.java

    最后通过testNG 的xml文件实现测试用例(即方法)的执行

    下面是通过登录操作实现page Objects的设计思想:

    BasePage.java

    public class BasePage {
        WebDriver driver;
        String pageTitle;
        Actions action;
    
        public BasePage(WebDriver driver) {
            this.driver = driver;
            action = new Actions(this.driver);
            this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
        }
    
    //打开一个指定的url
        public void my_open(String url) {
            // 浏览器最大化
            this.driver.manage().window().maximize();
            this.driver.get(url);
            Reporter.log("打开网址:" + url);
        }
    
        // 点击操作
        public void my_click(WebElement element) {
            try {
    
                element.click();
                Reporter.log("点击:" + my_getResult(element));
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    
    //文本款输入指定的值
        public void my_input_text(WebElement element, String text) {
            try {
                element.sendKeys(text);
                Reporter.log("文本框输入的值为:" + text);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    LoginSpEnterprise .java

    public class LoginSpEnterprise extends BasePage {
    
        public LoginSpEnterprise(WebDriver driver) {
            super(driver);
        }
    
        // 定位页面元素
    
        @FindBy(id = "assistid")
        WebElement useName;
    
        @FindBy(id = "userid")
        WebElement useId;
    
        @FindBy(id = "passWord")
        WebElement passWord;
    
        @FindBy(xpath="//input[@value='登录']")
        WebElement login_button;
    
        //业务操作
        public void login(String username,String userid,String password) {
            //输入用户名
            my_input_text(useName, username);
            //输入用户id
            my_input_text(useId, userid);
            //输入密码
            my_input_text(passWord, password);
            //点击登录
            my_click_button(login_button);
        }
    }
    testNG测试类:TestLoginSpEnterprise.java
    有2点需要注意:
    1.driver对象需要指定为静态变量,这样就能保证,在整个测试过程中,driver的传递是唯一的
    2.LoginSpEnterprise ls = PageFactory.initElements(driver, LoginSpEnterprise.class);
    此处就是实现 LoginSpEnterprise登录页面对象的初始化,如果有多个页面对象需要执行,则下一个测试类里面页面对象的初始化则变为:Open


    public class TestLoginSpEnterprise {
    
        public static WebDriver driver;
    
        @DataProvider
        public Object[][] lg(){
            return new Object[][] {
    //                {"","admin","a111111"},
    //                {"fan1","","a111111"},
                    {"fan1","admin","a111111"},
    
            };
        }
    
        @Test(dataProvider="lg",description="测试登录自服务平台")
        public void testLogin(String username,String userid,String password) {
            LoginSpEnterprise ls = PageFactory.initElements(driver, LoginSpEnterprise.class);
            ls.my_open("http://10.10.178.152:8080/spEnterprise/authenticationPos!login.action");
            ls.login(username, userid, password);
        }
        @BeforeClass
        public void beforeClass() {
            System.setProperty("webdriver.chrome.driver", "E:\workspace\seleniumSource\lib\chromedriver.exe");
            driver = new ChromeDriver();
        }
    
    }

    通过testNG.xml实现测试方法的执行

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="线下代理商自服务UI自动化">
        <listeners>
            <listener class-name="dong.test.Untils.TestngListener" />
        </listeners>
        <test name="登录页面测试">
            <classes>
    
                <class name="dong.test.PO.TestLoginSpEnterprise">
    
                    <methods>
                        <include name="testLogin"></include>
                    </methods>
    
    
                </class>
            </classes>
        </test>
        </suite>
  • 相关阅读:
    C# DES加密和解密
    SQL设计技巧优化
    MS15-034漏洞技术研究
    Vustudy靶场环境快速搭建
    FastJson<=1.2.47漏洞复现
    多台电脑共享一套鼠键--Mouse Without Borders
    {Java初级系列四}---继承、接口和抽象类
    {Java初级系列三}---面向对象和类
    {Java初级系列二}---Java类基础知识
    {Java初阶系列一}---Java基本简介
  • 原文地址:https://www.cnblogs.com/wsy0202/p/13960641.html
Copyright © 2011-2022 走看看