zoukankan      html  css  js  c++  java
  • selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装

    po模型设计思想


      Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面元素,这样避免当页面元素id或者位置变化后,需要改测试代码。当元素ID变化时,只需要改测试页面Class中的页面属性即可。将页面定位与和业务分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高可维护性。

      Page Object模式是一种自动化测试设计模式,将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。

           unittest是一种单元测试框架,用于设计各式各样的测试用例,可调用PageObject设计的页面类(对象),设计出更加可维护的用例。它提供用例组织与执行,提供丰富的比较(断言)方法,提供丰富的日志,统一适用于web自动化用例的开发与执行。

        How Google Test(谷歌测试之道),书中对web产品测试就分为敏捷测试金字塔的三层,并且工作量配比是,Unit(单元测试):70%,Service(API):20%,UI(GUI):10%。

      所以UI自动化最核心的问题定位是,跟业务层解耦出来,单独处理定位的问题,然后在实现业务层。所使用到的方法是对一个UI页面做测试我们抽取为三层,举例为BasePage+LoginPage+Unittest。   

      后续示例中,PO模型的基本思路:register_page(查找页面元素类) —> register_handle(操作层,将查找到的元素位置上传递数据) —> register_business(业务层:调用操作层,根据操作层的传递的结果进行判断场景,如邮箱错误场景等) —> first_case(封装调用业务层,进行测试用例的场景组装)

    po模型之如何设计操作层


    查找页面元素类:把定位页面元素的方法都封装在相应的一个相应页面中,此页面的元素定位方式都可以在这个文件中找到

    操作层:编写注册过程中需要的方法,比如输入用户名、密码等页面操作,工具类-保存页面操作的所有方法。

    业务层:把操作层组装起来

    查找页面元素类:register_page.py

    操作层:register_handle.py

    业务层:register_business.py

    找找页面元素类


     示例代码:register_page.py

    # -*-  coding:utf-8 -*-
    from  util.find_elemnet import FindElement
    
    class RegisterPage():
        def __init__(self,driver):
            self.find_element = FindElement(driver)
    
        def get_email_element(self):
            return self.find_element.get_element("element_email")
    
        def get_name_elemnet(self):
            return self.find_element.get_element("element_name")
    
        def get_pwd_element(self):
            return self.find_element.get_element("element_pwd")
    
        #错误信息校验
        def get_email_error_info(self):
            return self.find_element.get_element("element_email_error")
    
        def get_name_error_info(self):
            return self.find_element.get_element("element_name_error")
    
        def get_pwd_error_info(self):
            return self.find_element.get_element("element_pwd_error")

    操作层


     示例代码:register_handle.py

    # -*-  coding:utf-8 -*-
    from selenium import webdriver
    
    from page.register_page import RegisterPage
    
    class RegisterHandle(object):
    
        def __init__(self,driver):
            self.register_p = RegisterPage(driver)
    
        #输入邮箱
        def send_user_email(self,email):
            self.register_p.get_email_element().send_keys(email)
    
        #输入用户名
        def send_user_name(self,name):
            self.register_p.get_name_elemnet().send_keys(name)
    
        #输入密码
        def send_user_pwd(self,pwd):
            self.register_p.get_pwd_element().send_keys(pwd)
    
        #获取错误提示信息
        def get_user_text(self,info,user_info):
            text = None
            if info == "element_email_error":
                text = self.register_p.get_email_error_info().get_attribute("value") #value是html标签中的属性值
            elif info == "element_name_error":
                text = self.register_p.get_name_error_info().get_attribute("value")
            elif info == "element_pwd_error":
                text = self.register_p.get_pwd_error_info().get_attribute("value")
            else:
                print("参数输入参数值有误")
            return text
    
    if "__name__" == "__main__":
        pass

    业务层


    示例代码:register_business.py

    # -*-  coding:utf-8 -*-
    from handle.register_handle import RegisterHandle
    from selenium import webdriver
    
    class RegisterBusiness():
        def __init__(self,driver):
            self.register_h = RegisterHandle(driver)
    
        def base_case(self,email,name,pwd):
            self.register_h.send_user_email(email)
            self.register_h.send_user_name(name)
            self.register_h.send_user_pwd(pwd)
    
        #校验邮箱输入错误
        def email_error(self,email,name,pwd):
            self.base_case(email,name,pwd)
            if self.register_h.get_user_text("element_email_error","请输入有效的电子邮件地址") == None:
                print("邮箱校验不成功")
                return AssertionError
            else:
                return False
    
    
    if __name__ == "__main__":
        driver = webdriver.Chrome()
        driver.get("http://www.5itest.cn/register")
        testcase1 = RegisterBusiness(driver)
        testcase1.base_case("111","222","111")
  • 相关阅读:
    Mongodb新增的聚合方法及其Java客户端
    转载:mongoDB java驱动学习笔记
    笔记:Java反射以及动态代理
    转载:在恰当的地方使用MongoDB的WriteConcern.SAFE参数
    去Oracle事件(转)
    笔记:J2EE核心模式(待补充)
    笔记:MongoDB 基础学习
    转载:PostgreSQL SQL的性能调试 方法3-- 查 看 执 行 计 划
    转载: PostgreSQL SQL的性能调试方法2--数据库log分析
    matlab怎么设置默认路径
  • 原文地址:https://www.cnblogs.com/wuzhiming/p/11768889.html
Copyright © 2011-2022 走看看