Команды встроенного языка

Команды взаимодействия с веб-страницей

URL | URL(url [, auth_method, login, passwd ] [, timeout ])

Переход на страницу, возвращает время загрузки страницы. Если адрес страницы не указан, то переход осуществляется на базовый URL (см. CONFIG.BASE_URL) Если значение аргумента auth_method отлично от “OFF”, то произойдёт попытка аутентификации указанным методом с логиным login и паролем passwd.

В настоящее время может принимать следующие значения:

Метод Описание
OFF Аутентификация не используется
BASE Базовая аутентификация
DIGEST Digest аутентификация

Аргументы:

  • url - Адрес страницы. Если не указан, то используется CONFIG.BASE_URL
  • auth_method - метод для HTTP аутентификации По умолчанию - “OFF”
  • login - наименование пользователя для HTTP аутентификации По умолчанию - ““
  • passwd - пароль для HTTP аутентификации По умолчанию - ““
  • timeout - тайм-аут загрузки страницы По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

Примеры:

# Переход страницу https://ya.ru
URL("https://ya.ru")

# Переход страницу https://ya.ru, время перехода на страницу на должно превышать 60 сек.
URL("https://ya.ru") < 60

URL # Переход на базовый URL

# Переход на страницу http://the-internet.herokuapp.com/digest_auth с Digest - аутентификацией

URL("http://the-internet.herokuapp.com/digest_auth", auth_method="DIGEST", login="admin", passwd="admin")

DATA(селектор, данные [, multi_selector ] [, clear ] [, delay ] [, press ] [, no_click ] [, offset_x ] [, offset_y ] [, secret ] [, validate ] [, execute] [, timeout ])

Вводит данные в веб-элемент формы. Если данными является текст длина которого не превышает 100 символов, то он вводится посредством метода send_keys который эмитирует нажатие клавиш пользователем. Если его длина 100 и более символов, то для ускорения ввода используется javascript. Если установлено время задержки ввода символов, то текст в любом случае вводится посимвольно. Перед вводом текста на поле будет нажата ЛКМ, если поле заполнено данными, то они будут очищены.

При вводе в поле с тегом select в качестве данных можно передать целочисленный индекс выбираемого веб-элемента, значение value соответствующего веб-элемента с типом option или его текстовое значение. Если для веб-элемента select установлен атрибут multiple, то в качестве данных нужно передавать список индексов или значений.

Если у поля тип checkbox или radio то в качестве данных нужно передать значение типа bool которое и определит нажат ли веб-элемент. Для заполнения полей с типом file будет неявно вызвана команда UPLOAD. Для элемента с типом range нужно использовать числовые значения.

Данные для полей с типами color, date, datetime-local, month, time и week должны быть в следующих форматах:

Тип поля Формат Пример
date YYYY-MM-DD “2026-08-17”
time hh:mm “23:46”
datetime-local YYYY-MM-DDThh:mm “2026-08-17T23:46”
month YYYY-MM “2003-02”
week YYYY-Www “2026-W33”
color #RRGGBB “#ffffff”

Аргументы:

  • селектор - Селектор веб-элемента формы. Если нужно заполнить несколько веб-элементов одними и теми же данными, то можно передать список селекторов.
  • данные - Данные для заполнения веб-элемента формы
  • multi_selector - Если равен True, то селектор может указывать на несколько веб-элементов. В этом случае все веб-элементы на которые указывает селектор будут заполнены одними и теми же данными. По умолчанию - False
  • clear - Если равен True, то перед заполнением поле формы будет очищено, иначе данные будут добавлены в конец существующей строки. По умолчанию - True
  • delay - Задержка ввода каждого символа в секундах. По умолчанию - 0.0
  • press - Идентификатор клавиши которая будет нажата после завершения ввода данных (см. команду KEY)
  • no_click - Отключает клик по веб-элементу перед вводом данных
  • offset_x - Смещение точки клика по оси X относительно центра веб-элемента.
  • offset_y - Смещение точки клика по оси Y относительно центра веб-элемента.
  • secret - Если равен True, то вместо данных в отчётах будет указана строка "*****". Этот параметр можно использовать при вводе чувствительных данных. По умолчанию - False
  • validate - Если равен True, то команда будет проверять изменения значение атрибута “value” у веб-элемента (не работает для веб-элемента input с типом file). По умолчанию - True
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# Заполняем поле #userName
DATA("#userName", "Вася")

# Заполняем поля #userName и #lastname
DATA(["#userName", "#lastname"], "Вася")

# выбираем веб-элемент со значением "lowestprice" в выпадающем списке
DATA(".sort > select", "lowestprice")

# тоже самое, но только по индексу
DATA(".sort > select", 1)

# выбор веб-элементов с индексами 0 и 2
DATA("#cars", [0, 2])

KEY(селектор, клавиша [, multi_selector ] [, execute] [, timeout ])

Эмулирует нажатие клавиши на веб-элементе. Команда предназначена только для эмуляции нажатия одной или комбинации нескольких клавиш, для ввода текста используйте команду DATA.

Аргументы:

  • селектор - Селектор веб-элемента.
  • клавиша - Строковый идентификатор (или список идентификаторов) нажимаемых клавиш.
  • multi_selector - Если равен True, то селектор может указывать на несколько веб-элементов. По умолчанию - False
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

В качестве идентификаторов специальных клавиш нужно использовать строки со следующими значениями:

