【问题标题】:Pytest webdriver fixture can't introspect some optionsPytest webdriver 夹具无法内省某些选项
【发布时间】:2018-02-22 16:37:13
【问题描述】:
我的框架目前只有一个 conftest.py 文件,其中包含一个名为 browser 的夹具,它将 webdriver 对象返回给测试。我们最近尝试在_generate_configuration_中实现metafunc.parametrize,以便在browserstack上测试跨浏览器和跨平台,但遇到了问题。当在 ui 测试开始时调用浏览器夹具时,它不知道基于 metafunc.parametrize 方法运行测试的当前浏览器/操作系统/版本。
可以在这里找到一个很好的示例,但我喜欢使用fixture 处理webdriver 对象的想法,因为当webdriver 超出范围时使用yield 语句处理它是多么容易。它还干掉了代码:https://qxf2.com/blog/selenium-cross-browser-cross-platform-pytest/
【问题讨论】:
标签:
python
selenium
pytest
【解决方案1】:
Webdrivers 作为固定装置是我强烈推荐的一种很好的方法,特别是因为一旦你的测试完成,你就可以获得免费的拆卸和 driver.quit()。如果您的驱动程序要处理不同的版本/浏览器,我强烈建议您执行以下操作:
- 为不同的浏览器/版本创建包含 DesiredCapabilities 的运行配置字典
- 如果您只想每次都针对所有配置测试所有内容,请将您的参数化测试生成配置为迭代所有运行配置
- 如果您希望能够针对特定的目标,请在您的 conftest.py 中为 --run-configuration 添加一个命令行参数,该参数映射到您的配置中所需的 DesiredCapabilities。
- 编写一个名为desired_capabilities (scope=session) 的fixture,它读取config.getoption('--run-configuration') 并将关联的DesiredCapabilities 传递给驱动fixture 中的webdriver 调用。