在为Firefox和Chrome编写Selenium测试时,避免代码重复的关键在于使用设计模式和工具来提高代码的可重用性和可维护性。以下是一些基础概念和相关策略:
创建一个基础页面类和具体的页面类:
from selenium.webdriver.common.by import By
class BasePage:
def __init__(self, driver):
self.driver = driver
class HomePage(BasePage):
def __init__(self, driver):
super().__init__(driver)
self.url = "http://example.com"
self.search_box = (By.ID, "search-box")
self.search_button = (By.ID, "search-button")
def open(self):
self.driver.get(self.url)
def search(self, query):
self.driver.find_element(*self.search_box).send_keys(query)
self.driver.find_element(*self.search_button).click()
创建一个工厂类来管理不同浏览器的WebDriver实例:
from selenium import webdriver
class WebDriverFactory:
def get_driver(self, browser_name):
if browser_name.lower() == "chrome":
return webdriver.Chrome()
elif browser_name.lower() == "firefox":
return webdriver.Firefox()
else:
raise ValueError(f"Unsupported browser: {browser_name}")
使用上述组件编写测试用例:
import unittest
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class TestHomePage(unittest.TestCase):
def setUp(self):
self.driver_factory = WebDriverFactory()
self.driver = self.driver_factory.get_driver("chrome") # 或 "firefox"
self.home_page = HomePage(self.driver)
def test_search(self):
self.home_page.open()
self.home_page.search("Selenium")
# 添加断言来验证搜索结果
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
原因: 直接在每个测试用例中编写浏览器初始化和页面操作代码。
解决方法: 使用Page Object Model和Driver Factory来抽象和封装这些操作。
原因: 每次切换浏览器都需要修改大量代码。
解决方法: 使用Driver Factory来集中管理浏览器实例的创建,通过参数化轻松切换浏览器。
通过上述方法,可以有效地避免代码重复,提高测试脚本的可维护性和可扩展性。
领取专属 10元无门槛券
手把手带您无忧上云