"F1" "F2" "F3" "F4" "F5" "F6" "F7"
"F8" "F9" "F10" "F11" "F12" "META" "COMMAND"
"NULL" "CANCEL" "HELP" "BACK_SPACE" "TAB" "CLEAR" "RETURN"
"ENTER" "SHIFT" "CONTROL" "ALT" "PAUSE" "ESCAPE" "SPACE"
"PAGE_UP" "PAGE_DOWN" "END" "HOME" "LEFT" "DIVIDE" "UP"
"RIGHT" "DOWN" "INSERT" "DELETE" "SEMICOLON" "EQUALS" "NUMPAD0"
"NUMPAD1" "NUMPAD2" "NUMPAD3" "NUMPAD4" "NUMPAD5" "NUMPAD6" "NUMPAD7"
"NUMPAD8" "NUMPAD9" "MULTIPLY" "ADD" "SEPARATOR" "SUBTRACT" "DECIMAL"
"RIGHT_SHIFT" "RIGHT_CONTROL" "RIGHT_ALT" "RIGHT_META" "ZENKAKU_HANKAKU"

Для удобства ввода в IDE идентификаторы специальных клавиш были добавлены в пространство имён команды KEY

Если нужно эмулировать нажатие комбинации нескольких клавиш, то нужно использовать список строк с идентификаторами клавиш. Например значение ["CONTROL", "A"] соответствует сочетанию клавиш Ctrl + A.

Примеры:

# Поиск текста
, DATA("#search", "текст")
, KEY("#search", KEY.ENTER)

# выделение всего текста
, KEY("#search", [KEY.CONTROL, "A"])

# 10 раз нажимаем клавишу RIGHT
, KEY("input", [KEY.RIGHT]*10)

CLEAR(селектор {, селектор } [, multi_selector ] [, js ] [, execute] [, timeout ])

Очистка веб-элемента. Эта команда очищает текстовые веб-элементы и снимает выделение с веб-элементов input (с типом checkbox) и select.

Аргументы:

  • селектор - Селектор веб-элемента. Если нужно очистить несколько веб-элементов, то можно указать несколько селекторов.
  • multi_selector - Если равен True, то селектор может указывать на несколько веб-элементов. По умолчанию - False
  • js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:

# Очистка веб-элемента поиска
, CLEAR("#search")
...

CLICK(селектор {, селектор } [, offset_x ] [, offset_y ] [, multi_selector ] [, js ] [, move_control ] [, hold ] [, key ] [, execute ] [, timeout ])

Эмулирует нажатие левой кнопки мыши на веб-элементе. Если поле нажатие открывается новое окно или вкладка браузера, то автоматически переходим на неё.

Аргументы:

  • селектор - Селектор веб-элемента. Если нужно эмулировать последовательность нажатий на нескольких веб-элементах, то можно указать несколько селекторов.
  • offset_x - Смещение точки клика по оси X относительно центра веб-элемента. По умолчанию - 0.0
  • offset_y - Смещение точки клика по оси Y относительно центра веб-элемента. По умолчанию - 0.0
  • multi_selector - Если равен True, то селектор может указывать на несколько веб-элементов. По умолчанию - False
  • js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
  • move_control - Есл и равен True, то команда будет ждать завершения перемещения веб-элемента. По умолчанию - True
  • hold - Время удержания ЛКМ в нажатом состоянии (не работает в месте с js). По умолчанию - 0.0
  • key - Идентификатор клавиши (см. команду KEY) которая будет нажата во время клика (не работает в месте с js) По умолчанию - ““
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

...
# Переход на вкладку My Info
, CLICK("link::My Info")
...
# смещаем клик на конец веб-элемента - 16px
, CLICK("#Rating_5_label", offset_x=WIDTH("#Rating_5_label")/2-16)
...
# вычисляем 1% от длины слайдера
, ARG("1%", WIDTH(".range-slider__wrap") / 100)
# клик в начало слайдера
, CLICK(".range-slider__wrap", offset_x=(-50 * ARG("1%")))
...
# кликаем только в том случае если флаг у checkbox-а Sports не установлен
, CLICK("Sports", execute=ONE("#hobbies-checkbox-1")==False)
...
# выбираем 2 веб-элемента при помощи клика с зажатой клавишей CONTROL
, CLICK("[value=saab]", "[value=audi]", key=KEY.CONTROL)

CLICK_DOUBLE(селектор {, селектор } [, move_control ] [, execute ] [, timeout ])

Эмулирует двойное нажатие левой кнопки мыши на веб-элементе.

Аргументы:

  • селектор - Селектор веб-элемента. Если нужно эмулировать последовательность нажатий на нескольких веб-элементах, то можно указать несколько селекторов.
  • move_control - Есл и равен True, то команда будет ждать завершения перемещения веб-элемента. По умолчанию - True
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:

CLICK_DOUBLE("link::My Info")

CLICK_RIGHT(селектор [, js ] [, move_control ] [, execute ] [, timeout ])

Эмулирует нажатие правой кнопки мыши на веб-элементе. Может использоваться для вызова контекстного меню.

Аргументы:

  • Селектор - Селектор веб-элемента.
  • js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
  • move_control - Есл и равен True, то команда будет ждать завершения перемещения веб-элемента. По умолчанию - True
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:


