page object
时间: 2024-01-01 13:03:54 浏览: 24
Page Object 是一种测试设计模式,用于将 UI 页面与测试代码分离。Page Object 模式将页面抽象为一个对象,该对象封装了页面的所有元素和行为。测试代码通过调用 Page Object 上的方法来交互页面。这种模式使测试代码更加简洁、可维护性更高,因为测试代码不需要直接操作页面元素,而是通过 Page Object 进行操作。如果页面发生变化,只需要更新 Page Object,而不需要修改测试代码。Page Object 还可以在多个测试用例之间共享,提高测试代码的重用性。
相关问题
selenium pageobject
Selenium Page Object模式是一种设计模式,用于将页面的元素和操作封装到一个类中,以便于测试代码的编写和维护。通过使用Page Object模式,可以将测试代码与页面的具体实现细节分离,提高测试代码的可读性和可维护性。
在引用的代码中,可以看到使用了Page Object模式的一些示例。首先,通过声明一个包含两个元素的元组,存放操作方式及内容,来定位页面元素\[2\]。然后,通过声明一个方法,封装对元素的操作,来实现对页面元素的操作\[2\]。最后,在构造方法中传入浏览器,并和测试用例类使用同一浏览器\[2\]。
此外,还可以看到在引用的代码中,使用了selenium库的webdriver模块来启动浏览器、访问网页,并进行元素定位和操作\[1\]\[3\]。
总结来说,Selenium Page Object模式是一种将页面元素和操作封装到类中的设计模式,可以提高测试代码的可读性和可维护性。在使用Page Object模式时,可以通过声明元组来定位页面元素,通过声明方法来封装对元素的操作,并在构造方法中传入浏览器对象。
#### 引用[.reference_title]
- *1* [Python+Selenium自动化测试(五):Page Object模式](https://blog.csdn.net/Max_138015/article/details/120028865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [selenium设计模式之------PageObject,自动化测试分层设计思想](https://blog.csdn.net/weixin_42976139/article/details/102368263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
Page Object举例
假设我们有一个网站,其中包含一个登录页面和一个主页面。首先,我们创建一个名为 LoginPage 的页面类,该类封装了登录页面的逻辑,包括元素的定位、操作和验证等。代码示例如下:
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class LoginPage:
def __init__(self, driver: WebDriver):
self.driver = driver
self.username_input = (By.ID, "username")
self.password_input = (By.ID, "password")
self.login_button = (By.ID, "login-button")
def visit(self):
self.driver.get("https://example.com/login")
def login(self, username, password):
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.username_input))
self.driver.find_element(*self.username_input).send_keys(username)
self.driver.find_element(*self.password_input).send_keys(password)
self.driver.find_element(*self.login_button).click()
def is_login_successful(self):
try:
WebDriverWait(self.driver, 10).until(EC.url_contains("https://example.com/home"))
return True
except:
return False
```
LoginPage 类包含了以下几个方法:
1. `__init__`:初始化方法,用于定义页面元素的定位器。
2. `visit`:打开登录页面的方法。
3. `login`:用于输入用户名和密码并点击登录按钮的方法。
4. `is_login_successful`:用于验证登录是否成功的方法。
接下来,我们创建一个名为 TestLogin 的测试用例类,该类使用 LoginPage 类进行登录并验证登录是否成功。代码示例如下:
```python
from selenium import webdriver
import unittest
from LoginPage import LoginPage
class TestLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.login_page = LoginPage(self.driver)
def test_login_successful(self):
self.login_page.visit()
self.login_page.login("username", "password")
self.assertTrue(self.login_page.is_login_successful())
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
```
TestLogin 类包含了以下几个方法:
1. `setUp`:初始化方法,用于创建 WebDriver 对象和 LoginPage 对象。
2. `test_login_successful`:测试用例方法,用于执行登录并验证登录是否成功。
3. `tearDown`:清理方法,用于关闭浏览器。
通过使用 Page Object 模式,我们可以将页面的逻辑和测试用例分离开来,使测试代码更加简洁、可读和易于维护。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)