Pythonselenium 两个以上的Page Object Model使用实例
时间: 2024-10-06 21:01:35 浏览: 31
Python Selenium通常用于自动化Web浏览器操作,而Page Object Model (POM)是一种设计模式,它将页面元素和交互逻辑分离到独立的模块中,使得测试更易于维护。当涉及到处理多个页面对象时,可以创建单独的Page Object Class对应每个不同的网页。
举个例子:
```python
# 假设我们有两个页面:主页和详情页
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from page_object_models.base_page import BasePage
class HomePage(BasePage):
def __init__(self, driver):
super().__init__(driver)
self.url = "http://www.example.com/home"
# 页面元素和功能
def search_button(self):
return self.find_element_by_id("search-btn")
def perform_search(self, keyword):
self.search_button().click()
self.wait.until(EC.presence_of_element_located((By.ID, "search-results")))
class DetailsPage(BasePage):
def __init__(self, driver, product_id):
super().__init__(driver)
self.product_id = product_id
self.navigate_to_product(product_id)
def navigate_to_product(self, product_id):
self.driver.get(f"http://www.example.com/details/{product_id}")
def product_name(self):
return self.find_element_by_css_selector(".product-name")
# 使用场景
def main():
driver = webdriver.Chrome()
home_page = HomePage(driver)
home_page.open() # 访问主页
search_keyword = input("请输入搜索关键词:")
home_page.perform_search(search_keyword)
details_link = home_page.search_results_first_item().click() # 获取并点击第一个搜索结果
details_page = DetailsPage(driver, details_link.get_attribute('href'))
print(details_page.product_name()) # 显示详细页的产品名
driver.quit()
if __name__ == "__main__":
main()
```
在这个例子中,`HomePage` 和 `DetailsPage` 分别代表主页和详情页,它们都是`BasePage` 的子类。通过这种方式,我们可以分别管理和测试每个页面的行为,而不需要关注底层的Selenium API细节。
阅读全文