Команды встроенного языка
- Команды взаимодействия в веб-страницей
- Константы
- Загрузка и скачивание файлов
- Отладка и отчёты
- Управление браузером
- Управляющие команды
- Cookies и Local Storage
Команды взаимодействия с веб-страницей
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") == 100JS(скрипт [, 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(формат)
Константа содержащая текущую дату представленную в соответствии с в заданным форматом.
Аргументы:
- формат - Строка формата даты. По умолчанию - “%Y-%m-%d”
Примеры:
PRINT("Дата запуска теста "+DATE)
# Веб-элемент содержит текущую дата
ONE("#carrent-date") == DATETIME | TIME(формат)
Константа содержащая текущее время представленное в соответствии с в заданным форматом.
Аргументы:
- формат - Строка формата времени. По умолчанию - “%H:%M:%S.%f”
Пример:
# печатаем текущее время
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_URLPAGE_TITLE | PAGE_TITLE([ lower ] [, timeout ])
Константа содержащая заголовок страницы.
Аргументы: * timeout - Максимальное время ожидания загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT * lower - Если равен True, то все символы приводятся в нижний регистр. По умолчанию - False
Примеры:
# Печатаем заголовок страницы
PRINT(PAGE_TITLE)
...
# Выражение проверяет вхождения подстроки "Новости" в заголовок
"Новости" > PAGE_TITLEPAGE_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 секунда
, PAUSEIF(выражение, действие_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") == TrueCOOKIES_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
Политика конфиденциальности