make screenshots

This commit is contained in:
Ivan Vazhenin
2022-09-28 20:53:40 +03:00
parent 25a79ed807
commit 201b660077
4 changed files with 93 additions and 9 deletions
+70
View File
@@ -191,6 +191,50 @@ class TestCase(common.TestCase):
return diff, saved_url, prod_url
def _get_screenshot_diff(self, element=None, screenshot_path=None, action=None, full_screen=True,
full_page=False, finalize=None, scroll_and_screen=True):
"""Получит скриншот с текущей страницы, поблочно сравнит с эталонным и вернет количество отличающихся блоков.
:param screenshot_path: путь к файлу с изображением.
:param element: tuple с типом локатора и локатором.
:param action: функция, которая подготовит страницу к снятию скриншота.
:param full_screen: resize ли браузер до максимума.
:param full_page: скринить всю страницу, а не только переданный элемент.
:param finalize: финализация после сравнения скриншотов.
:param scroll_and_screen: скролить страницу (сверху к низу) и склеивать участки в один скриншот.
"""
if full_screen:
self._use_full_screen()
if full_page:
locator_type, query_string = (By.XPATH, "//body")
scroll_and_screen = False
else:
locator_type, query_string = element[0], element[1]
saved_url = urlparse(self.driver.current_url)
test_url = self.base_url
self.driver.get(test_url)
test_image, coords_prod = self._get_element_screenshot(locator_type, query_string, action, finalize, scroll_and_screen)
logging.info('Done screen on test stand')
# Возращаемся на тестовый стенд. Всегда нужно возвращаться на тестовый стенд. На это завязаны тесты и отчеты
self.driver.get(saved_url.geturl())
second_image = Image.open(screenshot_path, formats=['PNG'])
# Для добавления в отчет (https://github.com/allure-framework/allure2/tree/master/plugins/screen-diff-plugin)
# noinspection PyUnboundLocalVariable
allure.attach(self.image_processor.image_to_bytes(test_image), 'actual', allure.attachment_type.PNG)
# noinspection PyUnboundLocalVariable
allure.attach(self.image_processor.image_to_bytes(second_image), 'expected', allure.attachment_type.PNG)
# noinspection PyUnboundLocalVariable
diff, result = self.image_processor.get_images_diff(test_image, second_image)
allure.attach(result, 'diff', allure.attachment_type.PNG)
return diff, test_url
def get_diff(self, *args, **kwargs):
diff, _, _ = self._get_diff(*args, **kwargs)
return diff
@@ -198,3 +242,29 @@ class TestCase(common.TestCase):
def check_by_screenshot(self, element, *args, **kwargs):
diff, saved_url, prod_url = self._get_diff(element, *args, **kwargs)
assert diff == 0, f"Элемент отличается на страницах:\n{saved_url.geturl()}\nи\n{prod_url.geturl()}"
def check_by_screenshot_file(self, element, *args, **kwargs):
diff, test_url = self._get_screenshot_diff(element, *args, **kwargs)
assert diff == 0, f"Элемент отличается на странице:\n{test_url.geturl()}\n"
def save_screenshot(self, screenshot_path, element=None, action=None, full_screen=True, full_page=False, finalize=None, scroll_and_screen=True):
if full_screen:
self._use_full_screen()
if full_page:
locator_type, query_string = (By.XPATH, "//body")
scroll_and_screen = False
else:
locator_type, query_string = element[0], element[1]
saved_url = urlparse(self.driver.current_url)
test_url = self.base_url
self.driver.get(test_url)
test_image, coords_prod = self._get_element_screenshot(locator_type, query_string, action, finalize, scroll_and_screen)
self.driver.get(saved_url.geturl())
test_image.save(screenshot_path, format='png')
return coords_prod