TEST["Buttons"](
    URL("https://demoqa.com/buttons")
    
    , "You have done a dynamic click"
    , CLICK("Click Me")
    , ONE("#dynamicClickMessage") == "You have done a dynamic click"
    
    , "You have done a right click"
    , CLICK_RIGHT("#rightClickBtn")
    , ONE("#rightClickMessage") == "You have done a right click"
    
    , "You have done a double click"
    , CLICK_DOUBLE("#doubleClickBtn")
    , ONE("#doubleClickMessage") == "You have done a double click"
    
    , tags = "button"
)

HOVER(селектор {, селектор } [, click [, offset_x] [, offset_y ] ] [, execute ] [, timeout ])

Эмитирует перемещение курсора мыши на веб-элемент или последовательно перемещает его по цепочки веб-элементов.

Аргументы:

  • селектор - Селектор веб-элемента.
  • click - Если равен True, то после после наведения курсора мыши на последний веб-элемент будет нажата ЛКМ. По умолчанию - False
  • offset_x - Смещение точки клика по оси X относительно центра веб-элемента. По умолчанию - 0.0
  • offset_y - Смещение точки клика по оси Y относительно центра веб-элемента. По умолчанию - 0.0
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# Перемещение курсора на веб-элемент с id ui-id-5
, HOVER("#ui-id-5")

# Перемещение курсора по цепочке веб-элементов
TEST["JQueryUI - Menu"](
    URL("http://the-internet.herokuapp.com/jqueryui/menu")
    , DATA_ATTR("#page-footer", "style", "display:none")
    
    , "Скачиваем файл"
    , HOVER("Enabled", "Downloads", "PDF", click=True)
    , CHECK_DOWNLOAD("menu.pdf")
)

DND(селектор_1, селектор_2 [, js ] [, control ] [, execute ] [, timeout ]) | DND(селектор_1, offset_x [, offset_y ] [, control ] [, execute ] [, timeout ])

Эмитирует перетаскивание веб веб-элемента мышью. Веб-элемент можно переместить на место другого веб-элемента или на указанные координаты (относительно центра веб-элемента).

Аргументы:

  • селектор_1 - Селектор перемещаемого веб-элемента.
  • селектор_2 - Селектор веб-элемента на который перемещают веб-элемент с селектором 1
  • js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
  • offset_x - Смещение центра веб-элемента по оси X. По умолчанию - 0.0
  • offset_y - Смещение центра веб-элемента по оси Y. По умолчанию - 0.0
  • control - Проверять перемещение веб-элемента. По умолчанию - True
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

TEST["Перемещение на веб-элемент"](
    URL("https://www.qa-practice.com/elements/dragndrop/boxes")
    , DND("#rect-draggable", "#rect-droppable")
    , ONE("#text-droppable") == "Dropped!"
)

TEST["Перемещение по координатам"](
    URL("https://www.qa-practice.com/elements/dragndrop/boxes")
    , DND("#rect-draggable", 0, -200)
    , ONE("#text-droppable") == "Dropped!"
)

TEST["Перетаскивание окон в зоны"](
    URL("/draggable")
    # Перемещаем элемент .select-none в облость scope::dnd/1 и корректируем его смещение
    DND(".select-none", "scope::dnd/1"
        , offset_x=-WIDTH("scope::dnd/1")/2
        , offset_y=-HEIGHT("scope::dnd/1")/2
))

NOT(селектор {, селектор } [, attr ] [, displayed ] [, timeout ])

Вызывает ошибку если веб-элемент на который указывает селектор присутствует на странице. Если флаг displayed выставлен в False, то команда проверяет именно отсутствие веб-элемента в DOM, а не только его видимость.

Если указан не только селектор, но ещё и атрибут, то команда проверяет исчезновение указанного атрибута у веб-элемента.

Аргументы:

  • селектор - Селектор проверяемого веб-элемента.
  • attr - Наименование проверяемого атрибута.
  • displayed - Флаг указывает на то что нужно проверять только видимость веб-элемента, а не нахождение его в DOM. По умолчанию - True
  • timeout - Максимальное время ожидания исчезновения веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# Вызовет ошибку если веб-элемент с селектором "#hidden_bar" присутствует в DOM
NOT("#hidden_bar")

# Вызовет ошибку если атрибут "disabled" не исчезнет в течении 5 секунд.
NOT("#enableAfter", "disabled", timeout=5)

# Вызовет ошибку если веб-элемент виден на странице
NOT(["#input-example", "#loading"], displayed=True)

Эта команда не является квантором, но может использоваться в выражениях в качестве предиката:

Пример:

# Если флаг у веб-элемента с id checkbox снят, то веб-элемент с id enableAfter должен отсутствовать в DOM
ONE("#checkbox") == False & NOT("#enableAfter")

COUNT(селектор | выражение [, displayed ] [, timeout ])

Подсчёт количества веб-элементов соответствующих селектору. Если веб-элементы на страницы отсутствуют, то будет возвращена ошибка. Для проверки отсутствия веб-элементов нужно использовать команду NOT(“селектор”), в место выражения COUNT(“селектор”) == 0.

Команда так же может быть использована для подсчёта количества значений содержащихся в выражениях с кванторами ALL или ANY.

Аргументы:

  • селектор - Селектор веб-элементов или выражение.
  • displayed - Если установлен в True, то ждём отображения веб-элементов. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:

# проверка количество строк в таблице.
COUNT("//tr") == 100

JS(скрипт [, args {, args } ] [, sync ] [, execute ] [, timeout ])

