Передать аргументы в кейворд Robot Framework

Содержание
Введение
Позиционные аргументы
Пример сложения двух чисел
Передача чисел как чисел
Значения по умолчанию
Пример
Переменное количество аргументов
Аргументы встроенные в имя ключевого слова
Похожие статьи

Введение

В роботе можно писать ключевые слова, которые принимают аргументы при вызове.

Если вы читали стать про RFBrowser то уже сталкивались с такими кейвордами.

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

Ключевые слова могут принимать ноль или более аргументов, а некоторые аргументы могут иметь значения по умолчанию.

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

Официальная документация

Позиционные аргументы

Большинство ключевых слов имеют определенное количество аргументов, которые всегда должны быть указаны.

В документации по ключевым словам это обозначается указанием имен аргументов, разделенных запятой, например first, second, third.

Имена аргументов на самом деле не имеют значения в этом случае, за исключением того, что они должны объяснять, что делает аргумент, но важно иметь точно такое же количество аргументов, как указано в документации.

Использование слишком малого или слишком большого количества аргументов приведет к ошибке.

В приведенном ниже тесте используются ключевые слова Create Directory и Copy File из библиотеки Operating System .

Их аргументы указаны как path и source, destination, что означает, что они принимают один и два аргумента соответственно.

Последнее ключевое слово, No Operation из библиотеки BuiltIn , не принимает аргументов.

*** Test Cases *** Example Create Directory ${TEMPDIR}/stuff Copy File ${CURDIR}/file.txt ${TEMPDIR}/stuff No Operation

Сложить два числа

Напишем RobotFramework Keyword, который будет принимать два числа и складывать их.

Проверим результат

*** Settings *** Documentation Tests passing int and float as arguments *** Variables *** *** Keywords *** Add [Arguments] ${addend1} ${addend2} ${result}= Evaluate ${addend1} + ${addend2} [Return] ${result} *** Test Cases *** Test Add Integers ${sum1}= Add 1 2 Should Be Equal As Integers ${sum1} 3 Test Add Floats ${sum2}= Add 3.5 6.2 Should Be Equal As Numbers ${sum2} 9.7 Test Add Negative Integers ${sum3}= Add -2 -3 Should Be Equal As Integers ${sum3} -5

robot args_add.robot

============================================================================== Args Add :: Tests passing int and float as arguments ============================================================================== Test Add Integers | PASS | ------------------------------------------------------------------------------ Test Add Floats | PASS | ------------------------------------------------------------------------------ Test Add Negative Integers | PASS | ------------------------------------------------------------------------------ Args Add :: Tests passing int and float as arguments | PASS | 3 tests, 3 passed, 0 failed ============================================================================== Output: /home/andrei/tests/output.xml Log: /home/andrei/tests/log.html Report: /home/andrei/tests/report.html

Про использование Evaluate читайте здесь

Обратите внимание на проверку равенства. Для целых чисел я применил Should Be Equal As Integers а для чисел с плавающей точкой Should Be Equal As Numbers

О том как использовать просто Should Be Equal читайте в следующей главе

Передача чисел как чисел

По умолчанию робот передаёт аргументы как строки.

В предыдущей главе мы передавали в кейворд число 3, но оно передавалось как строка, поэтому для сравнения приходилось преобразовывать его в целое число с помощью Shoul Be Equal As Integers.

Если бы использовался Should Be Equal результатом была бы ошибка

Test Add Integers ${sum1}= Add 1 2 Should Be Equal ${sum1} 3

Test Add Integers | FAIL | 3 (integer) != 3 (string)

Решить эту проблему можно передав число как число, заключив его в фигурные скобки

Test Add Integers ${sum1}= Add 1 2 Should Be Equal ${sum1} ${3}

Значения по умолчанию

Аргументы часто имеют значения по умолчанию, которые могут быть либо заданы, либо нет.

В документации значение по умолчанию обычно отделяется от имени аргумента знаком равенства, например, name=значение по умолчанию.

Возможно, что все аргументы имеют значения по умолчанию, но после аргументов со значениями по умолчанию не может быть никаких позиционных аргументов.

Использование значений по умолчанию проиллюстрировано приведенным ниже примером, в котором используется ключевое слово Create File , имеющее аргументы path, content=, encoding=UTF-8.

Попытка использовать его без каких-либо аргументов или более чем с тремя аргументами не сработает.

*** Test Cases *** Example Create File ${TEMPDIR}/empty.txt Create File ${TEMPDIR}/utf-8.txt Hyvä esimerkki Create File ${TEMPDIR}/iso-8859-1.txt Hyvä esimerkki ISO-8859-1

Напишем кейворд, который будет добавлять к доменному имени протокол. По умолчанию будет http:// но можно передать свой аргумент.

***Settings *** Documentation Tests Url Creation ***Variables *** ***Keywords *** Write Url [Arguments] ${domain} ${protocol}=http:// ${result}= Catenate SEPARATOR= ${protocol} ${domain} [Return] ${result} ***Test Cases *** # Передаём https:// Test HeiHei ${heihei}= Write Url heihei.ru https:// Log To Console ${heihei} Should Be Equal ${heihei} https://heihei.ru # Не передаём протокол, рассчитываем # получить дефолтный http:// Test TopBicycle ${tb}= Write Url topbicycle.ru Log To Console ${tb} Should Be Equal ${tb} http://topbicycle.ru

robot args_def_values.robot

