• 十一、By/登录未授权/测试用例实现流程


    一、By的类属性的方式的好处

    • 能够减少错误

    • 能够提高可读性

    from selenium.webdriver.common.by import By
    
    # login_btn_locator = {"by": "class name", "value": "btn-special"}
    login_btn_locator = {"by": By.CLASS_NAME, "value": "btn-special"}
    # username_locator = {"by": "name", "value": "phone"}
    username_locator = {"by": By.NAME, "value": "phone"}
    """登录页面"""
    from selenium.webdriver.common.by import By
    from middware.pages.index import IndexPage
    from middware.handler import HandlerMiddle
    
    class LoginPage:
        """登录"""
        URL  =HandlerMiddle.yaml_data["host"] + "/Index/login.html"
        #登录按钮,元祖形式
        #login_btn_locator = ("name","btn-special")
        #登录按钮
        login_btn_locator = {"by":By.CLASS_NAME,"value":"btn-special"}
        #用户名
        username_locator = {"by":By.NAME,"value":"phone"}
        #密码
        password_locator = {"by":By.NAME,"value":"password"}
        #登陆失败的错误信息
        error_msg_locator = {"by":By.CLASS_NAME,"value":"form-error-info"}
    
        #初始化driver
        def __init__(self,driver):
            self.driver = driver
    
        def get(self):
            """访问页面"""
            self.driver.get(self.URL)
            return self
    
        def login_fail(self,username,password):
            # 元素定位+元素操作,输入用户名和密码,点击登录进行提交
            self.enter_username(username)
            self.enter_password(password)
            #self.driver.find_element(*self.login_btn_locator).click()
            self.driver.find_element(**self.login_btn_locator).click()#点击登录按钮
            return self
    
        def login_success(self,username,password):
            # 元素定位+元素操作,输入用户名和密码,点击登录进行提交
            self.enter_username(username)
            self.enter_password(password)
            self.driver.find_element(**self.login_btn_locator).click()#点击登录按钮
            return IndexPage(self.driver)
    
        def enter_username(self,username):
            "输入用户名"
            self.driver.find_element(**self.username_locator).send_keys(username)
            return self
    
        def enter_password(self,password):
            "输入密码"
            self.driver.find_element(**self.password_locator).send_keys(password)
            return self
    
        def get_error_info(self):
            "获取登录失败的错误信息"
            return self.driver.find_element(**self.error_msg_locator).text

    二、登录未授权(密码错误,提示信息一闪而过)

    场景:在账号/密码输入错误的时候,有个弹框,弹出来几秒就消失了,无法进行元素定位

    解决:弹框弹出的时候,暂停JS操作,让弹框暂停不动。

    找到F12  resource  ==》pause 暂停js执行

    toast弹窗的定位元素: 断点调试 

    •     在F12的模式下,切换到tab:sources , 

    •     然后执行该情况的用例,执行后点击pause script execution, 

    •     暂停后进行元素定位 

    注意事项:

    • 通过隐式等待是可以等待元素被加载 

    • 但是元素被加载并不表示里面的动态文办内容能被获取到 

    解决: 1、通过显示等待visible     2、text文件定位,也需要用显示等待的     3、强制等待把握好时间

    三、web自动化测试用例实现流程

    1.准备前置后置,conftest

    2.编写测试用例,测试用例的函数注释,docstring

    如:登录未授权 测试步骤: 

    • 1、登录页面输入用户名 

    • 2、登录页面输入密码 

    • 3 、登录页面点击登录 

    • 4、登录页面获取未授权信息 

    注意:如果有要用到的方法还没有定义,就到登录页面的对象中封装这个方法,然后再回来调用 写明页面是因为方便封装方法的时候能找到在哪个页面

    3.根据测试步骤封装页面行为

    4.调用页面行为,获取实际结果

    5.断言

    四、basepage

    页面行为分为两种:

    • --某个页面特定的行为,定位登录按钮这个元素

    • --每个页面通用的行为,如定位一个元素

    每个页面的通用方法放在一个公共页面类中

    每个页面都能直接调用,不会因为项目不同发生改变的浏览器通用操作的封装

    放在一个类中,类就是basepage

    • --basepage是每个页面类的父类

    • --basepage思想===》类继承

  • 相关阅读:
    实现UILabel渐变色效果
    设计模式-原型模式
    计算一/二元一次方程的类(用于动画控制)
    【转】VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
    【转】VMware虚拟机系统无法上网怎么办?
    【转】Android tools:context
    【转】android布局--Android fill_parent、wrap_content和match_parent的区别
    【转】在程序中设置android:gravity 和 android:layout_Gravity属性
    【转】android gravity属性 和 weight属性
    【转】Android xml资源文件中@、@android:type、@*、?、@+含义和区别
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13841298.html
Copyright © 2020-2023  润新知