Выполнить js-скрипт асинхронно (sync = False) или синхронно (sync = True). Возвращает результат работы скрипта. Скриптту можно передать любое количество аргументов, они будут доступны внутри скрипта в массиве arguments.

Аргументы:

  • скрипт - Текст js скрипта.
  • args - Аргументы передаваемые скрипту (внутри скрипта они доступны через массив arguments)
  • sync - Синхронное (True) или асинхронное (False) выполнение скрипта. По умолчанию - True
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Именованный аргумент, устанавливает тайм-аут выполнения скриптов. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# прокрутка содержимого окна до определённой позиции
, JS("window.scrollBy(arguments[0], arguments[1])", 0, 1000, timeout=3)
...
# прокрутка содержимого окна до определённой позиции
, JS("return arguments[0].scrollHeight", EP("body"))

SCROLL(селектор [, execute ] [, timeout ]) | SCROLL(offset_y [, execute ] [, timeout ]) | SCROLL(offset_x, offset_y [, execute ] [, timeout ]) | SCROLL(селектор, offset_x, offset_y [, execute ] [, timeout ])

Прокрутка. Если задан только селектор или только координаты, то прокручивается страница. Если же задан селектор и координаты, то прокручивается содержимое внутри веб-элемента на который указывает селектор.

Аргументы:

  • селектор - Селектор веб-элемента до середины которого нужно прокрутить.
  • offset_x - Количество пикселей для смещения горизонтальной прокрутки. По умолчанию - 0
  • offset_y - Количество пикселей для смещения вертикальной прокрутки. По умолчанию - 0
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# Помещает центр веб-элемента imput.name в центр видимой области страницы
, SCROLL("imput.name")
...
# Перемещает страницу на 100 пикселей вниз
, SCROLL(100)
...
# Помещает веб-элемент imput.name в верх видимой области страницы
, SCROLL("imput.name", WIDTH/2-WIDTH("imput.name")/2))
...
# Прокрутка содержимого веб-элемента
TEST["scrollbars"](
    URL("http://uitestingplayground.com/scrollbars")
    , SCROLL(".container > div", 200, 100)
    ...
)

FRAME | FRAME(селектор {, селектор } [, reset ] [, timeout ])

Команда переключает текущий контекст вебдрайвера на фрейм указанный в селекторе. Если используется несколько вложенных фреймов то необходимо передать их селекторы в соответствующем порядке. Если селектор не указан, то контекст переключается на основную страницу.

Команда полезна если необходимо активно работать с несколькими веб-элементами внутри фрейма. Получить доступ к отдельному веб-элементу в фрейме удобнее при помощи селектора FP.

Аргументы:

  • селектор - Последовательность селекторов идентифицирующих каждый фрейм.
  • reset - Флаг указывающий на то что с начала нужно переключится на основную страницу. По умолчанию - False
  • timeout - Максимальное время ожидания фрейма. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:

TEST["Nested Frames"](
    URL("https://demoqa.com/nestedframes")
    
    , "Проверка надписи в первом фрейме"
    , FRAME("#frame1")
    , ONE("body") == "Parent frame"
    
    , "Проверка надписи во втором фрейме"
    , FRAME("iframe")
    , ONE("body") == "Child Iframe"
    
    , "Пример с использованием сразу двух селекторов"
    , FRAME("#frame1", "iframe", reset=True)
    , ONE("body") == "Child Iframe"
)

FRAME[селектор {, селектор }](команда {, команда } [, timeout ])

Более удобный вариант использования команды FRAME который позволяет задать контекст в виде фрейма для вложенного блока команд. При использовании этой команды могут быть конфликты с командами FP и FRAME если они находятся внутри блока с контекстом.

Аргументы:

  • селектор - Последовательность селекторов идентифицирующих каждый фрейм.
  • timeout - Максимальное время ожидания фрейма. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:

TEST["Nested Frames"](
    URL("http://the-internet.herokuapp.com/nested_frames")

    , FRAME["name::frame-top"](
        "Проверяем тескт в фрейме LEFT"
        , FRAME["name::frame-left"](
            ONE("body") == "LEFT"
    ))
    
    , "Проверяем тескт в фрейме RIGHT"
    , FRAME["name::frame-top", "name::frame-right"](
        ONE("body") == "LEFT"
    )
)

ATTR_DATA(селектор, атрибут, значение [, multi_selector ] [, execute ] [, validate ] [, timeout ])

Изменяет значение атрибута у веб-элемента.

Аргументы:

  • селектор - Селектор веб-элемента.
  • атрибут - Наименование атрибута веб-элемента.
  • значение - Новое значение атрибута.
  • multi_selector - Если равен True, то селектор может указывать на несколько веб-элементов. По умолчанию - False
  • validate - Если равен True, то команда будет проверять изменения значение атрибута у веб-элемента. По умолчанию - True
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:

# скрываем блок с отзывами что бы он не мешал вводу
ATTR_DATA("#product-review-container", "style", "display:none")

ATTR_DEL(селектор, атрибут, [, multi_selector ] [, execute ] [, timeout ])

Удаление атрибута у веб-элемента.

Аргументы:

  • селектор - Селектор веб-элемента.
  • атрибут - Наименование атрибута веб-элемента.
  • multi_selector - Если равен True, то селектор может указывать на несколько веб-элементов. По умолчанию - False
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

FOCUS | FOCUS(селектор [, execute ] [, timeout ])

Переводи фокус на веб-элемент соответствующий указанному селектору. Если селектор не задан, то фокус переходит на текущее окно.

