make screenshots
This commit is contained in:
@@ -23,13 +23,13 @@ def driver():
|
|||||||
def pytest_addoption(parser):
|
def pytest_addoption(parser):
|
||||||
"""Command line parser."""
|
"""Command line parser."""
|
||||||
parser.addoption(f'--{Config.BASE_URL}',
|
parser.addoption(f'--{Config.BASE_URL}',
|
||||||
default='https://s57.ivazh.ru/styles/r14/#12.13/71.2832/72.13405',
|
default='https://s57map.ivazh.ru/',
|
||||||
dest=Config.BASE_URL,
|
dest=Config.BASE_URL,
|
||||||
action='store',
|
action='store',
|
||||||
metavar='str',
|
metavar='str',
|
||||||
help='Environment for run tests.')
|
help='Environment for run tests.')
|
||||||
parser.addoption(f'--{Config.STAGING}',
|
parser.addoption(f'--{Config.STAGING}',
|
||||||
default='s57.ivazh.ru',
|
default='s57map.ivazh.ru',
|
||||||
dest=Config.STAGING,
|
dest=Config.STAGING,
|
||||||
action='store',
|
action='store',
|
||||||
metavar='str',
|
metavar='str',
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
from screenshot_tests.utils.screenshots import TestCase
|
from screenshot_tests.utils.screenshots import TestCase
|
||||||
@@ -6,15 +8,27 @@ import time
|
|||||||
|
|
||||||
class TestExample(TestCase):
|
class TestExample(TestCase):
|
||||||
def test_main_page(self):
|
def test_main_page(self):
|
||||||
self.driver.get("https://s57.ivazh.ru/styles/r14/#12.13/71.2832/72.13405")
|
self.driver.get("https://s57map.ivazh.ru/")
|
||||||
|
|
||||||
def action():
|
def action():
|
||||||
time.sleep(5)
|
time.sleep(2)
|
||||||
|
|
||||||
self.check_by_screenshot(None, full_page=True, action=action)
|
self.check_by_screenshot(None, full_page=True, action=action)
|
||||||
|
|
||||||
# def test_search_block(self):
|
def test_search_block(self):
|
||||||
# self.driver.get("https://s57.ivazh.ru/styles/r14/#12.13/71.2832/72.13405")
|
self.driver.get("https://s57.ivazh.ru/styles/r14/#12.13/71.2832/72.13405")
|
||||||
# self.driver.implicitly_wait(5)
|
|
||||||
#
|
def action():
|
||||||
# self.check_by_screenshot((By.CSS_SELECTOR, ".ol-mouse-position"))
|
time.sleep(2)
|
||||||
|
|
||||||
|
self.check_by_screenshot_file(None, screenshot_path=f'test_search_block.png',
|
||||||
|
full_page=True, action=action)
|
||||||
|
|
||||||
|
def test_save_screenshot(self):
|
||||||
|
self.driver.get("https://s57.ivazh.ru/styles/r14/#12.13/71.2832/72.13405")
|
||||||
|
|
||||||
|
def action():
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
self.save_screenshot('test_search_block.png', full_page=True, action=action)
|
||||||
|
|
||||||
|
|||||||
BIN
screenshot_tests/tests/test_search_block.png
Normal file
BIN
screenshot_tests/tests/test_search_block.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
@@ -191,6 +191,50 @@ class TestCase(common.TestCase):
|
|||||||
|
|
||||||
return diff, saved_url, prod_url
|
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):
|
def get_diff(self, *args, **kwargs):
|
||||||
diff, _, _ = self._get_diff(*args, **kwargs)
|
diff, _, _ = self._get_diff(*args, **kwargs)
|
||||||
return diff
|
return diff
|
||||||
@@ -198,3 +242,29 @@ class TestCase(common.TestCase):
|
|||||||
def check_by_screenshot(self, element, *args, **kwargs):
|
def check_by_screenshot(self, element, *args, **kwargs):
|
||||||
diff, saved_url, prod_url = self._get_diff(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()}"
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user