Встроенные команды мета-языка
Основные команды
URL | URL(“url” [, timeout ])
Переход на страницу, возвращает время загрузки страницы. Если адрес страницы не указан, то переход осуществляется на базовый URL (см. CONFIG.BASE_URL)
Аргументы:
- url - Адрес страницы. Если не указан, то используется CONFIG.BASE_URL
- timeout - тайм-аут загрузки страницы. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# Переход страницу https://ya.ru
"https://ya.ru")
URL(
# Переход страницу https://ya.ru, время перехода на страницу на должно превышать 60 сек.
"https://ya.ru") < 60
URL(
# Переход на базовый URL URL
DATA(селектор, данные [, multi_selector ] [, clear ] [, timeout ] [, delay ] [, press ] [, no_click ] [, offset_x ] [, offset_y ])
Вводит данные в элемент формы. Если данными является текст длина которого не превышает 100 символов, то он вводится посредством метода send_keys который эмитирует нажатие клавиш пользователем. Если его длина 100 и более символов, то для ускорения ввода используется javascript. Но если установлено время задержки ввода символов, то текст в любом случае вводится посимвольно.
При вводе в поле с типом select в качестве данных можно передать целочисленный индекс выбираемого элемента, значение value соответствующего элемента с типом option или его текстовое значение. Если для элемента select установлен атрибут multiple, то в качестве данных можно передать список индексов или значений.
Аргументы:
- селектор - Селектор элемента формы. Если нужно заполнить несколько элементов одними и теми же данными, то можно передать список селекторов.
- данные - строка для заполнения элемента формы
- multi_selector - Если равен True, то селектор может указывать на несколько элементов. По умолчанию - False
- clear - Если равен True, то перед заполнением поле формы будет очищено, иначе данные будут добавлены в конец существующей строки. По умолчанию - True
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
- delay - Задержка ввода каждого символа в секундах. По умолчанию - 0.0
- press - Идентификатор клавиши которая будет нажата после завершения ввода данных (см. команду KEY)
- no_click - Отключает клик по элементу перед вводом данных
- offset_x - Смещение точки клика по оси X относительно центра элемента.
- offset_y - Смещение точки клика по оси Y относительно центра элемента.
Пример:
# Заполняем поле #userName
..."#userName", "Вася")
, DATA(
...
# Заполняем поля #userName и #lastname
..."#userName", "#lastname"], "Вася")
, DATA([ ...
KEY(селектор, “клавиша” [, multi_selector ] [, timeout ])
Эмулирует нажатие клавиши на элементе. Команда предназначена только для передачи нажатия одной клавиши, для ввода текста используйте команду DATA.
Аргументы:
- селектор - Селектор элемента.
- клавиша - Идентификатор нажимаемой клавиши.
- multi_selector - Если равен True, то селектор может указывать на несколько элементов. По умолчанию - False
- 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.
Пример:
# Поиск текста
...."#search", "текст")
, DATA("#search", KEY.ENTER)
, KEY(
...
# выделение всего текста
..."#search", [KEY.CONTROL, "A"])
, KEY( ...
CLEAR(селектор { селектор } [, multi_selector ] [, timeout ])
Очистка веб-элемента. Снимает выделение с элементов checkbox и select, очищает текстовые элементы.
Аргументы:
- селектор - Селектор элемента. Если нужно очистить несколько элементов, то можно указать несколько селекторов.
- multi_selector - Если равен True, то селектор может указывать на несколько элементов. По умолчанию - False
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# Очистка элемента поиска
..."#search")
, CLEAR( ...
CLICK(селектор { селектор } [, offset_x ] [, offset_y ] [, multi_selector ] [, js ] [, timeout ])
Эмулирует нажатие левой кнопки мыши на элементе. Если поле нажатие открывается новое окно или вкладка браузера, то автоматически переходим на неё.
Аргументы:
- селектор - Селектор элемента. Если нужно эмулировать последовательность нажатий на нескольких элементах, то можно указать несколько селекторов.
- offset_x - Смещение точки клика по оси X относительно центра элемента. По умолчанию - 0.0
- offset_y - Смещение точки клика по оси Y относительно центра элемента. По умолчанию - 0.0
- multi_selector - Если равен True, то селектор может указывать на несколько элементов. По умолчанию - False
- js - Если равен True, то нажатие эмулируется через javascript. По умолчанию - False
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...# Переход на вкладку My Info
"link::My Info")
, CLICK(
...# смещаем клик на конец элемента - 16px
"#Rating_5_label", offset_x=WIDTH("#Rating_5_label")/2-16)
, CLICK(
...# вычисляем 1% от длины слайдера
"1%", WIDTH(".range-slider__wrap") / 100)
, ARG(
...# клик в начало слайдера
".range-slider__wrap", offset_x=(-50 * ARG("1%")))
, CLICK( ...
DOUBLE_CLICK(селектор { селектор } [, timeout ])
Эмулирует двойное нажатие левой кнопки мыши на элементе.
Аргументы:
- селектор - Селектор элемента. Если нужно эмулировать последовательность нажатий на нескольких элементах, то можно указать несколько селекторов.
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
..."link::My Info")
, DOUBLE_CLICK( ...
RIGHT_CLICK(селектор [, timeout ])
Эмулирует нажатие правой кнопки мыши на элементе. Может использоваться для вызова контекстное меню.
Аргументы:
- Селектор - Селектор элемента.
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
"Buttons"](
TEST["https://demoqa.com/buttons")
URL(
"You have done a dynamic click"
, "Click Me")
, CLICK("#dynamicClickMessage") == "You have done a dynamic click"
, ONE(
"You have done a right click"
, "#rightClickBtn")
, MOUSE_MENU("#rightClickMessage") == "You have done a right click"
, ONE(
"You have done a double click"
, "#doubleClickBtn")
, DOUBLE_CLICK("#doubleClickMessage") == "You have done a double click"
, ONE(
= "button"
, tags )
HOVER(селектор [, timeout ])
Эмитирует перемещения курсора мыши на элемент.
Аргументы:
- селектор - Селектор элемента.
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
..."#ui-id-5")
, HOVER( ...
DND(селектор_1, селектор_2 [, timeout ]) | DND(селектор_1, offset_x [, offset_y ] [, timeout ])
Эмитирует перемещение веб элемента мышью. Элемент можно переместить на место другого элемента или на указанные координаты (относительно центра элемента).
Аргументы:
- селектор_1 - Селектор перемещаемого элемента.
- селектор_2 - Селектор элемента на который перемещают элемент с селектором 1
- offset_x - Смещение центра элемента по оси X. По умолчанию - 0.0
- offset_y - Смещение центра элемента по оси Y. По умолчанию - 0.0
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
"Перемещение на элемент"](
TEST["https://www.qa-practice.com/elements/dragndrop/boxes")
URL("#rect-draggable", "#rect-droppable")
, DND("#text-droppable") == "Dropped!"
, ONE(
)
"Перемещение по координатам"](
TEST["https://www.qa-practice.com/elements/dragndrop/boxes")
URL("#rect-draggable", 0, -200)
, DND("#text-droppable") == "Dropped!"
, ONE( )
DATA_ATTR(селектор, атрибут, значение [, timeout ])
Изменяет значение атрибута у веб элемента.
Аргументы:
- селектор - Селектор элемента.
- атрибут - Наименование атрибута.
- значение - Новое значение атрибута.
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...# скрываем блок с отзывами что бы он не мешал вводу
"#product-review-container", "style", "display:none")
, DATA_ATTR( ...
PAUSE | PAUSE(задержка)
Ничего не делает пока не истечёт время задержки.
Аргументы:
- задержка - Время паузы в секундах. По умолчанию - 1.0
Пример:
...5) # Пауза 5 секунд
, PAUSE(# Пауза 1 секунда
, PAUSE ...
PRINT(“сообщение” { “сообщение” })
Выводит в отчёты переданные сообщения. Статус теста не меняется, может быть использоваться для отладки.
Аргументы:
- сообщение - Текст сообщения
Пример:
# Печатает пароль
"Пароль: ", ONE("#passwd")) PRINT(
WARNING(“сообщение” { “сообщение” })
Выводит в отчёты переданные сообщения. Статус теста устанавливается в WARNING, если текущий статус выше чем WARNING, то он не меняется.
Аргументы:
- сообщение - Текст сообщения
Пример:
"Текущий URL находится в другом домене!") WARNING(
SCREENSHOT | SCREENSHOT(селектор { селектор } [, css ] [, timeout ])
Добавляет список скриншотов в отсчёт (отчёт должен поддерживать скриншоты, например allure подойдёт, а console нет). Если селекторы не указаны, то добавляет скриншот всей страницы. Не обязательный параметр css позволяет поменять таблицу стилей перед созданием скриншота.
Аргументы:
- селектор - Селектор элемента с которого будет сделан скриншот. Можно указать более одного селектора.
- css - таблица стилей которая будет применена ко всей страницы перед созданием скриншота. По умолчанию - ""
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...# Добавляем скриншот всей страницы. Элемент #id_text_area выделен красной рамкой
="#id_text_area {border: 5px solid red}")
, SCREENSHOT(css
# Добавляем скриншот элемента #id_text_area, выделение снято
"#id_text_area", css="#id_text_area {border: none}")
, SCREENSHOT( ...
NOT(селектор [, атрибут ] [, timeout ])
Вызывает ошибку если элемент на который указывает селектор присутствует на странице. Команда проверяет именно отсутствие элемента в DOM, а не только его недоступность пользователю.
Если указан не только селектор, но ещё и атрибут, то команда проверяет исчезновение указанного атрибута у элемента.
Аргументы:
- селектор - Селектор веб-элемента. Если нужно проверить несколько элементов, то можно передать список селекторов.
- атрибут - Наименование проверяемого атрибута.
- timeout - Время явного ожидания исчезновения элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# Вызовет ошибку если элемент с селектором "#hidden_bar" присутствует на странице
..."#hidden_bar")
, NOT(
...
# Вызовет ошибку если атрибут "disabled" не исчезнет в течении 5 секунд.
..."#enableAfter", "disabled", timeout=5)
, NOT( ...
COUNT(селектор [, displayed ] [, timeout ])
Подсчёт количества элементов соответствующих селектору. Если элементы на страницы отсутствуют, то будет возвращена ошибка. Что бы проверить отсутствие элементов необходимо использовать команду NOT(“селектор”), в место выражения COUNT(“селектор”) == 0.
Аргументы:
- селектор - Селектор веб-элементов.
- displayed - Если установлен в True, то ждём отображения элементов. По умолчанию - True
- timeout - Время явного ожидания элемента. По умолчанию - 0.0
Пример:
# проверка количество строк в таблице.
"//tr")) == 100 COUNT(
JS(“скрипт” [, аргумент { аргумент } ] [, timeout ] [, sync ])
Выполнить js-скрипт асинхронно (sync = False) или синхронно (sync = True). Возвращает результат работы скрипта.
Аргументы:
- скрипт - код js скрипта.
- аргументы - аргументы передаваемые скрипту (внутри скрипта они доступны через массив arguments)
- timeout - Именованный аргумент, устанавливает тайм-аут выполнения скриптов. По умолчанию - CONFIG.WAIT_TIMEOUT
- sync - Синхронное (True) или асинхронное (False) выполнение скрипта. По умолчанию - True
Пример:
# прокрутка содержимого окна до определённой позиции
..."window.scrollBy(arguments[0], arguments[1])", 0, 1000, timeout=3)
, JS( ...
EP(селектор [, timeout ])
Указатель на веб-элемент. Может использоваться с командами которым могут быть нужны элементы (например JS)
Аргументы:
- селектор - Селектор элемента до середины которого нужно прокрутить
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# прокрутка содержимого окна до определённой позиции
..."return arguments[0].scrollHeight", EP("body"))
, JS( ...
SCROLL(селектор [, timeout ]) | SCROLL(Y [, timeout ]) | SCROLL(X, Y [, timeout ])
Прокрутка страницы.
Аргументы:
- селектор - Селектор элемента до середины которого нужно прокрутить
- X, Y - Количество пикселей для смещения вертикальной и горизонтальной прокрутки. По умолчанию - 0
- timeout - Время явного ожидания элемента. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
# Помещает центр элемента imput.name в центр видимой области страницы
"imput.name")
, SCROLL(
# Перемещает страницу на 100 пикселей вниз
100)
, SCROLL(
# Помещает элемент imput.name в верх видимой области страницы
"imput.name", WIDTH/2-WIDTH("imput.name")/2)) , SCROLL(
FRAME | FRAME(селектор { селектор } [, reset ] [, timeout ])
Команда переключает текущий контекст вебдрайвера на фрейм указанный в селекторе. Если используется несколько вложенных фреймов то необходимо передать их селекторы в соответствующем порядке. Если селектор не указан, то контекст переключается на основную страницу.
Команда полезна если необходимо активно работать с несколькими элементами внутри фрейма. Получить доступ к отдельному элементу в фрейме удобнее при помощи селектора FP (см. раздел Основы мета-языка).
Аргументы:
- селектор - Последовательность селекторов идентифицирующих каждый фрейм
- reset - Флаг указывающий на то что с начала нужно переключится на основную страницу. По умолчанию - False
- timeout - Время явного ожидания фрейма. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
"nestedframes"](
TEST["https://demoqa.com/nestedframes")
URL(
"Проверка надписи в первом фрейме"
, "#frame1")
, FRAME("body") == "Parent frame"
, ONE(
"Проверка надписи во втором фрейме"
, "iframe")
, FRAME("body") == "Child Iframe"
, ONE(
"Пример с использованием сразу двух селекторов"
, "#frame1", "iframe", reset=True)
, FRAME("body") == "Child Iframe"
, ONE( )
Файлы
CHECK_DOWNLOAD(“name” [, quality ] [, timeout ])
Проверяет факт скачивания файла. Файл считается скаченным если он появился в каталоге загрузки и его размер более 0 байт (если скачиваемый файл пуст, то для его проверки нужно указать quality=0). Если необходимо проверить валидность файла, то необходимо передать в аргумент quality значение на соответствии которому будет проверен файл.
Аргументы:
- name - имя файла
- quality - Проверяемая величина. По умолчанию - None.
- timeout - Максимальное время ожидания скачивания файла. По умолчанию - 30.0 сек.
В аргумент quality можно передать значения следующих типов: * Строка, её значение должно быть равным md5 хешу файла. * Целое положительное число, равное размеру файла в байтах. * Унарная функция. Ей передаётся путь к скаченному файлу, она должны вернуть True если файл валиден, иначе False.
Пример:
"Загрузка"](
TEST["https://demoqa.com/upload-download")
URL("#downloadButton")
, CLICK(
"Файл скачен"
, "sampleFile.jpeg")
, CHECK_DOWNLOAD(
"Проверяем размер файла"
, "sampleFile.jpeg", 4096)
, CHECK_DOWNLOAD(
"Проверяем контрольную сумму"
, "sampleFile.jpeg", "24c004606d9c7a2a2f0a4d1b69562c3e")
, CHECK_DOWNLOAD(="file"
, tags
)
import json
def test_file(path):
return json.load(open(path))["color"] == "Red"
"Пример проверки содержимого json-файла"](
TEST["https://support.oneskyapp.com/hc/en-us/articles/208047697-JSON-sample-files")
URL("example_1.json")
, CLICK("example_1.json", test_file)
, CHECK_DOWNLOAD( )
UPLOAD(селектор, path [, timeout ])
Загрузка файла на сайт.
Аргументы:
- селектор - Селектор элемента загрузки. Должен иметь тег input и атрибут file
- path - Путь к загружаемому файлу
- timeout - Время явного ожидания. По умолчанию - CONFIG.WAIT_TIMEOUT
Если в аргументе path передан относительный путь, то поиск файла будет производится относительно каталога тестового набора т.е. CONFIG.TEST_CASE_PATH.
Пример:
"Закачка"](
TEST["https://demoqa.com/upload-download")
URL(
# Абсолютный путь к файлу теста файлу теста
"#uploadFile", __file__)
, UPLOAD("#uploadedFilePath") == "C:\\fakepath\\"+os.path.basename(__file__)
, ONE(
# Файл kote.jpg в подкаталоге data текущего набора тестов
"#uploadFile", "data/kote.jpg")
, UPLOAD("#uploadedFilePath") == "C:\\fakepath\\kote.jpg"
, ONE( )
Константы
Константы это объекты содержащие какие либо сведения. Их можно использовать в выражениях на ровне с кванторами. На константы распространяется поведение квантора ONE.
DATE | DATE(“формат”)
Константа содержащая текущую дату представленную в соответствии с в заданным форматом.
Аргументы:
- формат - Строка формата даты. По умолчанию - “YYYY-MM-DD”
Пример:
"Дата теста "+DATE)
PRINT(
# Элемент содержит текущую дата
"#carrent-date") == DATE ONE(
TIME | TIME(“формат”)
Константа содержащая текущее время представленное в соответствии с в заданным форматом.
Аргументы:
- формат - Строка формата времени. По умолчанию - “hh:mm:ss.ms”
Пример:
# печатаем текущее время
"Время начала теста "+TIME) PRINT(
PAGE_URL
Константа содержащая текст ссылки на текущую страницу.
Пример:
# проверка вхождения подстроки "/news" в текущий URL
"/news" > PAGE_URL
PAGE_TITLE
Константа содержащая заголовок страницы.
Пример:
# Печатаем заголовок страницы
PRINT(PAGE_TITLE)
# Выражение проверяет вхождения подстроки "Новости" в заголовок
"Новости" > PAGE_TITLE
PAGE_SOURCE
Константа содержащая HTML код страницы.
Пример:
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
"#search"), POS_Y("#search"), WIDTH("#search"), HEIGHT("#search"))
, PRINT(POS_X( ...
Управляющие команды
Эти команды управляют привносят поведение характерное для императивных языков. По этому их не желательно использовать в тестах, но они вполне уместны в скриптах.
IF(выражение, действие_1 [, действие_2 ])
Тернарный условный оператор.
Аргументы:
- выражение - Если выражение истинно, то выполняется действие_1, а если ложно то действие_2.
- действие_1 - Команда или блок (кортеж) команд.
- действие_2 - Альтернативная команда или блок кортеж команд. По умолчанию - None
Пример:
# Напечатать URL страницы если он не соответствует регулярному выражению
...~(PAGE_URL @ r"^.*news$"), PRINT(PAGE_URL))
, IF( ...
LOOP(число_итераций, действие)
Выполнение действия заданное число раз.
Аргументы:
- число_итераций - Натуральное число указывающие количество повторений действия
- действие - Команда или блок (кортеж) команд
Пример:
# 10 раз печатает URL текущей страницы
...10, PRINT(PAGE_URL))
, LOOP( ...
WHILE(выражение, действие [, число_итераций ])
Выполнение действия пока выражение истинно.
Аргументы:
- выражение - Предикат, если значение истинно, то действие выполняется.
- действие - Команда или блок (кортеж) команд.
- число_итераций - Максимальное число итераций. Если число итераций будет превышено, то цикл завершится с ошибкой. Если равно 0, то число итераций не ограничивается. По умолчанию - 0
Пример:
# удаление данных из списка форм
..."css::div.form_list") > 0, (
, WHILE(COUNT("id::del_icon_1")
CLICK("id::del_modal_button")
, CLICK(
)) ...
STOP_TEST | STOP_TEST(выражение [, “сообщение” ])
Остановка теста. Статус теста устанавливается в STOPPED.
Аргументы:
- выражение - Предикат, если значение истинно, то тест будет пропущен.
- сообщение - Сообщение для отчётов.
Пример:
# Остановить тест если URL не соответствует регулярному выражению
...~(PAGE_URL @ r"^.*news$"), "Не тот сайт "+PAGE_URL)
, STOP_TEST( ...
SKIP_TEST | SKIP_TEST(выражение [, “сообщение” ])
Пропуск теста. Статус теста устанавливается в SKIPPED, если текущий статус выше чем SKIPPED, то он не меняется.
Аргументы:
- выражение - Предикат, если значение истинно, то тест будет пропущен.
- сообщение - Сообщение для отчётов.
Пример:
# Пропустить тест если URL не соответствует регулярному выражению
...~(PAGE_URL @ r"^.*news$"), "Не тот сайт "+PAGE_URL)
, SKIP_TEST( ...
SKIP_STEP | SKIP_STEP(выражение [, “сообщение” ])
Пропуск текущего шага. Статус теста не меняется.
Аргументы:
- выражение - Предикат, если значение истинно, то шаг будет пропущен
- сообщение - Сообщение для отчётов
Управление браузером
REFRESH | REFRESH(timeout)
Перезагружает текущую страницу.
Аргументы:
- timeout - тайм-аут загрузки страницы. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...
, REFRESH ...
BACK_PAGE | BACK_PAGE(timeout)
Перемещаемся на один шаг назад по истории браузера.
Аргументы:
- timeout - тайм-аут загрузки страницы. По умолчанию - CONFIG.WAIT_TIMEOUT
Пример:
...
, BACK_PAGE ...
FORWARD_PAGE | FORWARD_PAGE(timeout)
Перемещаемся на один шаг вперёд по истории браузера.
Аргументы:
- timeout - тайм-аут загрузки страницы. По умолчанию - CONFIG.WAIT_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
Пример:
...# Перемещение окна браузера в верхний левый угол
0, 0)
, GEOMETRY(
# Изменяем размер окна
=1024, height=768)
, GEOMETRY(width ...
NEW_WINDOW | NEW_WINDOW(“url” [, timeout ])
Открывает новое окно браузера, после чего переходит на указанный адрес или на CONFIG.BASE_URL. Возвращает время загрузки страницы.
Аргументы:
- url - Адрес страницы. По умолчанию - CONFIG.BASE_URL
- timeout - Время явного ожидания открытия окна. По умолчанию - CONFIG.WAIT_TIMEOUT
NEW_TAB | NEW_TAB(“url” [, timeout ])
Открывает новую вкладку браузера, после чего переходит на указанный адрес или на CONFIG.BASE_URL. Возвращает время загрузки страницы.
Аргументы:
- url - Адрес страницы. По умолчанию - CONFIG.BASE_URL
- timeout - Время явного ожидания открытия вкладки. По умолчанию - CONFIG.WAIT_TIMEOUT
WINDOW | WINDOW(index)
Переключится на предыдущее окно/вкладку или на окно/вкладку с указанным индексом. Индексы присваиваются с 0 в порядке открытия окон или вкладок. Для обращения к окнам с конца можно использовать отрицательные индексы. После переключения на окно оно изменяет свой индекс на последний.
Аргументы:
- index - порядковый номер окна/вкладки. По умолчанию: -2
CLOSE | CLOSE(index)
Закрывает текущие окно/вкладку или на окно/вкладку с указанным индексом. Индексы присваиваются с 0 в порядке открытия окон или вкладок. Для обращения к окнам с конца можно использовать отрицательные индексы.
Единственное окно невозможно закрыть этой командой.
Аргументы:
- index - порядковый номер окна/вкладки. По умолчанию: -1
Пример:
"browser-windows"](
TEST[# После открытия индекс основного окна - 0
"https://demoqa.com/browser-windows")
URL(
"New Tab"
, "#tabButton")
, CLICK(# Открывается окно Tab
# Индекс основного окна - 0, окна Tab - 1
"h1") == "This is a sample page"
, ONE(
, WINDOW# Переключаемся на основное окно.
# Индекс окна "Tab"- 0, основного окна - 1
"New Window"
, "#windowButton")
, CLICK(# Открывается окно Window
# Индекс окна Tab- 0, основного окна - 1, окна Window - 2
"#sampleHeading") == "This is a sample page"
, ONE(
, WINDOW# Переключаемся на основное окно.
# Индекс окна Tab- 0, окна Window - 1, основного окна - 2
"New Window Message"
, "#messageWindowButton")
, CLICK(# Открывается окно Message
# Индекс окна Tab- 0, окна Window - 1, основного окна - 2, Message -3
"body") == "Knowledge increases by sharing but not by saving. Please share this website with your friends and in your organization."
, ONE(
"Закрываем"
,
, 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
= "firefox"
, browser = "window"
, tags )
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
"auth", "1232132121", {"httpOnly": True}) , SET_COOKIE(
COOKIES | COOKIES(имя [, arg ])
Константа предоставляющая доступ к cookie на текущей странице.
Аргументы:
- имя - Имя cookie
- arg - Значение свойства cookie.
Пример:
# вывести все Cookies
, PRINT(COOKIES)
# сookie "auth" установлена
"auth" > COOKIES
,
# Проверка значения у сookie "auth"
"auth") == "1232132121"
, COOKIES(
# Проверка свойства "httpOnly" у сookie "auth"
"auth", "httpOnly") == True , COOKIES(
DEL_COOKIES | DEL_COOKIES(имя { имя })
Удаляет cookies с указанными именами, если имя не указано, то удаляет все cookies.
Аргументы:
- имя - имя cookie
Пример:
# удаляем все cookies
, DEL_COOKIES
# удаляем csrftoken
"csrftoken")
, DEL_COOKIES(
# удаляем csrftoken и auth
"csrftoken", "auth") , DEL_COOKIES(
SET_STORAGE(“key”, value)
Устанавливает значение в localStorage
Аргументы:
- key - Идентификатор данных
- value - Данные
Пример:
# Записываем имя пользователя в localStorage
"name", "Василий Пупкин") , SET_STORAGE(
GET_STORAGE(“key”)
Возвращает значение из localStorage
Аргументы:
- key - Идентификатор данных
Пример:
# Проверяем имя пользователя
"name") == "Василий Пупкин" , GET_STORAGE(
DEL_STORAGE | DEL_STORAGE(“key”, { “key” })
Удаляет данные из localStorage. Если ключ не указан, то всё хранилище очищается.
Аргументы:
- key - Идентификатор данных
Пример:
# Удаляем имя пользователя из localStorage
"name") , DEL_STORAGE(
STORAGE_KEYS
Список ключей localStorage
Пример:
# Проверяем наличие ключа "name" в localStorage
"name" > STORAGE_KEYS ,
Telegramm группа
Политика конфиденциальности
Персональные данные