PO模式

PO:page object,分层机制,让不同层去做不同类型的事情,让代码结构清晰,增加复用性。
主要有以下几种分层方式:
1)两层: 对象逻辑层+业务数据层
2)三层:对象库层+逻辑层+业务数据层
3)四层:对象库层+逻辑层+业务层+数据层

优势:
1)效率高 :同理,PO模式的逻辑层方法有具体定义,情况和元素发生变化一样 修改逻辑层,业务层不变。这样看来结构简单清晰,舒服更符合人类习惯, 普通方式就是继续堆case。
2) 复用多收益大: 同样这里如果逻辑复用越多,PO模式收益越大,因为对于PO模式来说都只需要修改一个地方多处受益。

普通模式:

def test_user_login():
    driver = webdriver.Edge()
    base_url = 'https://mail.qq.com/'
    username = '3494xxxxx'  # qq号码
    password = 'kemixxxx'  # qq密码
    driver.get(base_url)
    driver.switch_to.frame('login_frame') #切换到登录窗口的iframe
    driver.find_element(By.ID, "u").send_keys(username) #输入账号
    driver.find_element(By.ID, "p").send_keys(password) #输入密码
    driver.find_element(By.ID, "login_button").click()  #点击登录

PO模式(三层):
对象库层

#创建基础类
class BasePage(object):
    #初始化
    def __init__(self, driver):
        self.base_url = 'https://mail.qq.com/'
        self.driver = driver
        self.timeout = 30

    #打开页面
    def _open(self):
        url = self.base_url
        self.driver.get(url)
        self.driver.switch_to.frame('login_frame')  #切换到登录窗口的iframe

    def open(self):
        self._open()

    #定位方法封装
    def find_element(self,*loc):
        return self.driver.find_element(*loc)

#创建LoginPage类
class LoginPage(BasePage):
    username_loc = (By.ID, "u")
    password_loc = (By.ID, "p")
    login_loc = (By.ID, "login_button")

    #输入用户名
    def type_username(self,username):
        self.find_element(*self.username_loc).send_keys(username)

    #输入密码
    def type_password(self,password):
        self.find_element(*self.password_loc).send_keys(password)

    #点击登录
    def type_login(self):
        self.find_element(*self.login_loc).click()

逻辑层

#创建test_user_login()函数
def user_login(driver, username, password):
    """测试用户名/密码是否可以登录"""
    login_page = LoginPage(driver)
    login_page.open()
    login_page.type_username(username)
    login_page.type_password(password)
    login_page.type_login()

业务层

def test_user_login():
    driver = webdriver.Edge()
    username = '3494xxxxx'    #qq号码
    password = 'kemixxxx'    #qq密码
    test_user_login(driver, username, password)




posted @ 2020-08-19 13:44  海大富_上海  阅读(417)  评论(0编辑  收藏  举报