PythonUI 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思想===》类继承

 

posted @ 2020-10-20 19:07  尐樣ル~  阅读(178)  评论(0编辑  收藏  举报