selenium - pytest - 有没有办法忽略自动使用装置?

标签 selenium selenium-webdriver pytest fixtures

我有这个 autouse fixture ,它将为每个测试创建一个 webdriver 实例:

@pytest.fixture(autouse=True)
def use_phantomjs(self):
    self.wd = webdriver.PhantomJS()
    yield
    self.close_wd()

但是,由于我们的某个 API 存在错误,我们的某些测试无法在 PhantomJS 上运行。这些测试只能在 Chrome(或 Firefox)上运行,所以我使用 Chrome 为 webdriver 实例创建了另一种方法:
def use_chrome(self):
    self.wd = webdriver.Chrome()

我计划在这些测试中使用它,但我无法绕过上面的 autouse 固定装置。

有没有办法以某种方式覆盖我们某些测试的自动使用装置?我试过使用 pytest.mark.usefixtures对于每个测试,但必须在每个测试中都放置该装饰器似乎并不理想。有人提到使用元类,但我还没有完全理解它们是如何工作的,所以我想知道是否还有其他一些我可能错过的方法。

最佳答案

----- 更新最新版本的 pytest -----
使用 request.node.get_closest_marker()得到标记。引用 get_closest_marker

您可以通过多种方式实现这一点,一种方式是使用请求装置和 pytest 标记修复。
您需要做的就是创建一个新的通用 fixture

@pytest.fixture(autouse=True)
def browser(request):
    # _browser = request.node.get_marker('browser')
    _browser = request.node.get_closest_marker('browser')
    if _browser:
       if _browser.kwargs.get("use") == "chrome" :
            # Do chrome related setup
       elif _browser.kwargs.get("use") == "phantom" :
            # Do Phantom.js related setup
   else:
       # No mark up ,use default setup
并像这样标记你的测试
@pytest.mark.browser(use="chrome")
def test_some_chrome_test():
    # browser here would return chrome driver

@pytest.mark.browser(use="phantom")
def test_some_phantomjs_test():
    # browser here would return phantom driver

关于selenium - pytest - 有没有办法忽略自动使用装置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39558812/

相关文章:

java - 为每个选择元素设置值 - Java Selenium WebDriver

python - 如何自动设置 pytest.param id?

python - 如何在间接参数化中对 request.param 进行注释?

python - Selenium:无法单击 iframe 中的按钮

java - Selenium 无法通过 id 和 xpath 找到元素

javascript - 如何在没有浏览器的机器上运行 cucumber 以及 Selenium 和 capybara ?

python - 无法访问表单字段

java - Selenium 2 (WebDriver) + Java + Maven + Eclipse Hello World 程序问题

java - Selenium Web 驱动程序 - 切换到父窗口

python - 以正确的方式设置 Pyramid 1.5 测试