Аргументы:

  • селектор - Селектор веб-элемента до середины которого нужно прокрутить.
  • execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Константы

Константы это объекты содержащие какие либо сведения. Их можно использовать в выражениях на ровне с кванторами. На константы распространяется семантика квантора ONE.

DATE | DATE(формат)

Константа содержащая текущую дату представленную в соответствии с в заданным форматом.

Аргументы:

Примеры:

PRINT("Дата запуска теста "+DATE)

# Веб-элемент содержит текущую дата
ONE("#carrent-date") == DATE

TIME | TIME(формат)

Константа содержащая текущее время представленное в соответствии с в заданным форматом.

Аргументы:

Пример:

# печатаем текущее время
PRINT("Время начала теста "+TIME)

CURRENT_BROWSER

Константа содержащая идентификатор текущего браузера.

Пример:

CLEAR("input", multi_selector=True, js=(CURRENT_BROWSER == "firefox"), timeout=120)

THREAD_NUMBER

Константа содержащая номер текущего потока.

Пример:

, PRINT(THREAD_NUMBER)

PAGE_URL | PAGE_URL([ no_param ] [, timeout ])

Константа содержащая URL текущей страницы. Если URL заканчивается символом /, то он отбрасывается.

Аргументы: * no_param - Удалить параметры из URL. По умолчанию - False * timeout - Максимальное время ожидания загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

Пример:

# проверка вхождения подстроки "/news" в текущий URL
"/news" > PAGE_URL

PAGE_TITLE | PAGE_TITLE([ lower ] [, timeout ])

Константа содержащая заголовок страницы.

Аргументы: * timeout - Максимальное время ожидания загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT * lower - Если равен True, то все символы приводятся в нижний регистр. По умолчанию - False

Примеры:

# Печатаем заголовок страницы
PRINT(PAGE_TITLE)
...
# Выражение проверяет вхождения подстроки "Новости" в заголовок
"Новости" > PAGE_TITLE

PAGE_SOURCE | PAGE_SOURCE(timeout)

Константа содержащая HTML код страницы.

Аргументы: * timeout - Максимальное время ожидания загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

Пример:

PRINT(PAGE_SOURCE)

WIDTH | WIDTH({ селектор } [, scroll ] [, timeout ])

Возвращает ширину окна браузера или веб-элемента. Если передано несколько селекторов, то возвращает список ширин веб-элементов на которые указывают селекторы. Если селектор отсутствует, то возвращается ширина всей страницы.

Аргументы:

  • селектор - Селектор веб-элемента
  • scroll - Возвращать полную ширину с учётом контента находящегося скрытого за полосами прокрутки
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

HEIGHT | HEIGHT({ селектор } [, scroll ] [, timeout ])

Возвращает высоту окна браузера или веб-элемента. Если передано несколько селекторов, то возвращает список высот веб-элементов на которые указывают селекторы. Если селектор отсутствует, то возвращается высота всей страницы.

Аргументы:

  • селектор - Селектор веб-элемента
  • scroll - Возвращать полную высоту с учётом контента находящегося скрытого за полосами прокрутки
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

POS_X | POS_X({ селектор } [, timeout ])

Возвращает X координату верхнего левого угла текущего окна браузера (относительно верхнего левого угла экрана) или веб-элемента (относительно верхнего левого угла браузера). Если передано несколько селекторов, то возвращает список координат веб-элементов на которые указывают селекторы.

Аргументы:

  • селектор - Селектор веб-элемента
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

POS_Y | POS_Y({ селектор } [, timeout ])

Возвращает Y координату верхнего левого угла текущего окна браузера (относительно верхнего левого угла экрана) или веб-элемента (относительно верхнего левого угла браузера). Если передано несколько селекторов, то возвращает список координат веб-элементов на которые указывают селекторы.

Аргументы:

  • селектор - селектор веб-элемента
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# Печатаем геометрию окна браузера
, PRINT(POS_X, POS_Y, WIDTH, HEIGHT)
...
# Печатаем геометрию веб-элемента c id - search
, PRINT(POS_X("#search"), POS_Y("#search"), WIDTH("#search"), HEIGHT("#search"))

Загрузка и скачивание файлов

CHECK_DOWNLOAD(имя_файла {, имя_файла } [, validator ] [, timeout ])

Проверяет факт скачивания файлов. Файлы считается скаченными если они появился в каталоге загрузки и их размер более 0 байт (если скачиваемый файл должен быть пустым, то для его проверки нужно указать validator=0). Если нужно проверить скачивание нескольких файлов, то можно передать несколько имён файлов перечислив их через запятую.

Если необходимо проверить валидность файла, то необходимо передать в аргумент quality значение на соответствии которому будет проверен файл.

Аргументы:

  • имя_файла - строки с именем проверяемого файла.
  • validator - Проверяемая величина. По умолчанию - None.
  • timeout - Максимальное время ожидания скачивания файла. По умолчанию - 30.0 сек.

В аргумент validator можно передать значения следующих типов:

  • Строка, её значение должно быть равным md5 хешу файла.
  • Целое положительное число, равное размеру файла в байтах.
  • Унарная функция. Ей передаётся путь к скаченному файлу, она должны вернуть True если файл валиден, иначе False.

Примеры:

