selenium - 为 Firefox 和 Chrome 编写 selenium 测试时避免代码重复
问题描述
如果您为 Selenium 编写测试以检查例如 Firefox 和 Chrome,则测试看起来非常相似,除了设置,参见例如https://gist.github.com/devinmancuso/54904c005f8d237f6fec,它具有相同的功能test_search_in_python_chrome
和test_search_in_python_firefox
. 有一些模式可以避免 selenium 中的代码重复,例如 Page Object Pattern。
有没有办法避免这种巨大的代码重复?
解决方案
setUp
您提供的链接中的内容是driver
初始化。您可以在另一个类中处理此问题并从属性文件中读取浏览器类型
def get_driver(self):
browser = get_value_from_configurations_file()
url = get_value_from_configurations_file()
driver = None
if browser == 'chrome':
driver = webdriver.Chrome()
elif browser == 'firefox':
driver = webdriver.Firefox()
driver.maximize_window()
driver.get(url)
return driver
我通常在驱动程序工厂和测试之间使用“中间人”来处理driver
操作并获取 PO 起点
class WebApplication:
def __init__(self):
self.__driver = WebDriverFactory().get_driver()
def get_driver(self):
return self.__driver
def get_home_page(self):
return HomePage(self.__driver)
并从基础测试类中使用它
@pytest.mark.usefixtures("run_for_test")
class AbstractTest(ABC):
web_application = None
@pytest.fixture()
def run_for_test(self, request):
AbstractTest.web_application = WebApplication()
# set up for all tests
yield
# tear down for all tests
示例测试:
class TestExample(AbstractTest):
def test_example(self):
home_page = \
(self.web_application
.get_home_page())
这样,您只需更改配置文件即可编写一次测试并在不同的浏览器上运行它。
推荐阅读
- reactjs - 使用材质 ui 获取数据网格中的选定值
- java - 从基类调用时,selenium 驱动程序返回 null
- php - Laravel:如何在模态中验证字段?
- amazon-ec2 - 无法将日志发送到 ec2 logstash
- data-structures - 给定顶点数组和索引数组,我如何计算半边?
- python - 用空列表在 Python 中创建字典 - 如何用另一个列表中的值填充它?
- excel-formula - Excel查找范围内非零之后的第一个零
- python - 如何将 numpy 数组从 (2,4) 转换为 (4, 2)
- python-3.x - 输入“找零”时如何计算所需硬币的总数
- react-native - 当用户使用 React Navigation 按下选项卡图标时显示底部表格