AttributeError:“Class”对象没有属性“rep_call”

问题描述 投票:0回答:1

我想使用 Pytest 和 Selenium 来测试 Web 应用程序。我只想在测试方法失败时捕获屏幕截图。我有以下固定装置:

def driver_init(request):
    # set up driver

    def close_driver():
        driver.quit()

    request.cls.driver = driver
    request.addfinalizer(close_driver)
    yield driver
    if request.node.rep_call.failed:
        try:
            allure.attach(driver.get_screenshot_as_png(), name=request.function.__name__, attachment_type=AttachmentType.PNG)
        except:
            pass

但是,当我运行此代码并且测试方法失败时,我收到以下错误:

AttributeError:“Class”对象没有属性“rep_call”。

我做错了什么?

python selenium pytest fixtures
1个回答
0
投票

这对我有用。 get_browser 方法将保存各种浏览器的驱动程序实现。

@pytest.fixture()
def log_on_failure(request, get_browser):
    driver = get_browser
    yield
    item = request.node
    if item.rep_call.failed:
    allure.attach(driver.get_screenshot_as_png(), name="Failure",
                  attachment_type=allure.attachment_type.PNG)

使用 hookimpl 夹具并将其维护在 conftest.py 文件中

@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    rep = outcome.get_result()
    setattr(item, "rep_" + rep.when, rep)
    return rep
© www.soinside.com 2019 - 2024. All rights reserved.