TEST["Загрузка"](
    URL("https://demoqa.com/upload-download")
    , CLICK("#downloadButton")

    , "Файл скачен"
    , CHECK_DOWNLOAD("sampleFile.jpeg")

    , "Проверяем размер файла"
    , CHECK_DOWNLOAD("sampleFile.jpeg", validator=4096)

    , "Проверяем контрольную сумму"
    , CHECK_DOWNLOAD("sampleFile.jpeg", validator="24c004606d9c7a2a2f0a4d1b69562c3e")
    , tags="file"
)

# проверка факта скачивания трёх файлов
CHECK_DOWNLOAD("sample.txt", "test-data.csv", "image.jpg", timeout=5)

import json

def test_file(path):
    return json.load(open(path))["color"] == "Red"

TEST["Пример проверки содержимого json-файла"](
    URL("https://support.oneskyapp.com/hc/en-us/articles/208047697-JSON-sample-files")
    , CLICK("example_1.json")
    , CHECK_DOWNLOAD("example_1.json", validator=test_file)
)

UPLOAD(селектор, path {, path } [, timeout ])

Загрузка файла на сайт. Селектор должен указывать на веб-элемент с тегом input и атрибутом file (для загрузки нескольких файлов у этого веб-элемента должен быть определён атрибут multiple) или на тот веб-элемент на который можно перетащить файл.

Аргументы:

  • селектор - Селектор веб-элемента для загрузки файлов.
  • path - Путь к загружаемому файлу.
  • timeout - Максимальное время ожидания появления веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Если в аргументе path передан относительный путь, то поиск файла будет производится относительно каталога в котором находится текущая конфигурация.

Пример:

TEST["Закачка"](
    URL("https://demoqa.com/upload-download")
    
    # Загружаем 2 файла: "scope::resurs/kote.jpg" и "tests/files.py"
    , UPLOAD("#drag-drop-upload", "scope::resurs/kote.jpg", "tests/files.py")
    
    # Файл kote.jpg в подкаталоге data текущего набора тестов
    , UPLOAD("#uploadFile", "data/kote.jpg")
    , ONE("#uploadedFilePath") == "C:\\fakepath\\kote.jpg"
)

Отладка и отчёты

SCREENSHOT | SCREENSHOT({ селектор } [, css ] [, title ] [, timeout ])

Добавляет список скриншотов в отсчёт (отчёт должен поддерживать скриншоты, например allure подойдёт, а console нет). Если селекторы не указаны, то добавляет скриншот всей страницы. Не обязательный параметр css позволяет поменять таблицу стилей перед созданием скриншота.

Аргументы:

  • селектор - Селектор веб-элемента с которого будет сделан скриншот. Можно указать более одного селектора.
  • css - таблица стилей которая будет применена ко всей страницы перед созданием скриншота. По умолчанию - ““
  • title - Заголовок скриншота. Если не установлен, то используется заголовок страницы или селектор. По умолчанию - ““
  • timeout - Максимальное время ожидания веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT

Примеры:

# Добавляем скриншот всей страницы. Веб-элемент #id_text_area выделен красной рамкой
SCREENSHOT(css="#id_text_area {border: 5px solid red}")

#  Добавляем скриншот веб-элемента #id_text_area, выделение снято
SCREENSHOT("#id_text_area", css="#id_text_area {border: none}")

PRINT(сообщение {, сообщение })

Выводит в отчёты переданные сообщения. В качестве сообщения может быть использована любая команда или выражение доступное в языке. PRINT эвалюирует сообщение, выводит результат в отчёт и возвращает его как собственно значение. Это позволяет использовать команду PRINT в выражениях.

Аргументы:

  • сообщение - Объект сообщения

Пример:

# Печатает пароль
PRINT("Пароль: ", ONE("#passwd"))

# Выводит список строк с isbn в качестве сообщения в отчёте
# и проверяет что isbn со значением "9781449325862" присутствует в списке
PRINT(CONTENT["books"]["isbn"]) < "9781449325862"

WARNING(сообщение {, сообщение })

Выводит в отчёты переданные сообщения. Статус теста устанавливается в WARNING, если текущий статус выше чем WARNING, то он не меняется.

Аргументы:

  • сообщение - Текст сообщения

Пример:

WARNING("Текущий URL находится в другом домене!")

Управление браузером

PAGE_REFRESH | PAGE_REFRESH(timeout)

Перезагружает текущую страницу.

Аргументы:

  • timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

PAGE_BACK | PAGE_BACK(timeout)

Перемещаемся на один шаг назад по истории браузера.

Аргументы:

  • timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

PAGE_FORWARD | PAGE_FORWARD(timeout)

Перемещаемся на один шаг вперёд по истории браузера.

Аргументы:

  • timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

MAXIMIZE

Развернуть окно браузера на весь экран

MINIMIZE

Свернуть окно браузера

GEOMETRY([x [, y [, width [, height ]]]])

Изменяет геометрию окна браузера.

Аргументы:

  • x - X-координата верхнего левого угла браузера. По умолчанию - POS_X
  • y - Y-координата верхнего левого угла браузера. По умолчанию - POS_Y
  • width - ширина окна браузера (не может быть меньше 516). По умолчанию - WIDTH
  • height - высота окна браузера (не может быть меньше 134). По умолчанию - HEIGHT

Пример:

...
# Перемещение окна браузера в верхний левый угол
, GEOMETRY(0, 0)

# Изменяем размер окна
, GEOMETRY(width=1024, height=768)
...

NEW_WINDOW | NEW_WINDOW(url [, timeout ])

