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()