Триггеры
Исходный код на языке python находящийся в тестовых файлах будет выполнен при загрузки теста, после чего будут запущены сами тесты. Но часто возникает потребность выполнить тот иди иной код во время выполнения тест, для этих целей был создан механизм триггеров.
Триггер представляет собой производный класс от класса BaseTrigger в котором можно переопределить методы вызываемые в определённые моменты прохождения теста:
| Метод | Аргументы | Описание |
|---|---|---|
| setup | Срабатывает перед запуском свей конфигурации тестов | |
| setup_test | browser, test_id, test_scope, test_args | Срабатывает перед запуском теста |
| teardown_test | browser, test_id, test_scope, test_args | Срабатывает после окончания работы теста |
| setup_step | browser, step_id, test_scope, step_args | Срабатывает перед переходом на новый шаг теста |
| teardown_step | browser, step_id, test_scope, step_args | Срабатывает после окончания работы шага теста |
| setup_script | browser, script_id, test_scope, script_args | Срабатывает перед выполнением объекта SCRIPT |
| teardown_script | browser, script_id, test_scope, script_args | Срабатывает после выполнения объекта SCRIPT |
| setup_command | browser, command, test_scope | Срабатывает перед выполнением комманды |
| teardown_command | browser, command, test_scope | Срабатывает после выполнением комманды |
| close | Срабатывает после окончания работы набора тестов |
В момент вызова методам могут быть переданы следующие аргументы:
| Aргумент | Тип | Описание |
|---|---|---|
| browser | Browser | Специальный объект реализующий высокоуровневую обёртку над WebDriver |
| test_id | str | Идентификатор текущего теста |
| step_id | str | Идентификатор текущего шага |
| script_id | [str] | Список идентификаторов последовательно запускаемых сценариев |
| test_scope | SCOPE | Ссылка на пространство имён теста |
| test_args | dict | Словарь аргументов теста |
| step_args | dict | Словарь аргументов шага |
| script_args | dict | Словарь аргументов передаваемых сценарию |
Для того что бы задействовать триггер нужно передать строку с названием класса триггера в переменную среды TRIGGER. Для каждого теста возможно определить свой уникальный триггер передав его идентификатор в аргумент теста trigger.
Пример:
from dsl import *
from trigger import BaseTrigger
class AuthTrigger(BaseTrigger):
"""
Авторизация на сайте при помощи cookies
"""
def __init__(self):
self._cookies = {
"name": "user", "value": "234d36e1de92e831d66bd788e1974bc0"
}
def setup_test(self, browser, test_id, test_scope, test_args):
"""
Перед выполнением теста переходим на страницу BASE_URL, очищаем cookies и
устанавливаем cookies определённые в конструкторе
"""
browser.get_url(CONFIG.BASE_URL)
browser.del_cookies()
browser.set_cookies(self._cookies)
# "подключаем" триггер
CONFIG.TRIGGER = AuthTriggerМетоды работающие во время выполнения теста т.е. setup_step, teardown_step, setup_script, teardown_script, setup_command и teardown_command могут возвращать отдельные команды или блоки команд которые будут выполнены сразу после завершения работы метода. Таким образом из триггера можно влиять на ход выполнения теста.
Пример:
# Если URL страницы после выполнения команды поменялся, то проверяем элемент с id RightSide_Advertisement, если он есть, то скрываем его.
class QaDemoTrigger(BaseTrigger):
def setup_test(self, browser, test_id, test_scope, test_args):
"""
в начале теста запоминаем начальный URL
"""
self._start_url = browser.url
def setup_command(self, browser, command, test_scope):
"""
сохраняем текущий URL, если он равен начальному, то присваиваем пустую строку
"""
self._url = browser.url
if self._url == self._start_url:
self._url = ""
def teardown_command(self, browser, command, test_scope):
"""
Если URL после выполнения команды поменялся, то проверяем и скрываем #RightSide_Advertisement
"""
if not self._url == browser.url:
return (
# если #RightSide_Advertisement виден, то скрываем его
DATA_ATTR("#RightSide_Advertisement", "style", "display:none", execute=~(NOT("#RightSide_Advertisement", no_displayed=True)))
# ждём исчезновения элемента #RightSide_Advertisement
, NOT("#RightSide_Advertisement", no_displayed=True)
)
CONFIG.TRIGGER = QaDemoTriggerДля версии 1.1 редакция от 22.11.2025
Telegramm группа
Политика конфиденциальности
Персональные данные