-
[ По сути то, что мы сделали в прошлых главах - в какой-то мере является отображением логики Page Object, а именно: ] ... [ Паттерн Page Object подразумевает использование классов, поэтому для реализации потребуются более глубокие познания в Python и ООП. ] ... [ Но ключевое - это то, что хранение локаторов осуществляется на уровне страниц. Другими словами, для каждой тестируемой страницы создаётся свой объект, который описывает, какие элементы имеются на этой странице. ] ... [ Ниже создаём класс, который будет отвечать за работу с браузером, а также создадим ещё один скрипт, через который будет запускать само тестирование: ] ...
Дата публикацииПросмотры231Лайки0 -
[ Напишем простой тест главной страницы сайта g-oak.ru. О том, как искать подходящие локаторы и какие проверки использовать, подробнее описано в следующих статьях. ] ...
Дата публикацииПросмотры193Лайки0 -
[ В данном случае мы воспользовались sync_api, так как нет никаких причин использовать для этого примера асинхронные вызовы. ] ... [ - channel - выбираем chrome или chromium (смотря, что установили ранее, если установлено что-то одно, параметр можно игнорировать) ] ... [ Но ничто не мешает нам вызвать тот же тест асинхронно. Это может быть полезно, например, для ускорения выполнения тестов, когда у нас есть несколько сценариев и они могут выполняться параллельно, а точнее - независимо друг от друга. ] ...
Дата публикацииПросмотры222Лайки0 -
[ После того как бразуер настроен, первым делом мы грузим какой-либо веб-адрес. Для этого используется метод goto: ] ... [ Также мы можем проверить title и если он нас не устраивает, то выбросить ошибку или завершить выполнение программы: ] ... [ При тестирвоании страницы возможна ситуация, что элемент не находится, хотя мы видим, что он там есть. Это может произойти по разным причинам, но один из не самых очевидных случаев - это использование фреймов. ] ... [ Если у фрейма есть какое-либо атрибуты, за которое можно зацепиться, то делается это через метод frame_locator(): ] ... [ Разбираться, как "победить" каждый из них придётся самостоятельно. Фреймворк Playwright предоставляет документацию по обработке таких событий как синхронным, так и асинхронным образом: ] ...
Дата публикацииПросмотры302Лайки0 -
[ При работе над отдельными py-проектами может получиться так, что для запуска одного проекта требуется одна версия какого-либо модуля, а для запуска второго проекта - другая. ] ... [ Именно поэтому зависимости проекта лучше ставить не в систему, засоряя её, а в отдельное виртуальное окружение Python-а, которое будет использоваться для запуска конкретного проекта. ] ... [ Когда работа над проектом завершена, просто удаляем папку с виртуальным окружением, тем самым освобождая место в системе. ] ... [ Для этого, конечно же, требуется вести проект корректно, дополняя файл requirenments.txt всеми модулями, которые подключаются в проект во время разработки. ] ...
Дата публикацииПросмотры180Лайки0 -
[ В корне проекта мы создадим файл (напр., main_test.py), который будет описывать, какие тесты запускать. Ненужные можно комментировать, новые добавлять. ] ... [ Создадим тест test_case_1.py в папке tests/, внутри которого будет с определёнными настройками запускаться бразуер под этот тест. ] ... [ Создадим файл browser_launcher.py, который будет отвечать за создание экземпляра браузера, будет принимать на вход разные параметры, чтобы была возможность запускать разные браузеры и с разными настройками. Это требуется, чтобы, например, проводить тест из-под разных браузеров или с разным размер экрана. ] ... [ Дальше мы создадим файл MainPage.py, который также будет использоваться напрямую в тесте. Этот класс будет наследоваться от BasePage.py. Такой подход требуется, чтобы не описывать все действия на каждой странице, как например: ] ...
Дата публикацииПросмотры197Лайки0 -
[ Говоря о "правильной" структуре, уже давно были придуманы шаблоны (паттерны) написания тестов, учитывающие определённые грабли, напр.: ] ...
Дата публикацииПросмотры182Лайки0 -
[ Да, в случае необходимости повторного обращения нами использовался трюк в виде записи локатора в переменную, но всё равно не так удобно читать код построчно, пытаясь понять, что это за элемент и за что он отвечает. ] ... [ - если на какой-то html-странице по каким-либо причинам изменится локатор, нам придётся искать его повсюда в коде и тоже повсеместно менять. ] ... [ Именно поэтому при рефакторинге мы обратим внимание также и на локаторы, переместив их "в отдельное место". ] ...
Дата публикацииПросмотры210Лайки0 -
[ Данный язык помогает перемещаться по DOM-структуре XML-файла (используется для навигации и поиска внутри xml), а также возвращает элементы (узлы XML-документа), соответствующие запросам. ] ... [ Абсолютный xpath начинается с одного слэша ( / ) и указывает на _полный путь_ из _корневого узла_ (root) к _целевому_ (target). Например, следующее выражение в XPath: ] ... [ Если же мы хотим выйти на какие-либо дочерние элементы с помощью абсолютного пути, то требуется всегда следовать полной структуре файла от самого начала: ] ... [ Для применения относительного пути используется двойной слэш ( // ). При таком подходе указанный в запросе путь: ] ...
Дата публикацииПросмотры256Лайки0 -
[ - если нам неважно, какой именно элемент находится в цепочке, но требуется указать, что перед искомым должно быть определённое количество любых других элементов, то используется знак : ] ...
Дата публикацииПросмотры112Лайки0