实现PageObject封装通常遵循以下几个步骤:
1.定义页面类:为每个页面创建一个类,这个类将包含所有与该页面相关的元素和操作方法。
2.元素定位:在页面类中,定义元素的定位器。这些定位器可以是ID、name、class等,具体取决于页面的HTML结构。通常,这些定位器被定义为类变量或方法,以便可以在整个测试套件中重用。
3.操作方法:为页面上的每个操作创建方法。这些方法应该接受必要的参数,并执行相应的操作,例如填写表单、点击按钮、切换复选框等。
4.页面导航:如果一个操作会导致页面变化,那么应该在相应的操作方法中添加逻辑以处理新的页面状态。这可能涉及到返回一个新的页面对象,或者在当前页面对象上更新元素定位器。
5.初始化方法:通常,在页面类中会有一个初始化方法(__init__()),用于设置与该页面相关的Webdriver实例,以及执行任何必要的初始化操作。
6.测试用例:在测试用例中,可以创建页面对象的实例,并通过调用其方法来执行操作。测试用例应该只关注业务流程,而不关心具体的元素定位和操作细节。
下面是一个简化的Python示例,演示了如何为一个简单的登录页面实现PageObject封装:
```python
from
selenium.webdriver.common.by
import
By
from
selenium.webdriver.support.ui
import
WebDriverWait
from
selenium.webdriver.support
import
expected_conditions
as
EC
class
LoginPage:
def
__init__(self,
driver):
self.driver
=
driver
self.wait
=
WebDriverWait(driver,
10)
def
login(self,
username,
password):
self.driver.find_element_by_id('username').send_keys(username)
self.driver.find_element_by_id('password').send_keys(password)
self.driver.find_element_by_id('submit').click()
def
is_element_present(self,
locator):
try:
self.wait.until(EC.presence_of_element_located(locator))
return
True
except
Exception:
return
False
def
is_logged_in(self):
return
self.is_element_present((By.ID,
'logout'))
在测试用例中使用页面对象
def
test_login(page):
page.login('my_username',
'my_password')
assert
page.is_logged_in()
创建页面对象并执行测试
driver
=
webdriver.Firefox()
page
=
LoginPage(driver)
test_login(page)
```
在这个例子中,`LoginPage`类封装了与登录表单交互的方法和元素定位器。测试用例`test_login`使用这个页面对象来执行登录操作,并检查是否成功登录。
请注意,实际应用中,页面对象的设计和实现可能会更加复杂,包括处理异常、页面特定的方法和属性、更复杂的导航逻辑等。此外,为了提高代码的可读性和可维护性,建议遵循页面对象模式的最佳实践,例如避免硬编码等待时间、使用期望条件来等待元素就绪、以及适当地抽象和重构公共方法和逻辑。