more examples

This commit is contained in:
a.krasnov
2020-12-02 00:21:18 +03:00
parent 74a21c92a6
commit 6f53f11749
2 changed files with 18 additions and 5 deletions

View File

@@ -1,4 +1,5 @@
from screenshot_tests.utils.screenshots import TestCase
from selenium.webdriver.common.by import By
class TestExample(TestCase):
@@ -15,6 +16,14 @@ class TestExample(TestCase):
def test_main_page_flaky(self):
self.driver.get("https://go.mail.ru/")
# Чтобы посмотреть как выглядит сломанный тест в отчетеы
# Чтобы посмотреть как выглядит сломанный тест в отчетe
self.driver.find_element_by_xpath("//input[not(@type='hidden')]").send_keys("foo")
self.check_by_screenshot(None, full_page=True)
def test_search_result(self):
self.driver.get("https://go.mail.ru/")
def action():
self.driver.find_element_by_xpath("//span[contains(text(), 'Соцсети')]").click()
self.check_by_screenshot((By.CSS_SELECTOR, ".MainPage-verticalLinksWrapper"), action=action)

View File

@@ -47,6 +47,7 @@ class TestCase(common.TestCase):
time.sleep(scroll_time)
total_height = self.driver.execute_script("return document.body.parentNode.scrollHeight")
logging.info(f"new total height: {total_height}")
logging.info(f"y: {y}")
# Если высота перестала изменяться, или элемент уже попал на скриншот.
# Второе условие позволяет не скролить до конца на стрницах с "бесконечной" длинной (выдача видео, картинок)
if (old_total_height == total_height) or (total_height > y):
@@ -60,7 +61,7 @@ class TestCase(common.TestCase):
assert viewport_width == total_width, "Ширина вьюпорта, и ширина экрана должны совпадать"
self._scroll(0, 0)
while offset <= total_height:
while offset <= total_height or offset <= y:
logging.info(f"offset: {offset}, total height: {total_height}")
screenshots.append(self.driver.get_screenshot_as_png())
offset += viewport_height
@@ -68,7 +69,10 @@ class TestCase(common.TestCase):
# эта часть последнего скриншота, которая дублирует предпоследний скриншот
# так просходит потому что не всегда страница делится на целое количество вьюпортов
over_height = offset - total_height
if total_height >= offset:
over_height = offset - total_height
else:
over_height = 0
logging.info(f"offset: {offset}, total height: {total_height}, over height: {over_height}, pixel density: {self.pixel_ratio}")
return self.image_processor.paste(screenshots, over_height * self.pixel_ratio)
@@ -139,7 +143,7 @@ class TestCase(common.TestCase):
"""Получит скриншоты с текущей страницы, и с эталонной.
Поблочно сравнит их, и вернет количество отличающихся блоков.
:param element: любой объект у которого есть свойства locator_type, и query_string (по ним будет найден элемент)
:param element: тюпл с типом локатора и локатором
:param action: функция которая подготовит страницу к снятию скриншота
:param full_screen: ресайзить ли браузер до максимума
:param full_page: скринить всю страницу, а не только переданный элемент
@@ -153,7 +157,7 @@ class TestCase(common.TestCase):
locator_type, query_string = (By.XPATH, "//body")
scroll_and_screen = False
else:
locator_type, query_string = element.locator_type, element.query_string
locator_type, query_string = element[0], element[1]
saved_url = urlparse(self.driver.current_url)
# noinspection PyProtectedMember