<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://entorb.net//wiki/index.php?action=history&amp;feed=atom&amp;title=Robot_Framework</id>
	<title>Robot Framework - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://entorb.net//wiki/index.php?action=history&amp;feed=atom&amp;title=Robot_Framework"/>
	<link rel="alternate" type="text/html" href="https://entorb.net//wiki/index.php?title=Robot_Framework&amp;action=history"/>
	<updated>2026-05-06T10:29:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://entorb.net//wiki/index.php?title=Robot_Framework&amp;diff=4885&amp;oldid=prev</id>
		<title>Torben at 20:39, 30 October 2024</title>
		<link rel="alternate" type="text/html" href="https://entorb.net//wiki/index.php?title=Robot_Framework&amp;diff=4885&amp;oldid=prev"/>
		<updated>2024-10-30T20:39:33Z</updated>

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