Открывает новое окно браузера, после чего переходит на указанный адрес или на CONFIG.BASE_URL. Возвращает время загрузки страницы.

Аргументы:

  • url - Адрес страницы. По умолчанию - CONFIG.BASE_URL
  • timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

NEW_TAB | NEW_TAB(url [, timeout ])

Открывает новую вкладку браузера, после чего переходит на указанный адрес или на CONFIG.BASE_URL. Возвращает время загрузки страницы.

Аргументы:

  • url - Адрес страницы. По умолчанию - CONFIG.BASE_URL
  • timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT

WINDOW | WINDOW(index)

Переключится на предыдущее окно/вкладку или на окно/вкладку с указанным индексом. Индексы присваиваются с 0 в порядке открытия окон или вкладок. Для обращения к окнам с конца можно использовать отрицательные индексы. После переключения на окно оно изменяет свой индекс на последний.

Аргументы:

  • index - порядковый номер окна/вкладки. По умолчанию: -2

CLOSE | CLOSE(index)

Закрывает текущие окно/вкладку или на окно/вкладку с указанным индексом. Индексы присваиваются с 0 в порядке открытия окон или вкладок. Для обращения к окнам с конца можно использовать отрицательные индексы. Единственное окно невозможно закрыть этой командой.

Аргументы:

  • index - порядковый номер окна/вкладки. По умолчанию: -1

Пример:

TEST["browser-windows"](
    # После открытия индекс основного окна - 0
    URL("https://demoqa.com/browser-windows")
    
    , "New Tab"
    , CLICK("#tabButton")
    # Открывается окно Tab
    # Индекс основного окна - 0, окна Tab - 1
    , ONE("h1") == "This is a sample page"
    , WINDOW
    # Переключаемся на основное окно.
    # Индекс окна "Tab"- 0, основного окна - 1
    
    , "New Window"
    , CLICK("#windowButton")
    # Открывается окно Window
    # Индекс окна Tab- 0, основного окна - 1, окна Window - 2
    , ONE("#sampleHeading") == "This is a sample page"
    , WINDOW
    # Переключаемся на основное окно.
    # Индекс окна Tab- 0, окна Window - 1, основного окна - 2
    
    , "New Window Message"
    , CLICK("#messageWindowButton")
    # Открывается окно Message
    # Индекс окна Tab- 0, окна Window - 1, основного окна - 2, Message -3
    , ONE("body") == "Knowledge increases by sharing but not by saving. Please share this website with your friends and in your organization."
    
    , "Закрываем"
    , CLOSE
    # Закрываем окно Message
    # Индекс окна Tab - 0, окна Window - 1, основного окна - 2
    , WINDOW
    # Переключаемся на окно Window
    # Индекс окна Tab - 0, основного окна - 1, окна Window - 2
    , CLOSE
    # Закрываем окно Window
    # Индекс окна Tab - 0, основного окна - 1
    , WINDOW
    # Переключаемся на окно Tab
    # Индекс основного окна - 0, окна Tab - 1
    , CLOSE
    # Закрываем окно Tab
    # Индекс основного окна - 0
    
    , browser = "firefox"
    , tags = "window"
)

ALERT | ALERT(timeout)

Константа содержащая текст alert-а

Аргументы:

  • timeout - Максимальное время ожидания появления alert-а. По умолчанию - CONFIG.WAIT_TIMEOUT

ALERT_OK | ALERT_OK(timeout)

Нажать на окопку “ok” в окне alert-а

Аргументы:

  • timeout - Максимальное время ожидания появления alert-а. По умолчанию - CONFIG.WAIT_TIMEOUT

ALERT_CANCEL | ALERT_CANCEL(timeout)

Нажать на окопку “cancel” в окне alert-а

Аргументы:

  • timeout - Максимальное время ожидания появления alert-а. По умолчанию - CONFIG.WAIT_TIMEOUT

ALERT_DATA(данные [, timeout ])

Ввод данных в поле окна Prompt Alert

Аргументы:

  • данные - Данные для ввода
  • timeout - Максимальное время ожидания появления alert-а. По умолчанию - CONFIG.WAIT_TIMEOUT

Пример:


TEST["On button click, prompt box will appear"](
    URL("https://demoqa.com/alerts")
    
    , CLICK("#promtButton")
    , ALERT == "Please enter your name"
    , ALERT_DATA("Meta Test")
    , ALERT_OK
    , ONE("#promptResult") == "You entered Meta Test"
)

Управляющие команды

Эти команды управляют привносят поведение характерное для императивных языков. По этому их не желательно использовать в тестах, но они вполне уместны в скриптах.

PAUSE | PAUSE(задержка)

Ничего не делает пока не истечёт время задержки.

Аргументы:

  • задержка - Время паузы в секундах. По умолчанию - 1.0

Примеры:

# Пауза 5 секунд
, PAUSE(5)
...
# Пауза 1 секунда
, PAUSE

IF(выражение, действие_1 [, действие_2 ])

Тернарный условный оператор.

Аргументы:

  • выражение - Если выражение истинно, то выполняется действие_1, а если ложно то действие_2.
  • действие_1 - Команда или блок (кортеж) команд.
  • действие_2 - Альтернативная команда или блок (кортеж) команд. По умолчанию - None

Пример:

# Напечатать URL страницы если он не соответствует регулярному выражению
, IF(~(PAGE_URL @ r"^.*news$"), PRINT(PAGE_URL))

