Robot Framework
Basics
Keywords are separated by (at least) 2 spaces or (at least) 1 tab
Library Documentation:
Variables
Variables, see RobotFrameworkUserGuide -> variables Robot Framework has its own variables that can be used as scalars, lists or dictionaries using syntax ${SCALAR}, @{LIST} and &{DICT}, respectively. In addition to this, environment variables can be used directly with syntax %{ENV_VAR}.
${STR} This is a String @{LIST} ['robot', 'secret'] &{DICT} {'name': 'robot', 'password': 'secret'} &{DICT} name=menke pass=password
(an '=' can be used, but only 1 space before it, so better just leave it out)
Strings
${NAME} Robot Framework ${VERSION} 2.0 ${ROBOT} ${NAME} ${VERSION} ${EXAMPLE} This value is joined together with a space ${MULTILINE} SEPARATOR=\n First line ... Second line Third line
Lists
@{NAMES} Matti Teppo @{NAMES2} @{NAMES} Seppo @{NOTHING} @{MANY} one two three four ... five six seven
Dictionaries
&{USER 1} name=Matti address=xxx phone=123 &{USER 2} name=Teppo address=yyy phone=456 &{MANY} first=1 second=${2} ${3}=third &{EVEN MORE} &{MANY} first=override empty= ... =empty key\=here=value
accessing
${USER 1}[name]
Boolean
$var ${TRUE} $var ${FALSE}
Join Variables to String (in Varaible section only, in keyword section use Catenate)
${text1} Generate Random String 1 [UPPER] ${text2} Generate Random String 5 [NUMBERS] ${text} = ${text1} - ${text2} # or ${text} Catenate SEPARATOR=- ${text1} ${text2}
Strings vs Integers
Numbers entered in .robot code are strings by default. Data fetched from database might be of integer type. To ensure integer comparison, use Should Be Equal As Integers
Should Be Equal As Integers ${queryResults[0][0]} 3 Should Be Equal As Numbers ${queryResults[0][0]} 3 Should Be Equal As Strings ${queryResults[0][0]} 3
Sting -> Int
Convert To Integer 123 Convert To Number 42.512 1 -> 42.5
Int -> String
str (3)
Suite Setup and Teardown
Suite Setup Run Keywords ... Open Browser ${URL_LOGIN} ${BROWSER} ... AND Maximize Browser Window Suite Teardown Close Browser Test Setup Go To ${URL_LOGIN} Test Teardown Go To ${URL_LOGOUT}
Libraries
Buildin
Variables in Keyword Section
${text} Set Variable A B C D
same as
${text} Catenate Connecting using A B C D
?
If Else
Run Keyword If (or die / fail at else case)
${found} = Run Keyword And Return Status Element Should Be Visible ${ALL_PAGES.BUTTON_LOGOUT} Run Keyword If ${found} ... Run Keywords ... Click Button ${ALL_PAGES.BUTTON_LOGOUT} ... AND Sleep 1s ... ELSE ... log no logout button found Run Keyword If '${arg_data_source}' == 'system1' ... Fetch From System1 ... ELSE IF '${arg_mat_data_source}' == 'system2' ... Fetch From System2 ... ELSE IF '${arg_mat_data_source}' == 'manual' ... Manual Enter Data ... ELSE ... Fail msg=argument arg_mat_data_source=${arg_mat_data_source} is unknown Run Keyword If '${found}' == '${FALSE}' Run Keyword If ${found1} and ${found2}
Set Variable If / Else
${DATABASE.port} Set Variable If ... '${arg_test_data.host}'=='prod' 1234 ... '${arg_test_data.host}'=='test' 5678 ... 12345
For Loop
FOR ${index} IN RANGE 0 ${arg_num_checkboxes} Click Element id=rad-${index}-isOk
While Loop
Wait Until Keyword Succeeds 12 secs 2 secs ... Check If Exists In Database SELECT id FROM db.table WHERE order = '${orderNo}'
Random
${text1} Generate Random String 1 [UPPER] ${text2} Generate Random String 4 [NUMBERS] ${text2} Generate Random String 4 [NUMBERS] ${text} Catenate SEPARATOR=- ${text1} ${text2} ${text3}
Random element from list
${text} Evaluate random.choice(@{MYLIST}) random
Calculate / Evaluate
${text} Get Text ${LOCATOR} ${count} Convert To Integer ${text} ${count} Evaluate ${count} + 10
String
Remove String
${number_only_digits} Remove String ${number} -
Replace String
${number_only_digits} Replace String ${number} - _
Selenium
Open Browser ${URL} ${BROWSER} Maximize Browser Window Go To <URL> Sleep 1s ${url} = Get Location or ${url} = Execute Javascript return window.location.href;
Get Text
${issue_id} Get Text ${PAGE_PDF_VIEW.TEXT_ISSUE_ID}
Send Enter Key to Input field
Press Keys ${field} ENTER # (for the old version of Press Key \\13 = ASCII code for enter key was to be used)
Checks
# Wait Until Location Contains /some/path timeout=10 s ${field} Set Variable ${BUTTON_LOGOUT} Wait Until Page Contains Element ${field} timeout=10 s Set Focus To Element ${field} Click Button ${field} # above is much better than: # Wait Until Element Is Visible ${BUTTON_LOGOUT} # also handy ${url} Get Location Should End With ${url} /login Page Should Contain <Some Text>
Click Button ${BTN_SUBMIT} Wait Until Page Does Not Contain ${BTN_SUBMIT}
Wait and Click
Wait And Click [Arguments] ${loc} Wait Until Page Contains Element ${loc} Set Focus To Element ${loc} Wait Until Element Is Visible ${loc} Click Element ${loc} Wait And Enter Text [Arguments] ${loc} ${text} Wait Until Page Contains Element ${loc} Set Focus To Element ${loc} Check If Element Is Visible And Enabled ${loc} Input Text ${loc} ${text} Wait And Get Text [Arguments] ${loc} Wait Until Page Contains Element ${loc} Set Focus To Element ${loc} Wait Until Element Is Visible ${loc} ${text} Get Text ${loc} [Return] ${text}
Scolling / Set Focus
Input and Clicking does not work if element is not visible, use this to scroll to the element
Set Focus To Element ${FIELD}
If the element just moved out of the visual page, a
Sleep 0.25 s Set Focus To Element ${FIELD}
before setting the focus helps
Date and Time
Library DateTime ... ${date_now} Get Current Date Set Focus To Element ${PAGE_CREATE.INPUT_ERROR_DESCR} Input Text ${PAGE_CREATE.INPUT_ERROR_DESCR} Robotframework Test at ${date_now}