Как автоматически делать скриншот при падении Selenium теста в py.test

Показанный ниже код будет автоматически делать скриншоты при неуспехе теста. Он делает это только для Selenium тестов различая их по имени фикстуры с Selenium webdriver browser - если вы используете другое имя то вам надо поправить этот код.

Я использую allure для построения отчетов по тестам и данный код помещает скриншот в отчет allure.

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
rep = outcome.get_result()
if rep.when == 'call' and rep.failed:
mode = 'a' if os.path.exists('failures') else 'w'
try:
with open('failures', mode) as f:
if 'browser' in item.fixturenames:
web_driver = item.funcargs['browser']
else:
print('Fail to take screen-shot')
return
allure.attach(
web_driver.get_screenshot_as_png(),
name='screenshot',
attachment_type=allure.attachment_type.PNG
)
except Exception as e:
print('Fail to take screen-shot: {}'.format(e))
view raw conftest.py hosted with ❤ by GitHub

В итоге вы получите отчет похожий на приведеный на картинке выше.

Вы можете посмотреть на полный код тестов.

Или узнать как с минимальными усилиями можно развернуть Selenium + Allure конфигурацию для тестов из моей статьи.