Не делаются скриншоты в pytest
Файл conftest.py
import os
import allure
import pytest
@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 'request' in item.fixturenames:
web_driver = item.funcargs['request']
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))
def pytest_configure():
return {'current': None, 'id': None}
часть файла с тестами
@pytest.fixture()
def check_url():
driver = webdriver.Chrome()
current_url = driver.current_url
@pytest.mark.parametrize('id', str(random.randint(11, 999)))
@pytest.fixture(params=["chrome"], scope="class")
def driver_init(request):
if request.param == "chrome":
web_driver = webdriver.Chrome()
request.cls.driver = web_driver
yield
web_driver.close()
При создании скриншота выдает ошибку
test_create_blog.py::TestsVariablesOnBlogPage::test_variables_on_page_blog_front[chrome] Fail to take screen-shot: 'FixtureRequest' object has no attribute 'get_screenshot_as_png'
RERUN [ 92%]
test_create_blog.py::TestsVariablesOnBlogPage::test_variables_on_page_blog_front[chrome] Fail to take screen-shot: 'FixtureRequest' object has no attribute 'get_screenshot_as_png'
FAILED [ 92%]
test_create_blog.py::TestsVariablesOnBlogPage::test_login_success[chrome] Fail to take screen-shot: 'FixtureRequest' object has no attribute 'get_screenshot_as_png'
Подскажите в чем может быть дело. Тут либо вместо request надо что-то другое (if 'request' in item.fixturenames:) Либо что-то менять в фикстуре надо.
как я понял нужно инициализировать selenium_webdriver в файле conftest.py, вопрос как именно это сделать
Ответы (1 шт):
Автор решения: Данил М.
→ Ссылка
Я думаю, ваша ошибка заключается в том что в строке
web_driver = item.funcargs['request']
вы получаете не объект драйвера, который изначально инициализировали, а фактически request https://docs.pytest.org/en/6.2.x/reference.html?highlight=api#request
учитывая код вашей fixture, я думаю что вы сможете получить объект драйвера с помощью
web_driver = item.funcargs['request'].cls.driver