LOOP(число_итераций, действие {, действие })

Выполнение действия заданное число раз.

Аргументы:

  • число_итераций - Натуральное число указывающие количество повторений действия
  • действие - Команда или блок (кортеж) команд

Пример:

# 10 раз печатает URL текущей страницы
, LOOP(10, PRINT(PAGE_URL))

WHILE(выражение, действие {, действие } [, max_iteration ])

Выполнение действия пока выражение истинно.

Аргументы:

  • выражение - Предикат, если значение истинно, то действие выполняется.
  • действие - Команда или блок (кортеж) команд.
  • max_iteration - Максимальное число итераций. Если число итераций будет превышено, то цикл завершится с ошибкой. Если равно 0, то число итераций не ограничивается. По умолчанию - 0

Пример:

# удаление данных из списка форм
, WHILE(COUNT("css::div.form_list") > 0, (
        CLICK("id::del_icon_1")
        , CLICK("id::del_modal_button")
    )
    , max_iteration = 10
)

STOP_TEST | STOP_TEST([, execute ] [, сообщение ])

Остановка теста. Статус теста устанавливается в STOPPED.

Аргументы:

  • execute - Предикат, если значение истинно, то тест будет пропущен По умолчанию - True
  • сообщение - Сообщение для отчётов.

Пример:

# Остановить тест если URL не соответствует регулярному выражению
, STOP_TEST(~(PAGE_URL @ r"^.*news$"), "Не тот сайт "+PAGE_URL)

SKIP_TEST | SKIP_TEST([, execute ] [, сообщение ])

Пропуск теста. Статус теста устанавливается в SKIPPED, если текущий статус выше чем SKIPPED, то он не меняется.

Аргументы:

  • execute - Предикат, если значение истинно, то тест будет пропущен По умолчанию - True
  • сообщение - Сообщение для отчётов.

Пример:

# Пропустить тест если URL не соответствует регулярному выражению
, SKIP_TEST(~(PAGE_URL @ r"^.*news$"), "Не тот сайт "+PAGE_URL)

SKIP_STEP | SKIP_STEP([, execute ] [, сообщение ])

Пропуск текущего шага. Статус теста не меняется.

Аргументы:

  • execute - Предикат, если значение истинно, то шаг будет пропущен По умолчанию - True
  • сообщение - Сообщение для отчётов

Пример:

# Пропустить шаг если URL не соответствует регулярному выражению
SKIP_STEP(~(PAGE_URL @ r"^.*news$"), "Не тот сайт "+PAGE_URL)

Cookies и Local Storage

COOKIES | COOKIES(имя [, property ]) | COOKIES[ имя ]

Константа предоставляющая доступ к cookie на текущей странице.

Аргументы:

  • имя - Имя cookie
  • property - Имя свойства cookie

Пример:

# Получить значение сookie по имени
COOKIES["auth"]

# сookie "auth" установлена
"auth" > COOKIES

# Проверка значения у сookie "auth"
COOKIES("auth") == "1232132121"

# Проверка свойства "httpOnly" у сookie "auth"
COOKIES("auth", "httpOnly") == True

COOKIES_SET(имя, значение [, property_dict ])

Добавляет cookies.

Аргументы:

  • имя - Имя cookie
  • значение - Значение cookie
  • property_dict - Словарь свойств cookie:
Свойство По умолчанию Описание
expires "" Максимальное время жизни cookie (в HTTP формате)
max_age -1 Количество секунд до истечения срока действия cookie
path "/" cookie видны только по пути path и ниже
domain "" если указан domain, то cookie видны и на его поддоменах
secure False cookie доступным только при использовании HTTPS
httpOnly False запретить доступ к cookie из JavaScript
sameSite "None" запретить отправлять куки с внешними запросами

Пример:

# устанавливаем auth
COOKIES_SET("auth", "1232132121", {"httpOnly": True})

COOKIES_DEL | COOKIES_DEL(имя {, имя })

Удаляет cookies с указанными именами, если имя не указано, то удаляет все cookies.

Аргументы:

  • имя - имя удаляемой cookie

Пример:

# удаляем все cookies
COOKIES_DEL

# удаляем csrftoken
COOKIES_DEL("csrftoken")

# удаляем csrftoken и auth
COOKIES_DEL("csrftoken", "auth")

STORAGE | STORAGE(key)

Список ключей localStorage. Если указан параметр key, то константа будет содержать данные доступные по этому ключу.

Аргументы:

  • key - Строковый идентификатор данных

Пример:

# Проверяем наличие ключа "name" в localStorage
"name" > STORAGE

# Выводим данные с ключём "name"
PRINT(STORAGE("name"))

STORAGE_SET(key, value)

Устанавливает значение в localStorage

Аргументы:

  • key - Строковый идентификатор данных
  • value - Данные

Пример:

# Записываем имя пользователя в localStorage
STORAGE_SET("name", "Василий Пупкин")

STORAGE_DEL | STORAGE_DEL(key {, key })

Удаляет данные из localStorage. Если ключ не указан, то всё хранилище очищается.

Аргументы:

  • key - Строковый идентификатор данных

Пример:

# Удаляем имя пользователя из localStorage
STORAGE_DEL("name")

Для версии 2.0 редакция от 16.09.2026


Группа в Max |  Группа в Telegramm
Политика конфиденциальности

© ИП Пуляев Григорий Васильевич, 2024-2026
ИНН: 263208655118, ОГРНИП: 320265100031176