Similar presentations:
Python классы Playwright тесты
1. Python. Классы. Playwright. Тесты
2. Классы в Python
3.
Классы — это основа объектно-ориентированного программирования (ООП) вPython.
Они позволяют создавать собственные типы данных, объединяя данные и поведение.
• Что такое класс?
Класс — это шаблон (чертёж), по которому создаются объекты.
Объект — это экземпляр класса.
• Простейший пример
class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"Привет, я {self.name}")
p = Person("Алиса")
p.say_hello() # Привет, я Алиса
• Что делает init?
Это конструктор, который вызывается при создании объекта: init — специальный метод,
который настраивает объект при создании.
4.
Основные элементы классаЭлемент
Назначение
class
Объявление нового класса
__init__
Конструктор класса, вызывается при
создании объекта (инициализация)
self
Ссылка на текущий экземпляр класса
(объект)
Методы
Функции, определенные внутри класса
и работающие с его объектами
Атрибуты
Переменные, принадлежащие объекту
(данные объекта)
5.
МетодыМетод — это функция, определённая внутри класса. Первый аргумент всегда self.
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
Атрибуты класса и объекта
class Example:
class_attr = "общий"
def __init__(self):
self.obj_attr = "индивидуальный"
print(Example.class_attr)
e = Example()
print(e.obj_attr)
6.
НаследованиеКласс может наследовать поведение другого класса:
class Animal:
def speak(self):
print("Я животное")
class Dog(Animal):
def speak(self):
print("Гав!")
d = Dog()
d.speak() # Гав!
7.
Задания для практики• Класс Coin
Создай класс Coin, у которого есть:
Атрибут value (номинал)
Метод flip(), который случайным образом меняет сторону: 'орёл' или 'решка'
• Класс Box
Класс Box:
Хранит список предметов
Метод add(item) — добавляет
Метод remove(item) — удаляет
Метод len() — возвращает количество
• Класс Library и Book
Создай два класса:
Book(title, author)
Library(), у которого:
add_book(book)
list_books()
8. Запись скрипта с помощью Codegen
9.
Итак, вместо того, чтобы писать весь код с нуля, мы можем сгенерировать код спомощью наших действий в браузере, а затем изменить код в соответствии с нашими
потребностями.
Для запуска codegen откройте терминал (Pycharm, VScode), введите приведенную ниже
команду и нажмите Enter.
playwright codegen standIP
playwright codegen –ignore-https-errors 10.0.207.151
Это команда откроет два окна:
Браузер Chromium
Playwright Inspector
Далее вы можете выполнить необходимое действие по сценарию в браузере, а codegen
запишет и сгенерирует код для выполняемого вами действия.
В Playwright Inspector каждое ваше взаимодействие с веб-сайтом будет отображаться как
новая строка кода.
10.
Пример:from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://demo.playwright.dev/todomvc/#/")
page.get_by_placeholder("What needs to be done?").click()
page.get_by_placeholder("What needs to be done?").fill("Создать первый сценарий
playwright")
page.get_by_placeholder("What needs to be done?").press("Enter")
page.get_by_role("checkbox", name="Toggle Todo").check()
# --------------------context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
11.
Давайте попробуем разобрать основную часть сгенерированного кода.Для того чтобы получить доступ ко всем функциям, методам и классам playwright,
необходимо импортировать его в наш код, что делает приведенная строка кода ниже
from playwright.sync_api import Playwright, sync_playwright, expect
Следующие три строки отвечают за запуск браузера и создание в нем контекста
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
playwright.chromium.launch - запуск браузера chromium
headless=False - дает команду, чтобы браузер chromium отображался и был видимым при
запуске кода. Ели вы установите True, то браузер не будет отображаться. Но при этом
все записанные в коде действия сценария будут выполнены.
new_context() - создает изолированный сеанс браузера.
new_page() - открывает новую страницу(tab) в браузере
После того как браузер открыт и подготовлен, можно начать с ним работать.
12.
page.goto("https://demo.playwright.dev/todomvc/#/")Метод page.goto() необходим, чтобы открыть веб-сайт.
page.get_by_placeholder("What needs to be done?").click()
page.get_by_placeholder("What needs to be done?").fill("Создать первый сценарий
playwright")
С помощью метода get_by_placeholder("What needs to be done?") playwright находит в
DOM дереве веб-элемент c атрибутом тега placeholder и значением атрибута What
needs to be done?
Далее мы начинаем взаимодействовать с этим веб-элементом
click()- эмулирует клик левой кнопкой мышки по веб-элементу
fill() - этот метод вводит значения, переданные ему в качестве аргумента в веб-элемент. В
нашем случае это текст - "Создать первый сценарий playwright"
press("Enter") - эмулирует нажатие клавиши Enter на клавиатуре.
13.
Дополнительные опции CodegenПомимо указания url, сodegen может принимать еще несколько дополнительных атрибутов.
Общий синтаксический формат для записи сценария выглядит так:
codegen [параметры] [url]
Узнать доступные опции и краткое их описание можно, выполнив команду
playwright codegen --help
Рассмотрим несколько из них.
Вы можете указать размер открываемого окна браузера, указав аргумент --viewport-size
playwright codegen --viewport-size=800,600 https://demo.playwright.dev/todomvc/#/
При записи сценария вы можете сразу указать файл, в который будете сохранен записанный
код, добавив аргумент -о или --output и указав имя файла.
playwright codegen -o lesson.py https://demo.playwright.dev/todomvc/#/
14. Browser, Context и Page
Playwright работает с тремя различными слоями, которые строятся друг на друге:Browser, Context и Page.
Рассмотрим каждый из них .
15.
BrowsersДля работы каждой версии Playwright требуются определенные версии браузеров. В
отличие от Selenium, Playwright не использует webdriver. С каждой новым
выпуском, Playwright обновляет версии браузеров которые он поддерживает. Это
означает, что при каждом обновлении Playwright вам, возможно придется заново
запускать команду playwright install
Для Google Chrome, Microsoft Edge и других браузеров на базе Chromium по
умолчанию Playwright использует сборки Chromium с открытым исходным
кодом.
BrowserContext
Playwright использует контексты браузера для достижения изоляции тестов.
Страницы в двух отдельных контекстах не имеют общих cookie, настроек
профиля. Контекстом можно назвать независимую сессию браузера, схожую с
режимом инкогнито. По сравнению с Selenium, они не требуют собственного
процесса браузера. Для получения чистой среды тест может просто открыть
новый контекст. Как правило, каждый тест имеет свой собственный контекст.
Pages
Page содержит содержимое загруженного веб-сайта. Каждый Context может иметь
несколько страниц. Используется для навигации по URL-адресам и
взаимодействия с содержимым страницы.
16. Первый тест
17.
У нас есть записанный скрипт Playwright, и мы понимаем некоторые основные функцииPlaywright. Однако, для создания реальных E2E тестов обычно используется
специализированный фреймворк/тестовый раннер.
Pytest - наиболее популярный фреймворк с открытым исходным кодом. С помощью
pytest можно запускать определенные тесты, пропускать их, хранить тестовые
примеры в структурированном виде.
Pytest автоматически сканирует ваш код на наличие тестовых модулей, файлов,
следующих соглашению об именовании:
Пакет/директория: "test*"
Файлы test_*.pyили *_test.py
Классы Test*
функций test_*()
Давайте перепишем ранее записанный скрипт так, чтобы он мог запускаться с помощью
pytest.
18.
Первое, что нужно сделать - переименовать файл, чтобы он следовал соглашению по именованию в pytest.Назовем наш файл test_todo.py
Вторым шагом переименуем название функции в test_add_todo.
Поскольку запуском тестовых функций будет заниматься pytest, в коде уже нет необходимости явно вызывать
функцию. Удаляем код отвечающий за это.
with sync_playwright() as playwright:
run(playwright)
У нас должен получиться такой код.
from playwright.sync_api import Playwright, sync_playwright, expect
def test_add_todo(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://demo.playwright.dev/todomvc/#/")
page.get_by_placeholder("What needs to be done?").click()
page.get_by_placeholder("What needs to be done?").fill("Создать первый сценарий playwright")
page.get_by_placeholder("What needs to be done?").press("Enter")
context.close()
browser.close()
Вы можете запустить тесты, написав в терминале pytest и нажав Enter.
19.
После выполнения появится отчет о количестве найденных тестов и об успешности ихпрохождения.
Каждый раз запускать тест с помощью консоли - не самый удобный вариант. У Pycharm
есть решение данной проблемы. Нажмите Ctrl-Shift-A(для Windows) или Cmd-ShiftA(для MacOS). В открывшемся окне введите pytest. Откроется меню настроек Python
Integrated Tools с выбором тест-раннера. Выберите в качестве тест-раннера по
умолчанию pytest.
После этого напротив каждой тестовой функции или тестового класса появится кнопка
запуска.
20. Fixtures - Pytest-playwright
21.
Fixtures — это функции, выполняемые pytest до или после тестовых функций.Это способ выполнения действий для теста, но не внутри тестовой функции.
Основная задача фикстуры - создание соответствующего тестового
окружения.
Чтобы сообщить pytest, что данная функция является фикстурой, необходимо
импортировать библиотеку pytest и использовать декоратор @pytest.fixture
для функции которая будет выступать фикстурой. Для того чтобы
задействовать фикстуру для теста, необходимо передать имя данной
фикстуры в список параметров тестовой функции.
import pytest
@pytest.fixture
def my_fixture():
pass
def test_add_todo(my_fixture):
pass
22.
Вы можете реализовать собственную фикстуру на основе уже имеющегося кода.@pytest.fixture
def browser_fixture():
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
yield page
page.close()
browser.close()
Но ребята из команды разработки Playwright подготовили готовое решение и этого
вопроса
23.
pytest-playwrightАддон pytest-playwright реализует несколько фикстур. Наиболее широко используемой
из которых является фикстура - "page". Фикстура page предоставляет новую вебстраницу для запуска теста и функции для работы с ней.
Установка:
uv add pytest-playwright или pip install pytest-playwright
Перепишем записанный код для запуска его с помощью pytest и фикстур из аддона
pytest-playwright
def test_add_todo(page):
page.goto("https://demo.playwright.dev/todomvc/#/")
page.get_by_placeholder("What needs to be done?").click()
page.get_by_placeholder("What needs to be done?").fill("Создать первый сценарий
playwright")
page.get_by_placeholder("What needs to be done?").press("Enter")
Код стал намного чище и лаконичнее
По умолчанию pytest-playwright делает браузер headless(безголовым). Если вы хотите
выполнить в режиме headed, передайте параметр, как показано ниже.
pytest --headed
24.
Редактирование контекста браузераЕсли для выполнения теста вам требуются особые параметры контекста
браузера(геолокация, размер браузера и тд)вы можете на это повлиять. Вы
можете создать фикстуру для редактирования контекста браузера.
Необходимо добавить в ваш проект в файл conftest.py, который служит для
конфигурирования pytest. Фикстура browser_context_args возвращает словарь
со значениями и устанавливает эти значения в класс browser_context.
Рассмотрим пример использования фикстуры для изменения размера браузера
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
return {
"viewport": {
"width": 1920,
"height": 1080,
}
25.
Или установить cookies. Имена и параметры нужно передавать как массив словарейimport pytest
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
return {
**browser_context_args,
"storage_state": {
"cookies": [
{
"name": "stepik",
"value": "sd4fFfv!x_cfcstepik",
"url": "https://example.com" # Замените на нужный URL
},
]
},
}
26. Работа с CLI и pytest-playwright
27.
CLI - Интерфейс командной строки (англ. Command Line Interface, CLI). Передавая различные параметры в командной строке, выможете менять поведение в работе playwright.
Рассмотрим подробнее команды для управления playwright с помощью cli
--headed - playwright по умолчанию запускает браузеры в безголовом(headless) режиме. При использовании данного аргумента, запуск
теста произойдет в режиме headed.
--browser - запускать тесты в другом браузере chromium, firefox или webkit. Может быть указано несколько раз (по умолчанию:
chromium).
pytest --headed --browser webkit --browser firefox
--browser-channel - возможно вам потребуется запускать тесты в браузерах Chrome и Edge, установленных на вашем компьютере.
pytest --browser-channel=msedge --headed
--slowmo - используется для замедления выполнения теста на указанное количество миллисекунд.
pytest --slowmo 1000
--device - можно использовать для имитации поведения браузера для определенного устройства
В качества параметра передайте поддерживаемый девайс. Список поддерживаемых девайсов вы сможете посмотреть по ссылке
pytest --device="iPhone 13 Mini"
--output Каталог для артефактов, создаваемых тестами (по умолчанию: test-results)
--tracing Записывать ли трассировку для каждого теста. on, off или retain-on-failure (по умолчанию: off).
--video Записывать ли видео для каждого теста. on, off или retain-on-failure (по умолчанию: off).
--screenshot Должен ли автоматически делаться снимок экрана после каждого теста. on, off или only-on-failure (по умолчанию: off).
--full-page-screenshot - Следует ли делать скриншот всей страницы при ошибке. По умолчанию снимается только область просмотра.
Требуется, чтобы параметр --screenshot был включен (по умолчанию: off).
28.
Кроме CLI, на выполнение теста можно влиять с помощью декораторов pytest.Пропустить тест браузером
import pytest
@pytest.mark.skip_browser("firefox")
def test_visit_example(page):
page.goto("https://example.com")
# ...
Запуск в определенном браузере
@pytest.mark.only_browser("chromium")
def test_visit_example(page):
page.goto("https://example.com")
#…
29. Локаторы
30.
Playwright - это инструмент для автоматизации тестирования веб приложений. Большаячасть работы с ним это работа с веб элементами. Веб-элемент - представляет собой
DOM объекты, находящиеся на веб странице.
Чтобы извлечь информацию из любого элемента или кликнуть по веб-элементу, первым
шагом является поиск элемента.
Локаторы - предоставляют способы поиска веб-элементов на странице.
Выбор локаторов определяет отказоустойчивость выполнения тестов. Локаторы должны
быть максимально простыми. Старайтесь придерживаться текста, идентификаторов,
или селекторов CSS. Используйте более сложные селекторы только по мере
необходимости.
HTML и что такое веб-элементы.
Как обычный пользователь, мы не задумываемся о структуре веб-страницы. Мы просто
смотрим и нажимаем на то что нам нужно в веб-приложении. Однако фреймворки,
библиотеки для автоматизации тестирования не могут этого сделать. Коду нужны
указатели на нужные элементы которые мы называем локаторами или селекторами.
Чтобы получить доступ к любому веб-элементу в DOM (объектной модели документа),
вам нужно будет использовать локаторы. Возможно, одним из самых важных
навыков, когда речь заходит об автоматизации веб-приложений, является поиск
хороших надежных локаторов.
31.
НTMLНTML (HyperText Markup Language, «язык гипертекстовой разметки») - язык, который создаёт
каркас страницы. HTML - это стандартный язык разметки для создания веб-страниц.
HTML дает указание браузеру, в каком виде отображать данные. Также HTML практически всегда
содержит пути к другим HTML-документам, CSS и JavaScript. Чтобы разметить контент на
странице, его заключают в теги. Они указывают браузеру, как отобразить содержимое
элементов.
Веб-элемент - это отдельный объект, отображаемый на веб-странице/веб-приложении. Все что
пользователь видит на веб-странице , является веб-элементами.
Веб-элемент: HTML-элемент состоит из 3 частей.
Открывающий тег: он используется, чтобы сообщить браузеру, где начинается контент.
Закрывающий тег: он используется, чтобы сообщить браузеру, где заканчивается контент.
Контент: это фактический контент внутри открывающего и закрывающего тега.
32.
В HTML-элементе могут быть атрибуты тегов. Атрибуты HTML предоставляютдополнительную информацию об элементах, настраивают элементы или
корректируют их поведение различными способами в соответствии с критериями,
которые нужны пользователям.
HTML-атрибуты обычно представляют собой пары «имя-значение» и всегда находятся в
открывающем теге элемента.
Например тег <a> создает ссылки на другие страницы или другие части страницы.
Чтобы сообщить браузеру, куда ссылка отправляет пользователя, необходимо
использовать атрибут href в открывающем теге <a>
<a href="https://osinit.ru">Software development is our passion</a>
Атрибут HTML class используется для указания класса для элемента HTML. Обычной
практикой является, что несколько элементов HTML могут одновременно
использовать один и тот же класс. Атрибут class часто используется для указания на
имя класса в таблице стилей.
<div class="city">
33. DOM(Document Object Model)
34.
DOM(Document Object Model) - это объектная модель страницы. Фактически это и естьHTML-разметка: блоки, из которых состоит документ. DOM предоставляет
структурированное представление документа и определяет, как эта структура может
быть доступна из программ, которые могут изменять содержимое, стиль и структуру
документа. Представление DOM состоит из структурированной группы узлов и
объектов.
Когда веб-страница загружается, браузер создает документ или объект, соответствующий
странице.
Модель HTML DOM построена в виде дерева объектов:
35.
Как найти элементы?Google Chrome (и фактически все другие браузеры) предоставляет механизм с помощью
которого вы можете вручную найти элемент на вашей веб-странице.
1. Прежде всего, откройте веб-страницу, которую вы хотите проверить.
2. Теперь нажмите кнопку F12 на клавиатуре(или Command+option+I на Mac)
Либо просто щелкните правой кнопкой мыши в любом месте страницы и выберите Просмотреть код
3. Вы заметите, что внизу экрана открыто окно. Это окно содержит множество разделов,
одним из которых является Elements(Элементы) , как показано на изображении ниже.
36.
4. Кликните по иконке в виде стрелки в левом верхнем углу окна DevTools, а затемнавести курсор на интересующий веб-элемент. Вы увидите, что html-код этого
элемента отображаются в разделе «Elements»
Если вы посмотрите сведения об этом поле, вы заметите, что оно имеет некоторые
свойства, такие как тег,id, класс и т. д. Таким образом, вы можете использовать
средство выбора элементов, чтобы выбрать любой элемент на экране, а затем
просмотреть его детали.
37. Локаторы
38.
Локаторы пишут на двух языках:XPath
CSS-селекторы
CSS - это аббревиатура от «Cascading Style Sheets». Используется в HTML для создания
красивого макета и стилизации веб-элемента. Селектор CSS - это шаблон пути,
который может использовать теги и атрибуты веб-элемента для поиска его на вебстранице. Это часть языка CSS, которая сообщает к каким элементам применить тот
или иной стиль.
Общий синтаксис селектора CSS выглядит так
tagname[attribute='attribute value']
XPath - это язык запросов для XML/HTML - документов. XPath находит любой элемент
на веб-странице с помощью DOM. Поэтому его синтаксис также состоит из
атрибутов и тегов DOM.
Общий синтаксис селектора XPath выглядит так
//tag_name[@attribute_name ='Value of attribute']
39.
40.
Для того чтобы использовать селекторы CSS и XPath в Рlaywright, реализован метод page.locator(selector, **kwargs)Для того чтобы явно указать передаваемый тип локатора, вам необходимо указать
префикс
css= - если вы используете css селектор,
xpath= - в случае если вы передали xpath селектор.
Но даже если вы не будете указывать префикс, Рlaywright автоматически определит тип
локатора. Селектор, начинающийся с // или ..будет восприниматься как селектором
xpath.
CSS
page.locator("css=button").click()
XPath
page.locator("xpath=//button").click()
41.
Селекторы по идентификатору(ID)Давайте начнем с того, с чем большинство специалистов по автоматизированному тестированию согласны.
Локатор на основе ID - лучший вариант для 100% случаев тестирования пользовательского интерфейса.
ID - это уникальные атрибуты, присваиваемые HTML элементам. ID считаются самым безопасным и
быстрым вариантом поиска.
Этот селектор выбирает элементы, основываясь на значении их атрибута id . Чтобы выбрать элемент с
определённым id с помощью css, добавьте символ # перед его названием.
CSS
Синтаксис: #имяИдентификатора
Пример: селектор #new-todo выберет элемент с идентификатором new-todo (который был определён в
атрибуте id="new-todo").
page.locator("#new-todo").click()
XPath
Синтаксис: [@id='имяИдентификатора']
Пример: селектор [@id='new-todo'] выберет элемент с идентификатором new-todo (который был определён
в атрибуте id="new-todo").
page.locator("//*[@id='new-todo']").click()
42.
Селекторы по классу(CLASS)Этот селектор выбирает элементы, основываясь на значении их атрибута class
Элементы могут иметь атрибут class, который содержит разделенный пробелами список определенных "классов", которые
применяются к данному элементу. Чаще всего это используется для стилизации элементов в таблице стилей. Чтобы
выбрать элемент с определённым классом с помощью css, добавь “ . “ перед его названием.
Синтаксис: .имя-класа
Пример: селектор .new-todo выберет все элементы с соответствующим классом (который был определён в атрибуте
class="new-todo")
CSS
page.locator(".new-todo").click()
XPath
Как и в случае с идентификаторами, классы - это просто другой тип атрибутов, поэтому синтаксис .class-nameпо сути
является сокращением: [class="class-name"]
Синтаксис: [@class = 'имя-класса']
Пример: селектор //*[@class='new-todo'] выберет все элементы с соответствующим классом (который был определён в
атрибуте class="new-todo")
page.locator("//*[@class='new-todo']").click()
Вы также можете использовать несколько классов для поиска элемента, объединив их следующим образом:
page.locator("css=.first-class.another-class").click()
page.locator("xpath=//div[contains(@class, 'first-class') and contains(@class, 'another-class')]").click()
43.
Селекторы по атрибутуЭтот селектор выбирает все элементы, имеющие данный атрибут или атрибут с
определённым значением. Атрибуты могут быть представлены в виде пар ключзначение, например, в приведенном ниже примере у нас есть несколько атрибутов и
значений, таких как 'role = dialog', 'data-dismiss = modal' и т.д.
CSS
Синтаксис: [attr] [attr=value]
Пример: селектор [placeholder] выберет все элементы, у которых есть атрибут placeholder
(независимо от его значения).
page.locator("[placeholder='Your email address']").click()
XPath
page.locator("//*[@placeholder='Your email address']").click()
44.
Комбинация селекторовКомбинация селекторов тега, класса или ID и атрибута может оказаться лучшей
стратегией, чем использование только одного из данных типов селектора. Для
достижения уникальности элемента это может стать лучшим решением.
Используя имя тега, за которым следует пара квадратных скобок с именем атрибута
внутри них:
button[type]
При этом будут выбраны все кнопки с атрибутом type, независимо от того, какое
значение имеет этот атрибут. Чтобы нацелить элементы с атрибутами, которые
содержат конкретные значения, мы можем переписать наш селектор следующим
образом:
button[type="submit"]
CSS
page.locator("input[placeholder='Your email address']").click()
XPath
page.locator("//input[@placeholder='Your email address']").click()
45.
Playwright поставляется со встроенными механизмами ожидания при взаимодействии состраницами .
Прежде чем предпринимать какие-либо действия, Playwright выполняет широкий спектр
проверок. Он автоматически ждет, пока пройдут все соответствующие проверки, и
переходит к следующему шагу. Это происходит в течение заданного тайм-аута и
завершается неудачей, если произошла ошибка проверки.
Проверка элемента включает:
• Attached - элемент присоединен к DOM. Элемент считается прикрепленным, если он
подключен к DOM или ShadowRoot.
• Editable - элемент редактируемый. Элемент считается редактируемым, если он включен и
у него не установлено свойство "read only".
• Enabled - элемент включен. Считается включенным, если у тегов button, select, input,
textare не имеют свойства disabled.
• Receive Events - получает события, не заслоняемые другими элементами.
• Stable - элемент стабилен. Элемент считается стабильным, если он сохраняет ту же
область после двух или более последовательных кадров анимации.
• Visible - элемент является видимым
Явное ожидание элемента
Если выполнение теста требует появление определенного элемента на странице, то вы можете
указать playwright явно дождаться элемента с помощью page.wait_for_selector()
46.
47.
Assertions (Проверки)Автоматизация тестирования помогает облегчить жизнь тестировщикам , позволяя им
автоматизировать свои повторяющиеся задачи.
Однако что хорошего в автоматическом тестировании, если вы не знаете пройден тест
или нет?
Когда вы пишете тесты, вам, как правило, необходимо проверять, что значения
соответствуют определенным условиям.
Здесь в игру вступает такое понятие как утверждение(Assertion). В автотестах
утверждение - это шаг тестового сценария, который определяет - был ли тест-кейс
успешным или нет.
Web-first assertions - список проверок и система повтора действий вплоть до получения
желаемого результата.
Проверки автоматически будут ждать и повторять проверку до тех пор, пока не будет
выполнено ожидаемое условие.
Playwright предлагает большой список проверок. За основу проверок в Playwright взята
JS библиотека Expect.
48.
49.
Давайте рассмотрим синтаксис записи проверки. Сама запись проверки делится на три части:expect() - вспомогательная функция реализующая процесс опроса страницы.Данная функция
ожидает(expect), пока что-то станет истинным в течение определенного периода времени.
В качестве аргумента функции expect() передается проверяемый веб-элемент,страница или
ответ от сервера.
Условие проверки.
В свою очередь условие проверки может иметь два варианта записи:
Вариант 1
expect(locator).not_to_be_checked()
Использовать проверку без передачи в нее аргументов.
Вариант 2
expect(locator).not_to_contain_text(expected, **kwargs)
expect(locator).not_to_have_attribute(name, value, **kwargs)
Если указаны ожидаемые значения expected, name, value и т.д, то необходимо их передать для
проверки. Данные атрибуты определяют какие выражения, значения атрибутов мы будет
сравнивать с фактическим результатом.
50.
Пользовательское сообщение об ошибкеВы можете указать свое сообщение об ошибке в качестве второго аргумента функции
expect, например:
expect(page.get_by_text("Name"), "Сообщение не отображается на
странице").to_contain_text("Open Solutions")
В стек-трейсе ошибка будет выглядеть следующим образом:
def test_foobar(page: Page) -> None:
>
expect(page.get_by_text("Name"), "Сообщение не отображается на
странице").to_be_visible()
E
AssertionError: Сообщение не отображается на странице
E
Actual value: None
E
Call log:
E
LocatorAssertions.to_be_visible with timeout 5000ms
E
waiting for get_by_text("Name")
programming