• 大话Page Object(PO)设计模式


    Webdriver UI自动化测试火了好几年了,具体怎么设计自动化测试测试工程,组织测试用例完全凭借着自己的经验和习惯。最近忽然听说了Page Object(简称PO)火了起来,也有面试的时候被问到的,究竟这是个什么东东呢?最近在网上搜了一下相关的知识,现在总结一下:

    “Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。 当页面元素id变化时,只需要更改测试页Class中页面的属性即可。 获取页面中元素的属性可以通过idclass或者XPath获取,在id唯一的情况下,可以使用id获取页面元素,否则可以使用XPath定位页面元素。(参阅:http://www.360doc.com/content/16/0311/14/31509092_541322421.shtml

    上面的这段介绍是网上看到的,其他的简介和这个类似,原来PO就是一个设计模式,将代码以页面为单位进行组织,针对这个页面上的所有信息,相关操作都放到一个类中;从而使具体的测试用例变成了简单的调用和验证操作。

    下面依然用从网上拿到的例子做说明:

    1)使用Page Object模式时,163邮箱的登录页的代码如下:

    package com.mail163;

    import org.openqa.selenium.WebDriver;

    mport org.openqa.selenium.WebElement;

    import org.openqa.selenium.support.FindBy;

    public class login {

           @FindBy(id="idInput" )

           private WebElement username;

           @FindBy(id="pwdInput" )

           private WebElement password;

           @FindBy(id="loginBtn" )

           private WebElement loginBtn;

     

           public void login(WebDriver dr,String username,String pwd){

                  dr.get("http://mail.163.com");

                  this.username.sendKeys(username);

                  this.password.sendKeys(password);

                  loginBtn.click();

           }

    }

    我们将网易邮箱的登录操作,封装到一个类中,当然还有注册操作,为了简便期间,我们就不封装了。在我们使用PO模式进行设计用例的时候,就类似于上面的,把一个页面上相关的操作都封装进来,如果有常量也可以在类中定义。

    2Page Object模式下的测试用例编写

    package com.test.java;

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.PageFactory;

    public class testLogin3 {
        public void login1(String username, String password)
        {
        WebDriver driver= new FirefoxDriver();
        //
    对页面元素的初始化
        login lg=PageFactory.initElements(driver, login.class);
        lg.login(driver, username, password);
        }
       
        public static void main(String[] args)
        {
            testLogin3 tl = new testLogin3();
            tl.login1("justForYourTesting","135135");

        //添加判断是否成功操作


        }
    }

       现在我们就可以直接调用Page Object组织的类及操作,来完成我们的测试用例。当然也可以对类进行更加详细的封装,如:http://www.360doc.com/content/16/0311/14/31509092_541322421.shtml上面讲的示例。

     3PageFactory 的概念和Page Object应该类似,属于一种设计模式。属于Page Object的扩展,在构造函数里面调用PageFactory.initElements(driver, this);来初始化PO对象,避免WebElement过期。扩展介绍:http://relevantcodes.com/pageobjects-and-pagefactory-design-patterns-in-selenium/ 大家感觉兴趣的话,可以详细阅读一下。

    个人感觉:Page Object设计模式,和单例模式,其他的设计模式类似,感觉很高大上的样子,在实际工作中好像应用的不是太广泛。互联网行业就是这个样子,有很多新的东西,貌似很牛,但实际应用不是很好或是符合预期;如果你聊天或是面试过程中,如果能说出来,感觉好厉害的样子。对于新的技术,你可以不会用,但是必须了解,这也是一项技能,对新技术动向的把握。

     

  • 相关阅读:
    「密码不符合策略要求」的解决方案——在「secpol.msc」中禁用「密码必须符合复杂性要求」
    IIS7远程桌面管理(iis7.net出品)
    VNC远程控制客户端和服务端下载(VNC可跨平台)
    路由跟踪(可视化)——Best Trace
    定时任务工具——Shutdown it!(模拟鼠标点击、到时间后执行复制、消息提示等功能)
    FastCopy 提示「Can't alloc memory(misc stat)(内存资源不足,无法处理此命令。8) :」的解决方案
    博客园测试
    支持定时任务(上传/下载)的FTP工具
    Animate CC 由原Adobe Flash Professional CC 更名得来,支持html5
    开源的拼音输入法
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520736.html
Copyright © 2020-2023  润新知