1. 简介
- 在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。Page Object模式,创建一个对象来对应页面的一个应用。故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型。体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试。减少代码重复,提高测试代码的可读性和可维护性。
2. 分层思想
- 对象库层: 用于存放页面元素定位和控件操作
- 逻辑层:则是一些封装好的功能用例模块
- 业务层: 则是我们真正的测试用例的操作部分
- 数据层:测试数据参数
3. POM优点
4. 示例
class Login(Page):
'''user login'''
url = '/UserManage/Login'
__login_username_loc = (By.ID, "txtUInfo")
__login_password_loc = (By.ID, "txtpwd")
__login_button_loc = (By.LINK_TEXT,"登 录")
#input username
__def login_username(self, username):
self.find_element(*self.login_username_loc).send_keys(username)
#input_password
__def login_password(self, password):
self.find_element(*self.login_password_loc).send_keys(password)
#click login button
__def login_button(self):
self.find_element(*self.login_button_loc).click()
#login
def user_login(self, username="defaultuser", password="defaultpwd"):
self.open()
self.login_username(username)
self.login_password(password)
self.login_button()
__error_hint_loc = (By.ID, "sperrtip")
__login_success_loc = (By.ID, "ausername")
#login error message
def error_hint(self):
return self.find_element(*self.error_hint_loc).text
#login successfully
def user_login_success(self):
return self.find_element(*self.login_success_loc).text
class loginTest(myunit.MyTest):
def test_login1(self):
page = Login(self.driver)
page.user_login()
self.assertEquals(page.user_login_success(), 'defaultuser')
def test_login2(self):
'''The test case will be failed'''
page = Login(self.driver)
page.user_login()
self.assertEquals(page.user_login_success(), 'wronguser')
def test_login_3(self):
'''wrong pwd'''
page = Login(self.driver)
page.user_login('userb','111111')
self.assertEquals(page.error_hint(), '密码错误,请重新输入密码'.decode('utf8'))
网友评论