Триггеры
Исходный код на языке python находящийся в тестовых файлах выполняется при загрузки тестовой конфигурации, после чего происходит запуск самих тестов. Но часто возникает потребность выполнять код на языке 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 редакция от 16.03.2026
Telegramm группа
Политика конфиденциальности
Персональные данные