zoukankan      html  css  js  c++  java
  • 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)




    以上都是我日常工作的学习与总结,希望知识能积少成多,以后的我一定会感激现在努力的自己。。
  • 相关阅读:
    查找目录中同名的文件或者文件夹
    「JOISC 2014 Day1」历史研究 --- 回滚莫队
    CSP2019 —— 今年欢笑复明年,不知退役在眼前
    C++实现,拓展中国剩余定理——解同余方程组(理论证明和代码实现)
    [SDOI2016]征途 —— 斜率优化DP
    codeforces#1215E. Marbles(状压DP)
    浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法
    C++[Tarjan求点双连通分量,割点][HNOI2012]矿场搭建
    浅谈数学上的矩阵——矩阵的乘法运算的概念及C++上的实现模板
    C++边双缩点,Redundant Paths 分离的路径
  • 原文地址:https://www.cnblogs.com/zaochajun/p/13528886.html
Copyright © 2011-2022 走看看