Встроенные команды мета-языка
Основные команды
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 ] [, wait_value ] [, execute] [, timeout ])
Вводит данные в элемент формы. Если данными является текст длина которого не превышает 100 символов, то он вводится посредством метода send_keys который эмитирует нажатие клавиш пользователем. Если его длина 100 и более символов, то для ускорения ввода используется javascript. Если установлено время задержки ввода символов, то текст в любом случае вводится посимвольно.
При вводе в поле с типом select в качестве данных можно передать целочисленный индекс выбираемого элемента, значение value соответствующего элемента с типом option или его текстовое значение. Если для элемента select установлен атрибут multiple, то в качестве данных нужно передавать список индексов или значений.
Аргументы:
- селектор - Селектор элемента формы. Если нужно заполнить несколько элементов одними и теми же данными, то можно передать список селекторов.
- данные - строка для заполнения элемента формы
- multi_selector - Если равен True, то селектор может указывать на несколько элементов. В этом случае все элементы на которые указывает селектор будут заполнены одними и теми же данными. По умолчанию - False
- clear - Если равен True, то перед заполнением поле формы будет очищено, иначе данные будут добавлены в конец существующей строки. По умолчанию - True
- delay - Задержка ввода каждого символа в секундах. По умолчанию - 0.0
- press - Идентификатор клавиши которая будет нажата после завершения ввода данных (см. команду KEY)
- no_click - Отключает клик по элементу перед вводом данных
- offset_x - Смещение точки клика по оси X относительно центра элемента.
- offset_y - Смещение точки клика по оси Y относительно центра элемента.
- secret - Если равен True, то вместо данных в отчётах будет указана строка "*****“. Этот параметр можно использовать при вводе чувствительных данных. По умолчанию - False
- wait_value - Если равен True, то команда будет ожидать изменения значение атрибута “value” у элемента. По умолчанию - 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” |
| “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 ] [, delay ] [, execute ] [, timeout ])
Эмулирует нажатие левой кнопки мыши на элементе. Если поле нажатие открывается новое окно или вкладка браузера, то автоматически переходим на неё.
Аргументы:
- селектор - Селектор элемента. Если нужно эмулировать последовательность нажатий на нескольких элементах, то можно указать несколько селекторов.
- offset_x - Смещение точки клика по оси X относительно центра элемента. По умолчанию - 0.0
- offset_y - Смещение точки клика по оси Y относительно центра элемента. По умолчанию - 0.0
- multi_selector - Если равен True, то селектор может указывать на несколько элементов. По умолчанию - False
- js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
- delay - Задержка перед началом клика. По умолчанию - 0.0
- 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)DOUBLE_CLICK(селектор { селектор } [, execute ] [, timeout ])
Эмулирует двойное нажатие левой кнопки мыши на элементе.
Аргументы:
- селектор - Селектор элемента. Если нужно эмулировать последовательность нажатий на нескольких элементах, то можно указать несколько селекторов.
- execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
- timeout - Максимальное время ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...
, DOUBLE_CLICK("link::My Info")
...RIGHT_CLICK(селектор [, js ] [, execute] [, timeout ])
Эмулирует нажатие правой кнопки мыши на элементе. Может использоваться для вызова контекстное меню.
Аргументы:
- Селектор - Селектор элемента.
- js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
- 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"
, MOUSE_MENU("#rightClickBtn")
, ONE("#rightClickMessage") == "You have done a right click"
, "You have done a double click"
, DOUBLE_CLICK("#doubleClickBtn")
, ONE("#doubleClickMessage") == "You have done a double click"
, tags = "button"
)HOVER(селектор { селектор } [, click ] [, execute ] [, timeout ])
Эмитирует перемещение курсора мыши на элемент или последовательно перемещает его по цепочки элементов.
Аргументы:
- селектор - Селектор элемента.
- click - Если равен True, то после после наведения курсора мыши на последний элемент будет нажата ЛКМ. По умолчанию - False
- 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 [, timeout ]) | DND(селектор_1, offset_x [, offset_y ] [, execute ] [, timeout ])
Эмитирует перетаскивание веб элемента мышью. Элемент можно переместить на место другого элемента или на указанные координаты (относительно центра элемента).
Аргументы:
- селектор_1 - Селектор перемещаемого элемента.
- селектор_2 - Селектор элемента на который перемещают элемент с селектором 1
- offset_x - Смещение центра элемента по оси X. По умолчанию - 0.0
- offset_y - Смещение центра элемента по оси Y. По умолчанию - 0.0
- 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!"
)DATA_ATTR(селектор, атрибут, значение [, execute ] [, timeout ])
Изменяет значение атрибута у веб-элемента.
Аргументы:
- селектор - Селектор веб-элемента.
- атрибут - Наименование атрибута веб-элемента.
- значение - Новое значение атрибута.
- execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
- timeout - Максимальное время ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...
# скрываем блок с отзывами что бы он не мешал вводу
, DATA_ATTR("#product-review-container", "style", "display:none")
...PAUSE | PAUSE(задержка)
Ничего не делает пока не истечёт время задержки.
Аргументы:
- задержка - Время паузы в секундах. По умолчанию - 1.0
Пример:
...
, PAUSE(5) # Пауза 5 секунд
, PAUSE # Пауза 1 секунда
...PRINT(“сообщение” { “сообщение” })
Выводит в отчёты переданные сообщения. Статус теста не меняется, может быть использоваться для отладки.
Аргументы:
- сообщение - Текст сообщения
Пример:
# Печатает пароль
PRINT("Пароль: ", ONE("#passwd"))WARNING(“сообщение” { “сообщение” })
Выводит в отчёты переданные сообщения. Статус теста устанавливается в WARNING, если текущий статус выше чем WARNING, то он не меняется.
Аргументы:
- сообщение - Текст сообщения
Пример:
WARNING("Текущий URL находится в другом домене!")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}")
...NOT(селектор [, атрибут ] [, no_displayed ] [, timeout ])
Вызывает ошибку если элемент на который указывает селектор присутствует на странице. Если флаг no_displayed выставлен в False, то команда проверяет именно отсутствие элемента в DOM, а не только его видимость.
Если указан не только селектор, но ещё и атрибут, то команда проверяет исчезновение указанного атрибута у элемента.
Аргументы:
- селектор - Селектор проверяемого веб-элемента.
- атрибут - Наименование проверяемого атрибута.
- no_displayed - Флаг указывает на то что нужно проверять видимость элемента, а не нахождение его в DOM. По умолчанию - False
- timeout - Максимальное время ожидания исчезновения элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# Вызовет ошибку если элемент с селектором "#hidden_bar" присутствует в DOM
, NOT("#hidden_bar")
# Вызовет ошибку если атрибут "disabled" не исчезнет в течении 5 секунд.
, NOT("#enableAfter", "disabled", timeout=5)
# Вызовет ошибку если элемент виден на странице
, NOT(["#input-example", "#loading"], no_displayed=True)Эта команда не является квантором, но может использоваться в выражениях в качестве предиката:
Пример:
# Если флаг у элемента с id checkbox снят, то элемент с id enableAfter должен отсутствовать на странице
, ONE("#checkbox") == False & NOT("#enableAfter")COUNT(селектор | выражение [, displayed ] [, timeout ])
Подсчёт количества элементов соответствующих селектору. Если элементы на страницы отсутствуют, то будет возвращена ошибка. Для проверки отсутствия элементов нужно использовать команду NOT(“селектор”), в место выражения COUNT(“селектор”) == 0.
Команда так же может быть использована для подсчёта количества значений содержащихся в выражениях с кванторами ALL или ANY.
Аргументы:
- селектор - Селектор веб-элементов или вырадение.
- displayed - Если установлен в True, то ждём отображения элементов. По умолчанию - True
- timeout - Максимальное время ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# проверка количество строк в таблице.
COUNT("//tr") == 100JS(“скрипт” [, аргумент { аргумент } ] [, sync ] [, execute ] [, timeout ])
Выполнить js-скрипт асинхронно (sync = False) или синхронно (sync = True). Возвращает результат работы скрипта.
Аргументы:
- скрипт - Код js скрипта.
- аргументы - Аргументы передаваемые скрипту (внутри скрипта они доступны через массив arguments)
- timeout - Именованный аргумент, устанавливает тайм-аут выполнения скриптов. По умолчанию - CONFIG.WAIT_TIMEOUT
- execute - Выражение, если его результат будет истинен, то команда выполнится иначе нет. По умолчанию - True
- sync - Синхронное (True) или асинхронное (False) выполнение скрипта. По умолчанию - True
Пример:
# прокрутка содержимого окна до определённой позиции
, 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"
)
)Файлы
CHECK_DOWNLOAD(“name” [, quality ] [, timeout ])
Проверяет факт скачивания файла. Файл считается скаченным если он появился в каталоге загрузки и его размер более 0 байт (если скачиваемый файл должен быть пустым, то для его проверки нужно указать quality=0).
Если необходимо проверить валидность файла, то необходимо передать в аргумент quality значение на соответствии которому будет проверен файл.
Аргументы:
- name - имя файла
- quality - Проверяемая величина. По умолчанию - None.
- timeout - Максимальное время ожидания скачивания файла. По умолчанию - 30.0 сек.
В аргумент quality можно передать значения следующих типов:
- Строка, её значение должно быть равным md5 хешу файла.
- Целое положительное число, равное размеру файла в байтах.
- Унарная функция. Ей передаётся путь к скаченному файлу, она должны вернуть True если файл валиден, иначе False.
Пример:
TEST["Загрузка"](
URL("https://demoqa.com/upload-download")
, CLICK("#downloadButton")
, "Файл скачен"
, CHECK_DOWNLOAD("sampleFile.jpeg")
, "Проверяем размер файла"
, CHECK_DOWNLOAD("sampleFile.jpeg", 4096)
, "Проверяем контрольную сумму"
, CHECK_DOWNLOAD("sampleFile.jpeg", "24c004606d9c7a2a2f0a4d1b69562c3e")
, tags="file"
)
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", test_file)
)UPLOAD(селектор, path [, timeout ])
Загрузка файла на сайт. Селектор должен указывать на элемент с тегом input и атрибутом file или на тот элемент на который можно перетащить файл.
Аргументы:
- селектор - Селектор элемента загрузки.
- path - Путь к загружаемому файлу.
- timeout - Максимальное время ожидания появления веб-элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Если в аргументе path передан относительный путь, то поиск файла будет производится относительно каталога тестового набора т.е. CONFIG.TEST_CASE_PATH.
Пример:
TEST["Закачка"](
URL("https://demoqa.com/upload-download")
# Абсолютный путь к файлу теста файлу теста
, UPLOAD("#uploadFile", __file__)
, ONE("#uploadedFilePath") == "C:\\fakepath\\"+os.path.basename(__file__)
# Файл kote.jpg в подкаталоге data текущего набора тестов
, UPLOAD("#uploadFile", "data/kote.jpg")
, ONE("#uploadedFilePath") == "C:\\fakepath\\kote.jpg"
)Константы
Константы это объекты содержащие какие либо сведения. Их можно использовать в выражениях на ровне с кванторами. На константы распространяется семантика квантора ONE.
DATE | DATE(“формат”)
Константа содержащая текущую дату представленную в соответствии с в заданным форматом.
Аргументы:
- формат - Строка формата даты. По умолчанию - “YYYY-MM-DD”
Пример:
PRINT("Дата запуска теста "+DATE)
# Элемент содержит текущую дата
ONE("#carrent-date") == DATETIME | TIME(“формат”)
Константа содержащая текущее время представленное в соответствии с в заданным форматом.
Аргументы:
- формат - Строка формата времени. По умолчанию - “hh:mm:ss.ms”
Пример:
# печатаем текущее время
PRINT("Время начала теста "+TIME)CURRENT_BROWSER
Константа содержащая идентификатор текущего браузера.
Пример:
CLEAR("input", multi_selector=True, js=(CURRENT_BROWSER == "firefox"), timeout=120)THREAD_NUMBER
Константа содержащая номер текущего потока.
Пример:
, PRINT(THREAD_NUMBER)PAGE_URL | PAGE_URL(timeout)
Константа содержащая URL текущей страницы. Если URL заканчивается символом /, то он отбрасывается.
Аргументы: * timeout - Максимальное время ожидания загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT
Пример:
# проверка вхождения подстроки "/news" в текущий URL
"/news" > PAGE_URLPAGE_TITLE | PAGE_TITLE(timeout)
Константа содержащая заголовок страницы.
Аргументы: * timeout - Максимальное время ожидания загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT
Пример:
# Печатаем заголовок страницы
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"))
...Управляющие команды
Эти команды управляют привносят поведение характерное для императивных языков. По этому их не желательно использовать в тестах, но они вполне уместны в скриптах.
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(выражение, действие [, число_итераций ])
Выполнение действия пока выражение истинно.
Аргументы:
- выражение - Предикат, если значение истинно, то действие выполняется.
- действие - Команда или блок (кортеж) команд.
- число_итераций - Максимальное число итераций. Если число итераций будет превышено, то цикл завершится с ошибкой. Если равно 0, то число итераций не ограничивается. По умолчанию - 0
Пример:
# удаление данных из списка форм
...
, WHILE(COUNT("css::div.form_list") > 0, (
CLICK("id::del_icon_1")
, CLICK("id::del_modal_button")
))
...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)
...Управление браузером
REFRESH | REFRESH(timeout)
Перезагружает текущую страницу.
Аргументы:
- timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT
Пример:
...
, REFRESH
...BACK_PAGE | BACK_PAGE(timeout)
Перемещаемся на один шаг назад по истории браузера.
Аргументы:
- timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT
Пример:
...
, BACK_PAGE
...FORWARD_PAGE | FORWARD_PAGE(timeout)
Перемещаемся на один шаг вперёд по истории браузера.
Аргументы:
- timeout - Максимальное время загрузки страницы. По умолчанию - CONFIG.PAGE_LOAD_TIMEOUT
Пример:
...
, FORWARD_PAGE
...MAXIMIZE
Развернуть окно браузера на весь экран
Пример:
...
, MAXIMIZE
...MINIMIZE
Свернуть окно браузера
Пример:
...
, 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"
)Cookies и Local Storage
SET_COOKIE(имя, значение [, 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
, SET_COOKIE("auth", "1232132121", {"httpOnly": True})COOKIES | COOKIES(имя [, arg ])
Константа предоставляющая доступ к cookie на текущей странице.
Аргументы:
- имя - Имя cookie
- arg - Значение свойства cookie.
Пример:
# вывести все Cookies
, PRINT(COOKIES)
# сookie "auth" установлена
, "auth" > COOKIES
# Проверка значения у сookie "auth"
, COOKIES("auth") == "1232132121"
# Проверка свойства "httpOnly" у сookie "auth"
, COOKIES("auth", "httpOnly") == TrueDEL_COOKIES | DEL_COOKIES(имя { имя })
Удаляет cookies с указанными именами, если имя не указано, то удаляет все cookies.
Аргументы:
- имя - имя cookie
Пример:
# удаляем все cookies
, DEL_COOKIES
# удаляем csrftoken
, DEL_COOKIES("csrftoken")
# удаляем csrftoken и auth
, DEL_COOKIES("csrftoken", "auth")SET_STORAGE(“key”, value)
Устанавливает значение в localStorage
Аргументы:
- key - Идентификатор данных
- value - Данные
Пример:
# Записываем имя пользователя в localStorage
, SET_STORAGE("name", "Василий Пупкин")GET_STORAGE(“key”)
Возвращает значение из localStorage
Аргументы:
- key - Идентификатор данных
Пример:
# Проверяем имя пользователя
, GET_STORAGE("name") == "Василий Пупкин"DEL_STORAGE | DEL_STORAGE(“key”, { “key” })
Удаляет данные из localStorage. Если ключ не указан, то всё хранилище очищается.
Аргументы:
- key - Идентификатор данных
Пример:
# Удаляем имя пользователя из localStorage
, DEL_STORAGE("name")STORAGE_KEYS
Список ключей localStorage
Пример:
# Проверяем наличие ключа "name" в localStorage
, "name" > STORAGE_KEYSДля версии 1.1 редакция от 16.03.2026
Telegramm группа
Политика конфиденциальности
Персональные данные