如何实施PageObject模式
PageObject模式是一种在自动化测试中常用的设计模式,它的目的是为了提高测试代码的可读性和可维护性,减少代码的重复,并且降低页面元素变化对测试代码的影响。以下是实施PageObject模式的一些步骤和注意事项:
首先,我们需要创建一个基础类,这个类通常包含了页面导航、元素定位等公共方法和属性。在这个基础上,我们可以封装所有测试页面的公共方法,例如打开页面、定位元素等。这样做的好处是可以避免在每个页面类中重复编写这些代码。
```python
class
BasePage:
def
__init__(self,
driver,
base_url):
self.driver
=
driver
self.base_url
=
base_url
self.timeout
=
30
def
on_page(self):
return
self.driver.current_url
==
(self.base_url
+
self.url)
def
open(self,
url):
self.driver.get(self.base_url
+
url)
assert
self.on_page(),
'Did
not
land
on
%s'
%
url
```
接下来,我们需要为每一个需要测试的页面创建一个类。这个类应该继承自基础类,并且封装该页面上的元素和操作方法。例如,如果我们正在测试一个登录页面,那么就应该创建一个`LoginPage`类,其中包含用于输入用户名和密码的元素定位器,以及用于提交登录的元素定位器。
```python
class
LoginPage(BasePage):
url
=
'/login'
username_loc
=
(By.NAME,
'email')
password_loc
=
(By.NAME,
'password')
submit_loc
=
(By.XPATH,
'//*[@id="dologin"]')
def
type_username(self,
username):
return
self.find_element(*self.username_loc).send_keys(username)
def
type_password(self,
password):
return
self.find_element(*self.password_loc).send_keys(password)
def
type_submit(self):
return
self.find_element(*self.submit_loc).click()
```
最后,我们在编写测试用例的时候,可以直接使用这些页面类的方法来操作页面元素。这样做可以让我们更专注于业务逻辑,而不是界面细节。
```python
def
test_user_login(driver,
username,
password):
login_page
=
LoginPage(driver)
login_page.open()
login_page.type_username(username)
login_page.type_password(password)
login_page.type_submit()
```
以上就是实施PageObject模式的基本步骤。需要注意的是,我们应该尽量遵循一些最佳实践,例如公开的方法代表UI提供的功能,不要在方法中添加断言,以及不需要建模UI内的所有元素等。