项目实战中PO模型的设计与封装

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。项目实战中PO模型的设计与封装,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

po模型设计思想


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

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

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

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

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

po模型之如何设计操作层


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

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

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

查找页面元素类:loginPage.py

操作层:loginrHandle.py

业务层:loginbusiness.py

下面以126邮箱web登录页面为例展示编写PO模型

定位页面元素类


 示例代码:loginPage.py

from selenium import webdriver

#定位页面元素
class LoginPage:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.126.com/')
        self.driver.maximize_window()
        self.driver.implicitly_wait(20)
        # 切换到表单中
        self.driver.switch_to.frame(0)

    #定位邮箱输入框
    def get_email_element(self):
        return self.driver.find_element_by_css_selector('input[name="email"]')

    #定位密码输入框
    def get_password_element(self):
        return self.driver.find_element_by_css_selector('input[name="password"]')

    #定义 登录 按钮
    def get_loginbutton_element(self):
        return self.driver.find_element_by_id('dologin')

操作层


 示例代码:loginrHandle.py

#操作层
class loginHandle(LoginPage):

    def __init__(self):
        LoginPage.__init__(self)

    #输入邮箱
    def send_user_email(self):
        self.get_email_element().send_keys('Augus')

    #输入密码
    def send_user_password(self):
        self.get_password_element().send_keys("1234")

    #点击登录按钮
    def click_loginbutton(self):
        self.get_loginbutton_element().click()

业务层


示例代码:loginbusiness.py

#业务层
class LoginBusiness(loginHandle):
    def __init__(self):
        loginHandle.__init__(self)
    #登录功能
    def login_case(self):
        self.send_user_email()
        self.send_user_password()
        self.click_loginbutton()

if __name__ == '__main__':
    l = LoginBusiness()
    l.login_case()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/253624.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!