Триггеры

Исходный код на языке 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