============================================================================== Args Def Values :: Tests Url Createion ============================================================================== Test HeiHei .https://heihei.ru Test HeiHei | PASS | ------------------------------------------------------------------------------ Test TopBicycle .http://topbicycle.ru Test TopBicycle | PASS | ------------------------------------------------------------------------------ Args Def Values :: Tests Url Createion | PASS | 2 tests, 2 passed, 0 failed ============================================================================== Output: /home/andrei/tests/output.xml Log: /home/andrei/tests/log.html Report: /home/andrei/tests/report.html

Пример

***Settings *** Documentation Example that opens single page Library Browser ... enable_playwright_debug=${True} ... auto_closing_level=TEST ... retry_assertions_for=0:00:03 ***Variables *** ***Keywords *** Open Url [Arguments] ${url} ${headless}=False New Browser browser=chromium headless=${headless} New Context viewport={'width': 1920, 'height': 1080} ignoreHTTPSErrors=True New Page ${url} ***Test Cases *** Verify Title Open Url url=https://aredel.com headless=False Get Title == AREDEL.COM Close Browser

robot args.robot

robot args.robot ============================================================================== Args :: Example that opens single page ============================================================================== Verify Title | PASS | ------------------------------------------------------------------------------ Args :: Example that opens single page | PASS | 1 test, 1 passed, 0 failed ============================================================================== Output: /home/andrei/tests/output.xml Log: /home/andrei/tests/log.html Report: /home/andrei/tests/report.html

Сперва нужно указывать аргументы без значений по умолчанию.

Если первым указать аргумент у которого есть значение по умолчанию а за ним тот, у которого нет - будет ошибка

Invalid argument specification: Non-default argument after default arguments.

***Settings *** Documentation Tests Url Creation ***Variables *** ***Keywords *** Write Url [Arguments] ${protocol}=http:// ${domain} ${result}= Catenate SEPARATOR= ${protocol} ${domain} [Return] ${result} ***Test Cases *** Test HeiHei ${heihei}= Write Url https:// heihei.ru Log To Console ${heihei} Should Be Equal ${heihei} https://heihei.ru Test TopBicycle ${tb}= Write Url topbicycle.ru Log To Console ${tb} Should Be Equal ${tb} http://topbicycle.ru

robot args_def_values_err.robot

[ ERROR ] Error in file '/home/andrei/tests/args_def_values_err.robot' on line 8: Creating keyword 'Write Url' failed: Invalid argument specification: Non-default argument after default arguments. ============================================================================== Args Def Values Err :: Tests Url Creation ============================================================================== Test HeiHei | FAIL | Invalid argument specification: Non-default argument after default arguments. ------------------------------------------------------------------------------ Test TopBicycle | FAIL | Invalid argument specification: Non-default argument after default arguments. ------------------------------------------------------------------------------ Args Def Values Err :: Tests Url Creation | FAIL | 2 tests, 0 passed, 2 failed ============================================================================== Output: /home/andrei/tests/output.xml Log: /home/andrei/tests/log.html Report: /home/andrei/tests/report.html

Переменное количество аргументов

Также возможно, что ключевое слово принимает любое количество аргументов.

Эти так называемые varargs могут быть объединены с обязательными аргументами и аргументами со значениями по умолчанию, но они всегда указываются после них.

В документации у них есть звездочка перед именем аргумента, например *varargs.

Например, ключевые слова Join Paths и Remove Files из библиотеки Operating System имеют аргументы *paths и base, *parts соответственно.

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

*** Test Cases *** Example Remove Files ${TEMPDIR}/f1.txt ${TEMPDIR}/f2.txt ${TEMPDIR}/f3.txt @{paths} = Join Paths ${TEMPDIR} f1.txt f2.txt f3.txt f4.txt

Упрощенный пример применения varargs без нормальных проверок на тип данных.

*** Settings *** Documentation Example that adds with varargs Resource ../resources/add.resource Test Tags math *** Variables *** *** Keywords *** *** Test Cases *** Two Digits [Tags] add ${result}= Add Unknow Number Of Digits 2 3 Should Be Equal As Integers ${result} 5 Three Digits [Tags] add ${result}= Add Unknow Number Of Digits 2 3 4 Should Be Equal As Integers ${result} 9

*** Settings *** Documentation Arithmetic Calculations Library ../libraries/add.py *** Keywords *** Add Unknow Number Of Digits [Arguments] @{varargs} ${result}= Add Something @{varargs} [Return] ${result}

def add_something(*args): itargs = iter(args) mysum = next(itargs) if int(mysum): mysum = int(mysum) for argt in itargs: mysum += int(argt) else: raise TypeError return mysum

Аргументы встроенные в имя ключевого слова

Аргументы можно передавать прямо внутри имени ключевого слова.

Официальная документация

В предыдущем разделе объяснялось, как передавать аргументы ключевым словам, чтобы они указывались отдельно после названия ключевого слова.

В Robot Framework также есть другой подход к передаче аргументов, встраивающий их непосредственно в название ключевого слова, используемый во втором тесте ниже:

*** Test Cases *** # Обычно аргументы передаются так Normal arguments Select from list cat # Хотим передать cat внутри Embedded arguments Select cat from list

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

*** Keywords *** Select ${animal} from list Open Page Pet Selection Select Item From List animal_list ${animal} *** Test Cases *** Embedded arguments Select cat from list Select dog from list

Пример с применением встроенных аргументов в шаблонах вы можете изучить здесь

Похожие статьи
Robot Framework
Основы
Архитектура
RFBrowser
Переменные: set, reassign…
if else: Условные операторы
in: Оператор принадлежности к списку
Циклы
Перенос на новую строку
[Tags]: теги
Collections: списки, словари
JSON
Передача аргументов в кейворд
Evaluate
Поддержка Robot в PyCharm
Ошибки
Изображение баннера

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: