PythonUI自动化测试之PO(Page Object)模式

PythonUI自动化测试之PO(Page Object)模式

什么是PO模式?

PO模式(Page Object):页面-对象模式

一个页面是一个类,元素在页面中,所以每个元素的定位信息是这个类中的一个变量;这个页面的常

规业务操作是这个类中的一个个成员方法。

PO模式是自动化测试框架中很重要的一种设计模式。PO模式将页面定位和业务操作分开,分离测试对

象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。

PO模式主要内容:

1、将页面封装成对象

2、页面对象内封装业务方法

3、元素定位方法和获取数据可存放到其他配置文件

PO模式的优点:

1、减少自动化重复代码,提高代码复用性

2、合理的代码逻辑分层,提高代码阅读性和可维护性

3、数据与逻辑分离,降低频繁变动的UI元素和自动化脚本造成的干扰

PO模式的缺点:

一次性脚本开发效率不高

PO模式代码思路

1、先写出具体的业务逻辑—比如登录

2、再将写好的逻辑封装到类里面

3、继续构造其他的页面类

4、将这些类共同的功能抽象化父类,被其他业务类继承

5、可以将代码内部的具体元素抽离处理用外部的配置文件进行管理

PO模型的基本思路:

​ —>login_page(查找页面元素类)

​ —>login_handle(操作层,将查找到的元素位置上传递数据)

​ —> login_business(业务层:调用操作层,根据操作层的传递的结果进行判断场景,如邮箱错误场景等)

​ —> first_case(封装调用业务层,进行测试用例的场景组装)

PO模型应用(126邮箱)

​ 查找页面元素类:loginPage.py

​ 操作层:loginrHandle.py

​ 业务层:loginbusiness.py

定位页面元素类

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')
操作层

loginHandle.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()

你可能感兴趣的:(unittest框架,1024程序员节,设计模式)