PO模式

PO:PageObject

该模式就是为了将 页面的相关操作 和 测试用例的传参、断言等操作 进行隔离,后续如果页面元素、定位方式等发生变化只需要修改页面操作的代码即可,方便维护

每个页面的操作(元素定位、点击、输入内容等)封装在一个模块中

例:

import unittest
from selenium import webdriver
from ddt import ddt, data
from page_login import LoginPage  # LoginPage中是对登录页面的相关操作
from page_index import IndexPage  # IndexPage中是登录成功后对跳转页面的相关操作

"""应该登录失败的测试用例"""
error_case_data = [
    {'mobile': "", "pwd": "python01", "expected": "请输入手机号"},
    {'mobile': "1518980667a", "pwd": "python02", "expected": "请输入正确的手机号"},
    {'mobile': "15189806677", "pwd": "", "expected": "请输入密码"}
]


@ddt
class TestLogin(unittest.TestCase):
    """测试登录"""

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.login_page = LoginPage(self.driver)
        self.index_page = IndexPage(self.driver)

    def test_login_pass(self):
        """正常登录的用例,将成功登录后页面的相关元素与预期结果断言"""
        # 进行登录的操作
        self.login_page.login("#正确的账号#", "#正确的密码#")
        # 获取登录之后的用户信息
        res = self.index_page.get_my_user_info()
        # 断言用例执行是否通过
        self.assertEqual('登录成功', res)

    @data(*error_case_data)
    def test_login_error_case(self, case):
        """应该登录失败的测试用例,将登录失败的提示语与预期结果断言"""
        # 执行登录操作
        self.login_page.login(case['mobile'], case['pwd'])
        # 获取实际提示结果
        result = self.login_page.get_error_info()
        # 断言
        self.assertEqual(case['expected'], result)

    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

 

posted @ 2022-01-08 10:57  2orange  阅读(39)  评论(0编辑  收藏  举报