From 7f4fd97e1cf032239f9907b485660019a03058a1 Mon Sep 17 00:00:00 2001 From: mikahanninen Date: Wed, 3 Apr 2024 10:14:04 +0000 Subject: [PATCH] deploy: e1ae0c0b6ba30b02968ee652d4ae0ad0de1f45b9 --- .doctrees/environment.pickle | Bin 1141353 -> 1141353 bytes .doctrees/libraries/http/python.doctree | Bin 309637 -> 309637 bytes .doctrees/packages.doctree | Bin 14639 -> 14037 bytes .doctrees/releasenotes.doctree | Bin 997222 -> 996620 bytes _sources/packages.rst.txt | 4 - latest.json | 142 ++++++++++++------------ libdoc/RPA_Archive.html | 2 +- libdoc/RPA_Assistant.html | 2 +- libdoc/RPA_Browser.html | 2 +- libdoc/RPA_Browser_Playwright.html | 2 +- libdoc/RPA_Browser_Selenium.html | 2 +- libdoc/RPA_Browser_common.html | 2 +- libdoc/RPA_Calendar.html | 2 +- libdoc/RPA_Cloud_AWS.html | 2 +- libdoc/RPA_Cloud_Azure.html | 2 +- libdoc/RPA_Cloud_Google.html | 2 +- libdoc/RPA_Crypto.html | 2 +- libdoc/RPA_Database.html | 2 +- libdoc/RPA_Desktop.html | 2 +- libdoc/RPA_Desktop_Clipboard.html | 2 +- libdoc/RPA_Desktop_OperatingSystem.html | 2 +- libdoc/RPA_Desktop_Windows.html | 2 +- libdoc/RPA_DocumentAI.html | 2 +- libdoc/RPA_DocumentAI_Base64AI.html | 2 +- libdoc/RPA_DocumentAI_DocumentAI.html | 2 +- libdoc/RPA_DocumentAI_Nanonets.html | 2 +- libdoc/RPA_Email_Exchange.html | 2 +- libdoc/RPA_Email_ImapSmtp.html | 2 +- libdoc/RPA_Excel_Application.html | 2 +- libdoc/RPA_Excel_Files.html | 2 +- libdoc/RPA_FTP.html | 2 +- libdoc/RPA_FileSystem.html | 2 +- libdoc/RPA_HTTP.html | 2 +- libdoc/RPA_Hubspot.html | 2 +- libdoc/RPA_Images.html | 2 +- libdoc/RPA_JSON.html | 2 +- libdoc/RPA_JavaAccessBridge.html | 2 +- libdoc/RPA_MFA.html | 2 +- libdoc/RPA_MSGraph.html | 2 +- libdoc/RPA_Netsuite.html | 2 +- libdoc/RPA_Notifier.html | 2 +- libdoc/RPA_OpenAI.html | 2 +- libdoc/RPA_Outlook_Application.html | 2 +- libdoc/RPA_PDF.html | 2 +- libdoc/RPA_Robocloud_Items.html | 2 +- libdoc/RPA_Robocloud_Secrets.html | 2 +- libdoc/RPA_Robocorp_Process.html | 2 +- libdoc/RPA_Robocorp_Storage.html | 2 +- libdoc/RPA_Robocorp_Vault.html | 2 +- libdoc/RPA_Robocorp_WorkItems.html | 2 +- libdoc/RPA_RobotLogListener.html | 2 +- libdoc/RPA_SAP.html | 2 +- libdoc/RPA_Salesforce.html | 2 +- libdoc/RPA_Slack.html | 2 +- libdoc/RPA_Smartsheet.html | 2 +- libdoc/RPA_Tables.html | 2 +- libdoc/RPA_Tasks.html | 2 +- libdoc/RPA_Twitter.html | 2 +- libdoc/RPA_Windows.html | 2 +- libdoc/RPA_Word_Application.html | 2 +- libdoc/RPA_version.html | 2 +- libraries/http/python.html | 12 +- packages.html | 1 - python.json | 2 +- releasenotes.html | 1 - 65 files changed, 133 insertions(+), 139 deletions(-) diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index 94eab6b353202c991ebde437e1c9faf9529bb932..0fe840c36411c125900f6da2c7889dbcad654c52 100644 GIT binary patch delta 64381 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 Oc`CtY`wmUkmi-^PHeYxE delta 64764 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
yo2y!0)gwX~MM{l<9@weqow8vB6ha-&zP6 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 I8QSXq1MX8I0ssI2 diff --git a/.doctrees/libraries/http/python.doctree b/.doctrees/libraries/http/python.doctree index 993a54e3d6fe3b7009de18e37b9b9e51763ae5fb..36e861a1434d881f0b87fe8cb3a9747fd7818505 100644 GIT binary patch delta 1280 zcmZquEY$j0Xu}Z+b$8bgbsYuufKV{y;_BlX;tCQ7337A>Gdx@!UDRVI$13Y=7MJ8> zR3%EoW-qCoQba1%FjZqB))~_uGBSH@-f#XzP>m>es88nekeptS%xE%M&1(s94x0Sl zOM*C+n{~Wd3^j;zNUY{$M|I)N*)?AnN%QQ5y7vMkd)8T0k8`Sq~GU{+aUmln@C*% delta 1280 zcmZquEY$j0Xu}Z+^^hP(XIFI{1$7TsM;8$7?ivE3TwHxzL%2Hj7L0 zF{%=!VY8RiPAMXlYM81q5$lZU4;h)gHt#q8BB(}`JJcuhc}Pw#NMr diff --git a/.doctrees/packages.doctree b/.doctrees/packages.doctree index 81d8ffc4a209297b7013d7bbf59ec35c04f1fff4..99b4a6e4096da0b23b8b4d15043cdcc1840393a3 100644 GIT binary patch delta 327 zcmZ2qbTyZ?fpzLBvyH5ca+@D0*f27ln=Gr;IN4jlZu1?b>5P+Ql(;8flGm9$SJ`#) zdlin!^OWo+cPeOaPEgHYWMX2PET?2T`M;X?=ldGLL5U zWG{8Q$@={AlmBb+Z2q8G%Q%@^lY4T7cH`uBO}owJI3ji;WoTzGW-w={WvFLpc(aryWqkz-Yc@`)ouZM!n!%RA9y=xL7t`d+<{d2J%$O#M rK*c1pvVi&$dsuT)%TjZucr*5}lvEa^PRSCSyx&5a=?l~3I~KtJLDFjg delta 476 zcmZvWOG^S_7=``DTi~EUX>`+Z8c~_Fq-G+hSroL1ZnQ3tvOWh(QiNO-SuR?*i8Hl{ z=odu9w`|jQ7CcBLl zmjFIE(Y9y(y>0oxdy$RIIKRO>5`#TI`Yoc6C-jMG8~)RCVM>@oRg~Kumh>kHdPNtC z(lF}&Srh2Mm8c;elHm?G7!$S#b|n`iv52~)v8o6{29T9Xh=ny451kNRe5u3U1{E_r3|| z3p7NN)TdK?N~4Y65s;lMGknOA8&-=8Hc|#Z_D=5M9DlTVtriP{+0PEVo1Lu; zJ&MY?tyogLUXPhYOU8i_p?2z^&NV~twxXz<+7kaP#9JAsm$9h&{IcmQj(oO|+ejHS UT(M=+yD4Kn+&F3;I96A`052es;Q#;t diff --git a/.doctrees/releasenotes.doctree b/.doctrees/releasenotes.doctree index 98464ff666c7a89937ff2000f6a0650ba4a6dbd4..6386907244dc13d14c9917d182caefcc9fd00b89 100644 GIT binary patch literal 996620 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ν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 z%0A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

X^7GLtpFDIA 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

Archive is a library for operating with ZIP and TAR packages.

\n

Examples

\n
\n*** Settings ***\nLibrary  RPA.Archive\n\n*** Tasks ***\nCreating a ZIP archive\n   Archive Folder With ZIP   ${CURDIR}${/}tasks  tasks.zip   recursive=True  include=*.robot  exclude=/.*\n   @{files}                  List Archive             tasks.zip\n   FOR  ${file}  IN  ${files}\n      Log  ${file}\n   END\n   Add To Archive            .${/}..${/}missing.robot  tasks.zip\n   &{info}                   Get Archive Info\n
\n
\nfrom RPA.Archive import Archive\n\nlib = Archive()\nlib.archive_folder_with_tar('./tasks', 'tasks.tar', recursive=True)\nfiles = lib.list_archive('tasks.tar')\nfor file in files:\n   print(file)\n
\n\n", "version": "", - "generated": "2024-04-03 09:58:10", + "generated": "2024-04-03 10:12:16", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -462,7 +462,7 @@ "name": "RPA.Assistant", "doc": "
\n

The Assistant library provides a way to display information to a user\nand request input while a robot is running. It allows building processes\nthat require human interaction. Also it offers capabilities of running\nother robots inside the current one and determine what to display to the\nuser based on his previous responses.

\n

It is not included in the rpaframework package, so in order to use it\nyou have to add rpaframework-assistant with the desired version in your\nconda.yaml file

\n

Some examples of use-cases could be the following:

\n
    \n
  • Displaying generated files after an execution is finished
  • \n
  • Displaying dynamic and user-friendly error messages
  • \n
  • Requesting passwords or other personal information
  • \n
  • Running Keywords based on user's actions
  • \n
  • Displaying dynamic content based on user's actions
  • \n
  • Automating based on files created by the user
  • \n
\n

Workflow

\n

The library is used to create dialogs, i.e. windows, that can be composed\non-the-fly based on the current state of the execution.

\n

The content of the dialog is defined by calling relevant keywords\nsuch as Add text or Add file input. When the dialog is opened\nthe content is generated based on the previous keywords.

\n

Depending on the way the dialog is started, the execution will either\nblock or continue while the dialog is open. During this time the user\ncan freely edit any possible input fields or handle other tasks.

\n

After the user has successfully submitted the dialog, any possible\nentered input will be returned as a result. The user also has the option\nto abort by closing the dialog window forcefully.

\n

Results

\n

Each input field has a required name argument that controls what\nthe value will be called in the result object. Each input name should be\nunique, and must not be called submit as that is reserved for the submit\nbutton value.

\n

A result object is a Robot Framework DotDict, where each key\nis the name of the input field and the value is what the user entered.\nThe data type of each field depends on the input. For instance,\na text input will have a string, a checkbox will have a boolean, and\na file input will have a list of paths.

\n

If the user closed the window before submitting or there was an internal\nerror, the results object returned by Run Dialog or Ask User won't have a "submit"\nkey.

\n

Layouting

\n

By default elements are added to the assistant dialog from top to bottom, with a bit\nof margin around each element to add spaciousness. This margin is added as a\nContainer you can manually use Open Container to override the default\ncontainer. You can use it to set smaller margins.

\n

You can combine layouting elements with each other. Layouting elements need to be\nclosed with the corresponding Close keyword. (So Open Row and then\nClose Row.)

\n

Open Row can be used to layout elements in the same row.

\n

Open Column can be used to layout elements in columns.

\n

Open Stack and multiple Open Container's inside it can be used to set\npositions like Center, Topleft, BottomRight, or coordinate tuples likes (0, 0),\n(100, 100) and such.

\n

Open Container can bse used for absolute positioning inside a Stack, or anywhere\nfor setting background color or margins and paddings.

\n

Open Navbar can be used to make a navigation bar that will stay at the top of\nthe dialog. Its contents won't be cleared when.

\n

Examples

\n
\n*** Keywords ***\nSuccess dialog\n    Add icon      Success\n    Add heading   Your orders have been processed\n    Add files     *.txt\n    Run dialog    title=Success\n\nFailure dialog\n    Add icon      Failure\n    Add heading   There was an error\n    Add text      The assistant failed to login to the Enterprise portal\n    Add link      https://robocorp.com/docs    label=Troubleshooting guide\n    Run dialog    title=Failure\n\nLarge dialog\n    Add heading    A real chonker   size=large\n    Add image      fat-cat.jpeg\n    Run dialog     title=Large    height=1024    width=1024\n\nConfirmation dialog\n    Add icon      Warning\n    Add heading   Delete user ${username}?\n    Add submit buttons    buttons=No,Yes    default=Yes\n    ${result}=    Run dialog\n    IF   $result.submit == "Yes"\n        Delete user    ${username}\n    END\n\nInput form dialog\n    Add heading       Send feedback\n    Add text input    email    label=E-mail address\n    Add text input    message\n    ...    label=Feedback\n    ...    placeholder=Enter feedback here\n    ...    maximum_rows=5\n    ${result}=    Run dialog\n    Send feedback message    ${result.email}  ${result.message}\n
\n
\ndef success_dialog():\n    assistant = Assistant()\n    assistant.add_icon("success")\n    assistant.add_heading("Your orders have been processed")\n    assistant.add_files("*.txt")\n    assistant.run_dialog(title="Success")\n\ndef failure_dialog():\n    assistant = Assistant()\n    assistant.add_icon("failure")\n    assistant.add_heading("There was an error")\n    assistant.add_text("The assistant failed to login to the Enterprise portal")\n    assistant.add_link("https://robocorp.com/docs", label="Troubleshooting guide")\n    assistant.add_files("*.txt")\n    assistant.run_dialog(title="Failure")\n\ndef large_dialog():\n    assistant = Assistant()\n    assistant.add_heading("A real chonker", size="large")\n    assistant.add_image("fat-cat.jpeg")\n    assistant.run_dialog(title="Large", height=1024, width=1024)\n\ndef confirmation_dialog():\n    assistant = Assistant()\n    assistant.add_icon("warning")\n    assistant.add_heading("Delete user ${username}?")\n    assistant.add_submit_buttons(buttons="No, Yes", default="Yes")\n    result = assistant.run_dialog()\n    if result.submit == "Yes":\n        delete_user(username)\n\ndef input_from_dialog():\n    assistant = Assistant()\n    assistant.add_heading("Send feedback")\n    assistant.add_text_input("email", label="E-mail address")\n    assistant.add_text_input("message", label="Feedback", placeholder="Enter feedback here", maximum_rows=5)\n    assistant.add_submit_buttons("Submit", default="Submit")\n    result = assistant.run_dialog()\n    send_feedback_message(result.email, result.message)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:11", + "generated": "2024-04-03 10:12:17", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -2671,7 +2671,7 @@ "name": "RPA.Browser", "doc": "

SeleniumLibrary is a web testing library for Robot Framework.

\n

This document explains how to use keywords provided by SeleniumLibrary. For information about installation, support, and more, please visit the project pages. For more information about Robot Framework, see http://robotframework.org.

\n

SeleniumLibrary uses the Selenium WebDriver modules internally to control a web browser. See http://seleniumhq.org for more information about Selenium in general and SeleniumLibrary README.rst Browser drivers chapter for more details about WebDriver binary installation.

\n\n

Locating elements

\n

All keywords in SeleniumLibrary that need to interact with an element on a web page take an argument typically named locator that specifies how to find the element. Most often the locator is given as a string using the locator syntax described below, but using WebElements is possible too.

\n

Locator syntax

\n

SeleniumLibrary supports finding elements based on different strategies such as the element id, XPath expressions, or CSS selectors. The strategy can either be explicitly specified with a prefix or the strategy can be implicit.

\n

Default locator strategy

\n

By default, locators are considered to use the keyword specific default locator strategy. All keywords support finding elements based on id and name attributes, but some keywords support additional attributes or other values that make sense in their context. For example, Click Link supports the href attribute and the link text and addition to the normal id and name.

\n

Examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Click Elementexample# Match based on id or name.
Click Linkexample# Match also based on link text and href.
Click Buttonexample# Match based on id, name or value.
\n

If a locator accidentally starts with a prefix recognized as explicit locator strategy or implicit XPath strategy, it is possible to use the explicit default prefix to enable the default strategy.

\n

Examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Click Elementname:foo# Find element with name foo.
Click Elementdefault:name:foo# Use default strategy with value name:foo.
Click Element//foo# Find element using XPath //foo.
Click Elementdefault: //foo# Use default strategy with value //foo.
\n

Explicit locator strategy

\n

The explicit locator strategy is specified with a prefix using either syntax strategy:value or strategy=value. The former syntax is preferred because the latter is identical to Robot Framework's named argument syntax and that can cause problems. Spaces around the separator are ignored, so id:foo, id: foo and id : foo are all equivalent.

\n

Locator strategies that are supported by default are listed in the table below. In addition to them, it is possible to register custom locators.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
StrategyMatch based onExample
idElement id.id:example
namename attribute.name:example
identifierEither id or name.identifier:example
classElement class.class:example
tagTag name.tag:div
xpathXPath expression.xpath://div[@id=\"example\"]
cssCSS selector.css:div#example
domDOM expression.dom:document.images[5]
linkExact text a link has.link:The example
partial linkPartial link text.partial link:he ex
sizzleSizzle selector deprecated.sizzle:div.example
dataElement data-* attributedata:id:my_id
jqueryjQuery expression.jquery:div.example
defaultKeyword specific default behavior.default:example
\n

See the Default locator strategy section below for more information about how the default strategy works. Using the explicit default prefix is only necessary if the locator value itself accidentally matches some of the explicit strategies.

\n

Different locator strategies have different pros and cons. Using ids, either explicitly like id:foo or by using the default locator strategy simply like foo, is recommended when possible, because the syntax is simple and locating elements by id is fast for browsers. If an element does not have an id or the id is not stable, other solutions need to be used. If an element has a unique tag name or class, using tag, class or css strategy like tag:h1, class:example or css:h1.example is often an easy solution. In more complex cases using XPath expressions is typically the best approach. They are very powerful but a downside is that they can also get complex.

\n

Examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Click Elementid:foo# Element with id 'foo'.
Click Elementcss:div#foo h1# h1 element under div with id 'foo'.
Click Elementxpath: //div[@id=\"foo\"]//h1# Same as the above using XPath, not CSS.
Click Elementxpath: //*[contains(text(), \"example\")]# Element containing text 'example'.
\n

NOTE:

\n
    \n
  • The strategy:value syntax is only supported by SeleniumLibrary 3.0 and newer.
  • \n
  • Using the sizzle strategy or its alias jquery requires that the system under test contains the jQuery library.
  • \n
  • Prior to SeleniumLibrary 3.0, table related keywords only supported xpath, css and sizzle/jquery strategies.
  • \n
  • data strategy is conveniance locator that will construct xpath from the parameters. If you have element like <div data-automation=\"automation-id-2\">, you locate the element via data:automation:automation-id-2. This feature was added in SeleniumLibrary 5.2.0
  • \n
\n

Implicit XPath strategy

\n

If the locator starts with // or multiple opening parenthesis in front of the //, the locator is considered to be an XPath expression. In other words, using //div is equivalent to using explicit xpath://div and ((//div)) is equivalent to using explicit xpath:((//div))

\n

Examples:

\n\n\n\n\n\n\n\n\n\n
Click Element//div[@id=\"foo\"]//h1
Click Element(//div)[2]
\n

The support for the (// prefix is new in SeleniumLibrary 3.0. Supporting multiple opening parenthesis is new in SeleniumLibrary 5.0.

\n

Chaining locators

\n

It is possible chain multiple locators together as single locator. Each chained locator must start with locator strategy. Chained locators must be separated with single space, two greater than characters and followed with space. It is also possible mix different locator strategies, example css or xpath. Also a list can also be used to specify multiple locators. This is useful, is some part of locator would match as the locator separator but it should not. Or if there is need to existing WebElement as locator.

\n

Although all locators support chaining, some locator strategies do not abey the chaining. This is because some locator strategies use JavaScript to find elements and JavaScript is executed for the whole browser context and not for the element found be the previous locator. Chaining is supported by locator strategies which are based on Selenium API, like xpath or css, but example chaining is not supported by sizzle or `jquery

\n

Examples:

\n\n\n\n\n\n\n
Click Elementcss:.bar >> xpath://a# To find a link which is present after an element with class \"bar\"
\n

List examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
${locator_list} =Create Listcss:div#div_idxpath://*[text(), \" >> \"]
Page Should Contain Element${locator_list}
${element} =Get WebElementxpath://*[text(), \" >> \"]
${locator_list} =Create Listcss:div#div_id${element}
Page Should Contain Element${locator_list}
\n

Chaining locators in new in SeleniumLibrary 5.0

\n

Using WebElements

\n

In addition to specifying a locator as a string, it is possible to use Selenium's WebElement objects. This requires first getting a WebElement, for example, by using the Get WebElement keyword.

\n\n\n\n\n\n\n\n\n\n\n\n
${elem} =Get WebElementid:example
Click Element${elem}
\n

Custom locators

\n

If more complex lookups are required than what is provided through the default locators, custom lookup strategies can be created. Using custom locators is a two part process. First, create a keyword that returns a WebElement that should be acted on:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Custom Locator Strategy[Arguments]${browser}${locator}${tag}${constraints}
${element}=Execute Javascriptreturn window.document.getElementById('${locator}');
[Return]${element}
\n

This keyword is a reimplementation of the basic functionality of the id locator where ${browser} is a reference to a WebDriver instance and ${locator} is the name of the locator strategy. To use this locator, it must first be registered by using the Add Location Strategy keyword:

\n\n\n\n\n\n\n
Add Location StrategycustomCustom Locator Strategy
\n

The first argument of Add Location Strategy specifies the name of the strategy and it must be unique. After registering the strategy, the usage is the same as with other locators:

\n\n\n\n\n\n
Click Elementcustom:example
\n

See the Add Location Strategy keyword for more details.

\n

Browser and Window

\n

There is different conceptual meaning when SeleniumLibrary talks about windows or browsers. This chapter explains those differences.

\n

Browser

\n

When Open Browser or Create WebDriver keyword is called, it will create a new Selenium WebDriver instance by using the Selenium WebDriver API. In SeleniumLibrary terms, a new browser is created. It is possible to start multiple independent browsers (Selenium Webdriver instances) at the same time, by calling Open Browser or Create WebDriver multiple times. These browsers are usually independent of each other and do not share data like cookies, sessions or profiles. Typically when the browser starts, it creates a single window which is shown to the user.

\n

Window

\n

Windows are the part of a browser that loads the web site and presents it to the user. All content of the site is the content of the window. Windows are children of a browser. In SeleniumLibrary browser is a synonym for WebDriver instance. One browser may have multiple windows. Windows can appear as tabs, as separate windows or pop-ups with different position and size. Windows belonging to the same browser typically share the sessions detail, like cookies. If there is a need to separate sessions detail, example login with two different users, two browsers (Selenium WebDriver instances) must be created. New windows can be opened example by the application under test or by example Execute Javascript keyword:

\n
\nExecute Javascript    window.open()    # Opens a new window with location about:blank\n
\n

The example below opens multiple browsers and windows, to demonstrate how the different keywords can be used to interact with browsers, and windows attached to these browsers.

\n

Structure:

\n
\nBrowserA\n           Window 1  (location=https://robotframework.org/)\n           Window 2  (location=https://robocon.io/)\n           Window 3  (location=https://github.com/robotframework/)\n\nBrowserB\n           Window 1  (location=https://github.com/)\n
\n

Example:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Open Browserhttps://robotframework.org${BROWSER}alias=BrowserA# BrowserA with first window is opened.
Execute Javascriptwindow.open()# In BrowserA second window is opened.
Switch Windowlocator=NEW# Switched to second window in BrowserA
Go Tohttps://robocon.io# Second window navigates to robocon site.
Execute Javascriptwindow.open()# In BrowserA third window is opened.
${handle}Switch Windowlocator=NEW# Switched to third window in BrowserA
Go Tohttps://github.com/robotframework/# Third windows goes to robot framework github site.
Open Browserhttps://github.com${BROWSER}alias=BrowserB# BrowserB with first windows is opened.
${location}Get Location# ${location} is: https://www.github.com
Switch Window${handle}browser=BrowserA# BrowserA second windows is selected.
${location}Get Location# ${location} = https://robocon.io/
@{locations 1}Get Locations# By default, lists locations under the currectly active browser (BrowserA).
@{locations 2}Get Locationsbrowser=ALL# By using browser=ALL argument keyword list all locations from all browsers.
\n

The above example, @{locations 1} contains the following items: https://robotframework.org/, https://robocon.io/ and https://github.com/robotframework/'. The @{locations 2} contains the following items: https://robotframework.org/, https://robocon.io/, https://github.com/robotframework/' and 'https://github.com/.

\n

Timeouts, waits, and delays

\n

This section discusses different ways how to wait for elements to appear on web pages and to slow down execution speed otherwise. It also explains the time format that can be used when setting various timeouts, waits, and delays.

\n

Timeout

\n

SeleniumLibrary contains various keywords that have an optional timeout argument that specifies how long these keywords should wait for certain events or actions. These keywords include, for example, Wait ... keywords and keywords related to alerts. Additionally Execute Async Javascript. Although it does not have timeout, argument, uses a timeout to define how long asynchronous JavaScript can run.

\n

The default timeout these keywords use can be set globally either by using the Set Selenium Timeout keyword or with the timeout argument when importing the library. If no default timeout is set globally, the default is 5 seconds. If None is specified for the timeout argument in the keywords, the default is used. See time format below for supported timeout syntax.

\n

Implicit wait

\n

Implicit wait specifies the maximum time how long Selenium waits when searching for elements. It can be set by using the Set Selenium Implicit Wait keyword or with the implicit_wait argument when importing the library. See Selenium documentation for more information about this functionality.

\n

See time format below for supported syntax.

\n

Page load

\n

Page load timeout is the amount of time to wait for page load to complete until a timeout exception is raised.

\n

The default page load timeout can be set globally when importing the library with the page_load_timeout argument or by using the Set Selenium Page Load Timeout keyword.

\n

See time format below for supported timeout syntax.

\n

Support for page load is new in SeleniumLibrary 6.1

\n

Selenium speed

\n

Selenium execution speed can be slowed down globally by using Set Selenium speed keyword. This functionality is designed to be used for demonstrating or debugging purposes. Using it to make sure that elements appear on a page is not a good idea. The above-explained timeouts and waits should be used instead.

\n

See time format below for supported syntax.

\n

Time format

\n

All timeouts and waits can be given as numbers considered seconds (e.g. 0.5 or 42) or in Robot Framework's time syntax (e.g. 1.5 seconds or 1 min 30 s). For more information about the time syntax see the Robot Framework User Guide.

\n

Run-on-failure functionality

\n

SeleniumLibrary has a handy feature that it can automatically execute a keyword if any of its own keywords fails. By default, it uses the Capture Page Screenshot keyword, but this can be changed either by using the Register Keyword To Run On Failure keyword or with the run_on_failure argument when importing the library. It is possible to use any keyword from any imported library or resource file.

\n

The run-on-failure functionality can be disabled by using a special value NOTHING or anything considered false (see Boolean arguments) such as NONE.

\n

Boolean arguments

\n

Starting from 5.0 SeleniumLibrary relies on Robot Framework to perform the boolean conversion based on keyword arguments type hint. More details in Robot Framework user guide

\n

Please note SeleniumLibrary 3 and 4 did have own custom methods to covert arguments to boolean values.

\n

EventFiringWebDriver

\n

The SeleniumLibrary offers support for EventFiringWebDriver. See the Selenium and SeleniumLibrary EventFiringWebDriver support documentation for further details.

\n

EventFiringWebDriver is new in SeleniumLibrary 4.0

\n

Thread support

\n

SeleniumLibrary is not thread-safe. This is mainly due because the underlying Selenium tool is not thread-safe within one browser/driver instance. Because of the limitation in the Selenium side, the keywords or the API provided by the SeleniumLibrary is not thread-safe.

\n

Plugins

\n

SeleniumLibrary offers plugins as a way to modify and add library keywords and modify some of the internal functionality without creating a new library or hacking the source code. See plugin API documentation for further details.

\n

Plugin API is new SeleniumLibrary 4.0

\n

Auto closing browser

\n

By default, the browser instances created during a task execution are closed at the end of the task. This can be prevented with the auto_close parameter when importing the library.

\n

The value of the parameter needs to be set to False or any object evaluated as false (see Boolean arguments).

", "version": "6.2.0", - "generated": "2024-04-03 09:58:11", + "generated": "2024-04-03 10:12:17", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -11991,7 +11991,7 @@ "name": "RPA.Browser.Playwright", "doc": "

Browser library is a browser automation library for Robot Framework.

\n

This is the keyword documentation for Browser library. For information about installation, support, and more please visit the project pages. For more information about Robot Framework itself, see robotframework.org.

\n

Browser library uses Playwright Node module to automate Chromium, Firefox and WebKit with a single library.

\n

Table of contents

\n\n

Browser, Context and Page

\n

Browser library works with three different layers that build on each other: Browser, Context and Page.

\n

Browsers

\n

A browser can be started with one of the three different engines Chromium, Firefox or Webkit.

\n

Supported Browsers

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
BrowserBrowser with this engine
chromiumGoogle Chrome, Microsoft Edge (since 2020), Opera
firefoxMozilla Firefox
webkitApple Safari, Mail, AppStore on MacOS and iOS
\n

Since Playwright comes with a pack of builtin binaries for all browsers, no additional drivers e.g. geckodriver are needed.

\n

All these browsers that cover more than 85% of the world wide used browsers, can be tested on Windows, Linux and MacOS. There is no need for dedicated machines anymore.

\n

A browser process is started headless (without a GUI) by default. Run New Browser with specified arguments if a browser with a GUI is requested or if a proxy has to be configured. A browser process can contain several contexts.

\n

Contexts

\n

A context corresponds to a set of independent incognito pages in a browser that share cookies, sessions or profile settings. Pages in two separate contexts do not share cookies, sessions or profile settings. Compared to Selenium, these do not require their own browser process. To get a clean environment a test can just open a new context. Due to this new independent browser sessions can be opened with Robot Framework Browser about 10 times faster than with Selenium by just opening a New Context within the opened browser.

\n

To make pages in the same suite share state, use the same context by opening the context with New Context on suite setup.

\n

The context layer is useful e.g. for testing different user sessions on the same webpage without opening a whole new browser context. Contexts can also have detailed configurations, such as geo-location, language settings, the viewport size or color scheme. Contexts do also support http credentials to be set, so that basic authentication can also be tested. To be able to download files within the test, the acceptDownloads argument must be set to True in New Context keyword. A context can contain different pages.

\n

Pages

\n

A page does contain the content of the loaded web site and has a browsing history. Pages and browser tabs are the same.

\n

Typical usage could be:

\n
\n* Test Cases *\nStarting a browser with a page\n    New Browser    chromium    headless=false\n    New Context    viewport={'width': 1920, 'height': 1080}\n    New Page       https://marketsquare.github.io/robotframework-browser/Browser.html\n    Get Title      ==    Browser\n
\n

The Open Browser keyword opens a new browser, a new context and a new page. This keyword is useful for quick experiments or debugging sessions.

\n

When a New Page is called without an open browser, New Browser and New Context are executed with default values first.

\n

Each Browser, Context and Page has a unique ID with which they can be addressed. A full catalog of what is open can be received by Get Browser Catalog as a dictionary.

\n

Automatic page and context closing

\n

Controls when contexts and pages are closed during the test execution.

\n

If automatic closing level is TEST, contexts and pages that are created during a single test are automatically closed when the test ends. Contexts and pages that are created during suite setup are closed when the suite teardown ends.

\n

If automatic closing level is SUITE, all contexts and pages that are created during the test suite are closed when the suite teardown ends.

\n

If automatic closing level is MANUAL, nothing is closed automatically while the test execution is ongoing.

\n

All browsers are automatically closed, always and regardless of the automatic closing level at the end of the test execution. This will also close all remaining pages and contexts.

\n

Automatic closing can be configured or switched off with the auto_closing_level library import parameter.

\n

See: Importing

\n

Finding elements

\n

All keywords in the library that need to interact with an element on a web page take an argument typically named selector that specifies how to find the element. Keywords can find elements with strict mode. If strict mode is true and locator finds multiple elements from the page, keyword will fail. If keyword finds one element, keyword does not fail because of strict mode. If strict mode is false, keyword does not fail if selector points many elements. Strict mode is enabled by default, but can be changed in library importing or Set Strict Mode keyword. Keyword documentation states if keyword uses strict mode. If keyword does not state that strict mode is used, then strict mode is not applied for the keyword. For more details, see Playwright strict documentation.

\n

Selector strategies that are supported by default are listed in the table below.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
StrategyMatch based onExample
cssCSS selector.css=.class > \\#login_btn
xpathXPath expression.xpath=//input[@id=\"login_btn\"]
textBrowser text engine.text=Login
idElement ID Attribute.id=login_btn
\n

CSS Selectors can also be recorded with Record selector keyword.

\n

Explicit Selector Strategy

\n

The explicit selector strategy is specified with a prefix using syntax strategy=value. Spaces around the separator are ignored, so css=foo, css= foo and css = foo are all equivalent.

\n

Implicit Selector Strategy

\n

The default selector strategy is css.

\n

If selector does not contain one of the know explicit selector strategies, it is assumed to contain css selector.

\n

Selectors that are starting with // or .. are considered as xpath selectors.

\n

Selectors that are in quotes are considered as text selectors.

\n

Examples:

\n
\n# CSS selectors are default.\nClick  span > button.some_class         # This is equivalent\nClick  css=span > button.some_class     # to this.\n\n# // or .. leads to xpath selector strategy\nClick  //span/button[@class=\"some_class\"]\nClick  xpath=//span/button[@class=\"some_class\"]\n\n# \"text\" in quotes leads to exact text selector strategy\nClick  \"Login\"\nClick  text=\"Login\"\n
\n

CSS

\n

As written before, the default selector strategy is css. See css selector for more information.

\n

Any malformed selector not starting with // or .. nor starting and ending with a quote is assumed to be a css selector.

\n

Note that # is a comment character in Robot Framework syntax and needs to be escaped like \\# to work as a css ID selector.

\n

Examples:

\n
\nClick  span > button.some_class\nGet Text  \\#username_field  ==  George\n
\n

XPath

\n

XPath engine is equivalent to Document.evaluate. Example: xpath=//html/body//span[text()=\"Hello World\"].

\n

Malformed selector starting with // or .. is assumed to be an xpath selector. For example, //html/body is converted to xpath=//html/body. More examples are displayed in Examples.

\n

Note that xpath does not pierce shadow_roots.

\n

Text

\n

Text engine finds an element that contains a text node with the passed text. For example, Click text=Login clicks on a login button, and Wait For Elements State text=\"lazy loaded text\" waits for the \"lazy loaded text\" to appear in the page.

\n

Text engine finds fields based on their labels in text inserting keywords.

\n

Malformed selector starting and ending with a quote (either \" or ') is assumed to be a text selector. For example, Click \"Login\" is converted to Click text=\"Login\". Be aware that these leads to exact matches only! More examples are displayed in Examples.

\n

Insensitive match

\n

By default, the match is case-insensitive, ignores leading/trailing whitespace and searches for a substring. This means text= Login matches <button>Button loGIN (click me)</button>.

\n

Exact match

\n

Text body can be escaped with single or double quotes for precise matching, insisting on exact match, including specified whitespace and case. This means text=\"Login \" will only match <button>Login </button> with exactly one space after \"Login\". Quoted text follows the usual escaping rules, e.g. use \\\" to escape double quote in a double-quoted string: text=\"foo\\\"bar\".

\n

RegEx

\n

Text body can also be a JavaScript-like regex wrapped in / symbols. This means text=/^hello .*!$/i or text=/^Hello .*!$/ will match <span>Hello Peter Parker!</span> with any name after Hello, ending with !. The first one flagged with i for case-insensitive. See https://regex101.com for more information about RegEx.

\n

Button and Submit Values

\n

Input elements of the type button and submit are rendered with their value as text, and text engine finds them. For example, text=Login matches <input type=button value=\"Login\">.

\n

Cascaded selector syntax

\n

Browser library supports the same selector strategies as the underlying Playwright node module: xpath, css, id and text. The strategy can either be explicitly specified with a prefix or the strategy can be implicit.

\n

A major advantage of Browser is that multiple selector engines can be used within one selector. It is possible to mix XPath, CSS and Text selectors while selecting a single element.

\n

Selectors are strings that consists of one or more clauses separated by >> token, e.g. clause1 >> clause2 >> clause3. When multiple clauses are present, next one is queried relative to the previous one's result. Browser library supports concatenation of different selectors separated by >>.

\n

For example:

\n
\nHighlight Elements    \"Hello\" >> ../.. >> .select_button\nHighlight Elements    text=Hello >> xpath=../.. >> css=.select_button\n
\n

Each clause contains a selector engine name and selector body, e.g. engine=body. Here engine is one of the supported engines (e.g. css or a custom one). Selector body follows the format of the particular engine, e.g. for css engine it should be a css selector. Body format is assumed to ignore leading and trailing white spaces, so that extra whitespace can be added for readability. If the selector engine needs to include >> in the body, it should be escaped inside a string to not be confused with clause separator, e.g. text=\"some >> text\".

\n

Selector engine name can be prefixed with * to capture an element that matches the particular clause instead of the last one. For example, css=article >> text=Hello captures the element with the text Hello, and *css=article >> text=Hello (note the *) captures the article element that contains some element with the text Hello.

\n

For convenience, selectors in the wrong format are heuristically converted to the right format. See Implicit Selector Strategy

\n

Examples

\n
\n# queries 'div' css selector\nGet Element    css=div\n\n# queries '//html/body/div' xpath selector\nGet Element    //html/body/div\n\n# queries '\"foo\"' text selector\nGet Element    text=foo\n\n# queries 'span' css selector inside the result of '//html/body/div' xpath selector\nGet Element    xpath=//html/body/div >> css=span\n\n# converted to 'css=div'\nGet Element    div\n\n# converted to 'xpath=//html/body/div'\nGet Element    //html/body/div\n\n# converted to 'text=\"foo\"'\nGet Element    \"foo\"\n\n# queries the div element of every 2nd span element inside an element with the id foo\nGet Element    \\#foo >> css=span:nth-child(2n+1) >> div\nGet Element    id=foo >> css=span:nth-child(2n+1) >> div\n
\n

Be aware that using # as a starting character in Robot Framework would be interpreted as comment. Due to that fact a #id must be escaped as \\#id.

\n

Frames

\n

By default, selector chains do not cross frame boundaries. It means that a simple CSS selector is not able to select an element located inside an iframe or a frameset. For this use case, there is a special selector >>> which can be used to combine a selector for the frame and a selector for an element inside a frame.

\n

Given this simple pseudo html snippet:

\n
\n<iframe id=\"iframe\" src=\"src.html\">\n  #document\n    <!DOCTYPE html>\n    <html>\n      <head></head>\n      <body>\n        <button id=\"btn\">Click Me</button>\n      </body>\n    </html>\n</iframe>\n
\n

Here's a keyword call that clicks the button inside the frame.

\n
\nClick   id=iframe >>> id=btn\n
\n

The selectors on the left and right side of >>> can be any valid selectors. The selector clause directly before the frame opener >>> must select the frame element. Frame selection is the only place where Browser Library modifies the selector, as explained in above. In all cases, the library does not alter the selector in any way, instead it is passed as is to the Playwright side.

\n

WebComponents and Shadow DOM

\n

Playwright and so also Browser are able to do automatic piercing of Shadow DOMs and therefore are the best automation technology when working with WebComponents.

\n

Also other technologies claim that they can handle Shadow DOM and Web Components. However, none of them do pierce shadow roots automatically, which may be inconvenient when working with Shadow DOM and Web Components.

\n

For that reason, the css engine pierces shadow roots. More specifically, every Descendant combinator pierces an arbitrary number of open shadow roots, including the implicit descendant combinator at the start of the selector.

\n

That means, it is not necessary to select each shadow host, open its shadow root and select the next shadow host until you reach the element that should be controlled.

\n

CSS:light

\n

css:light engine is equivalent to Document.querySelector and behaves according to the CSS spec. However, it does not pierce shadow roots.

\n

css engine first searches for elements in the light dom in the iteration order, and then recursively inside open shadow roots in the iteration order. It does not search inside closed shadow roots or iframes.

\n

Examples:

\n
\n<article>\n  <div>In the light dom</div>\n  <div slot='myslot'>In the light dom, but goes into the shadow slot</div>\n  <open mode shadow root>\n      <div class='in-the-shadow'>\n          <span class='content'>\n              In the shadow dom\n              <open mode shadow root>\n                  <li id='target'>Deep in the shadow</li>\n              </open mode shadow root>\n          </span>\n      </div>\n      <slot name='myslot'></slot>\n  </open mode shadow root>\n</article>\n
\n

Note that <open mode shadow root> is not an html element, but rather a shadow root created with element.attachShadow({mode: 'open'}).

\n
    \n
  • Both \"css=article div\" and \"css:light=article div\" match the first <div>In the light dom</div>.
  • \n
  • Both \"css=article > div\" and \"css:light=article > div\" match two div elements that are direct children of the article.
  • \n
  • \"css=article .in-the-shadow\" matches the <div class='in-the-shadow'>, piercing the shadow root, while \"css:light=article .in-the-shadow\" does not match anything.
  • \n
  • \"css:light=article div > span\" does not match anything, because both light-dom div elements do not contain a span.
  • \n
  • \"css=article div > span\" matches the <span class='content'>, piercing the shadow root.
  • \n
  • \"css=article > .in-the-shadow\" does not match anything, because <div class='in-the-shadow'> is not a direct child of article
  • \n
  • \"css:light=article > .in-the-shadow\" does not match anything.
  • \n
  • \"css=article li#target\" matches the <li id='target'>Deep in the shadow</li>, piercing two shadow roots.
  • \n
\n

text:light

\n

text engine open pierces shadow roots similarly to css, while text:light does not. Text engine first searches for elements in the light dom in the iteration order, and then recursively inside open shadow roots in the iteration order. It does not search inside closed shadow roots or iframes.

\n

id, data-testid, data-test-id, data-test and their :light counterparts

\n

Attribute engines are selecting based on the corresponding attribute value. For example: data-test-id=foo is equivalent to css=[data-test-id=\"foo\"], and id:light=foo is equivalent to css:light=[id=\"foo\"].

\n

Element reference syntax

\n

It is possible to get a reference to a Locator by using Get Element and Get Elements keywords. Keywords do not save reference to an element in the HTML document, instead it saves reference to a Playwright Locator. In nutshell Locator captures the logic of how to retrieve that element from the page. Each time an action is performed, the locator re-searches the elements in the page. This reference can be used as a first part of a selector by using a special selector syntax element=. like this:

\n
\n${ref}=    Get Element    .some_class\n           Click          ${ref} >> .some_child     # Locator searches an element from the page.\n           Click          ${ref} >> .other_child    # Locator searches again an element from the page.\n
\n

The .some_child and .other_child selectors in the example are relative to the element referenced by ${ref}. Please note that frame piercing is not possible with element reference.

\n

Assertions

\n

Keywords that accept arguments assertion_operator <AssertionOperator> and assertion_expected can optionally assert that a specified condition holds. Keywords will return the value even when the assertion is performed by the keyword.

\n

Assert will retry and fail only after a specified timeout. See Importing and retry_assertions_for (default is 1 second) for configuring this timeout.

\n

Currently supported assertion operators are:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperatorAlternative OperatorsDescriptionValidate Equivalent
==equal, equals, should beChecks if returned value is equal to expected value.value == expected
!=inequal, should not beChecks if returned value is not equal to expected value.value != expected
>greater thanChecks if returned value is greater than expected value.value > expected
>=Checks if returned value is greater than or equal to expected value.value >= expected
<less thanChecks if returned value is less than expected value.value < expected
<=Checks if returned value is less than or equal to expected value.value <= expected
*=containsChecks if returned value contains expected value as substring.expected in value
not containsChecks if returned value does not contain expected value as substring.expected in value
^=should start with, startsChecks if returned value starts with expected value.re.search(f\"^{expected}\", value)
$=should end with, endsChecks if returned value ends with expected value.re.search(f\"{expected}$\", value)
matchesChecks if given RegEx matches minimum once in returned value.re.search(expected, value)
validateChecks if given Python expression evaluates to True.
evaluatethenWhen using this operator, the keyword does return the evaluated Python expression.
\n

Currently supported formatters for assertions are:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
FormatterDescription
normalize spacesSubstitutes multiple spaces to single space from the value
stripRemoves spaces from the beginning and end of the value
case insensitiveConverts value to lower case before comparing
apply to expectedApplies rules also for the expected value
\n

Formatters are applied to the value before assertion is performed and keywords returns a value where rule is applied. Formatter is only applied to the value which keyword returns and not all rules are valid for all assertion operators. If apply to expected formatter is defined, then formatters are then formatter are also applied to expected value.

\n

By default, keywords will provide an error message if an assertion fails. Default error messages can be overwritten with a message argument. The message argument accepts {value}, {value_type}, {expected} and {expected_type} format options. The {value} is the value returned by the keyword and the {expected} is the expected value defined by the user, usually the value in the assertion_expected argument. The {value_type} and {expected_type} are the type definitions from {value} and {expected} arguments. In similar fashion as Python type returns type definition. Assertions will retry until timeout has expired if they do not pass.

\n

The assertion assertion_expected value is not converted by the library and is used as is. Therefore when assertion is made, the assertion_expected argument value and value returned the keyword must have the same type. If types are not the same, assertion will fail. Example Get Text always returns a string and has to be compared with a string, even the returned value might look like a number.

\n

Other Keywords have other specific types they return. Get Element Count always returns an integer. Get Bounding Box and Get Viewport Size can be filtered. They return a dictionary without a filter and a number when filtered. These Keywords do automatic conversion for the expected value if a number is returned.

\n

* < less or greater > With Strings* Comparisons of strings with greater than or less than compares each character, starting from 0 regarding where it stands in the code page. Example: A < Z, Z < a, ac < dc It does never compare the length of elements. Neither lists nor strings. The comparison stops at the first character that is different. Examples: `'abcde' < 'abd', '100.000' < '2' In Python 3 and therefore also in Browser it is not possible to compare numbers with strings with a greater or less operator. On keywords that return numbers, the given expected value is automatically converted to a number before comparison.

\n

The getters Get Page State and Get Browser Catalog return a dictionary. Values of the dictionary can directly asserted. Pay attention of possible types because they are evaluated in Python. For example:

\n
\nGet Page State    validate    2020 >= value['year']                     # Comparison of numbers\nGet Page State    validate    \"IMPORTANT MESSAGE!\" == value['message']  # Comparison of strings\n
\n

The 'then' or 'evaluate' closure

\n

Keywords that accept arguments assertion_operator and assertion_expected can optionally also use then or evaluate closure to modify the returned value with BuiltIn Evaluate. Actual value can be accessed with value.

\n

For example Get Title then 'TITLE: '+value. See Builtin Evaluating expressions for more info on the syntax.

\n

Examples

\n
\n# Keyword    Selector                    Key        Assertion Operator    Assertion Expected\nGet Title                                           equal                 Page Title\nGet Title                                           ^=                    Page\nGet Style    //*[@id=\"div-element\"]      width      >                     100\nGet Title                                           matches               \\\\w+\\\\s\\\\w+\nGet Title                                           validate              value == \"Login Page\"\nGet Title                                           evaluate              value if value == \"some value\" else \"something else\"\n
\n

Implicit waiting

\n

Browser library and Playwright have many mechanisms to help in waiting for elements. Playwright will auto-wait before performing actions on elements. Please see Auto-waiting on Playwright documentation for more information.

\n

On top of Playwright auto-waiting Browser assertions will wait and retry for specified time before failing any Assertions. Time is specified in Browser library initialization with retry_assertions_for.

\n

Browser library also includes explicit waiting keywords such as Wait for Elements State if more control for waiting is needed.

\n

Experimental: Re-using same node process

\n

Browser library integrated nodejs and python. The NodeJS side can be also executed as a standalone process. Browser libraries running on the same machine can talk to that instead of starting new node processes. This can speed execution when running tests parallel. To start node side run on the directory when the Browser package is PLAYWRIGHT_BROWSERS_PATH=0 node Browser/wrapper/index.js PORT.

\n

PORT is the port you want to use for the node process. To execute tests then with pabot for example do ROBOT_FRAMEWORK_BROWSER_NODE_PORT=PORT pabot ...

\n

Experimental: Provide parameters to node process

\n

Browser library is integrated with NodeJSand and Python. Browser library starts a node process, to communicate Playwright API in NodeJS side. It is possible to provide parameters for the started node process by defining ROBOT_FRAMEWORK_BROWSER_NODE_DEBUG_OPTIONS environment variable, before starting the test execution. Example: ROBOT_FRAMEWORK_BROWSER_NODE_DEBUG_OPTIONS=--inspect;robot path/to/tests. There can be multiple arguments defined in the environment variable and arguments must be separated with comma.

\n

Scope Setting

\n

Some keywords which manipulates library settings have a scope argument. With that scope argument one can set the \"live time\" of that setting. Available Scopes are: Global, Suite and Test/Task See Scope. Is a scope finished, this scoped setting, like timeout, will no longer be used.

\n

Live Times:

\n
    \n
  • A Global scope will live forever until it is overwritten by another Global scope. Or locally temporarily overridden by a more narrow scope.
  • \n
  • A Suite scope will locally override the Global scope and live until the end of the Suite within it is set, or if it is overwritten by a later setting with Global or same scope. Children suite does inherit the setting from the parent suite but also may have its own local Suite setting that then will be inherited to its children suites.
  • \n
  • A Test or Task scope will be inherited from its parent suite but when set, lives until the end of that particular test or task.
  • \n
\n

A new set higher order scope will always remove the lower order scope which may be in charge. So the setting of a Suite scope from a test, will set that scope to the robot file suite where that test is and removes the Test scope that may have been in place.

\n

Extending Browser library with a JavaScript module

\n

Browser library can be extended with JavaScript. The module must be in CommonJS format that Node.js uses. You can translate your ES6 module to Node.js CommonJS style with Babel. Many other languages can be also translated to modules that can be used from Node.js. For example TypeScript, PureScript and ClojureScript just to mention few.

\n
\nasync function myGoToKeyword(url, args, page, logger, playwright) {\n  logger(args.toString())\n  playwright.coolNewFeature()\n  return await page.goto(url);\n}\n
\n

Functions can contain any number of arguments and arguments may have default values.

\n

There are some reserved arguments that are not accessible from Robot Framework side. They are injected to the function if they are in the arguments:

\n

page: the playwright Page object.

\n

args: the rest of values from Robot Framework keyword call *args.

\n

logger: callback function that takes strings as arguments and writes them to robot log. Can be called multiple times.

\n

playwright: playwright module (* from 'playwright'). Useful for integrating with Playwright features that Browser library doesn't support with it's own keywords. API docs

\n

also argument name self can not be used.

\n

Example module.js

\n
\nasync function myGoToKeyword(pageUrl, page) {\n  await page.goto(pageUrl);\n  return await page.title();\n}\nexports.__esModule = true;\nexports.myGoToKeyword = myGoToKeyword;\n
\n

Example Robot Framework side

\n
\n* Settings *\nLibrary   Browser  jsextension=${CURDIR}/module.js\n\n* Test Cases *\nHello\n  New Page\n  ${title}=  myGoToKeyword  https://playwright.dev\n  Should be equal  ${title}  Playwright\n
\n

Also selector syntax can be extended with a custom selector using a js module

\n

Example module keyword for custom selector registering

\n
\nasync function registerMySelector(playwright) {\nplaywright.selectors.register(\"myselector\", () => ({\n   // Returns the first element matching given selector in the root's subtree.\n   query(root, selector) {\n      return root.querySelector(a[data-title=\"${selector}\"]);\n    },\n\n    // Returns all elements matching given selector in the root's subtree.\n    queryAll(root, selector) {\n      return Array.from(root.querySelectorAll(a[data-title=\"${selector}\"]));\n    }\n}));\nreturn 1;\n}\nexports.__esModule = true;\nexports.registerMySelector = registerMySelector;\n
\n

Plugins

\n

Browser library offers plugins as a way to modify and add library keywords and modify some of the internal functionality without creating a new library or hacking the source code. See plugin API documentation for further details.

\n

Automatic headless detection is supported when opening a new browser.

", "version": "17.5.2", - "generated": "2024-04-03 09:58:11", + "generated": "2024-04-03 10:12:18", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -24053,7 +24053,7 @@ "name": "RPA.Browser.Selenium", "doc": "

SeleniumLibrary is a web testing library for Robot Framework.

\n

This document explains how to use keywords provided by SeleniumLibrary. For information about installation, support, and more, please visit the project pages. For more information about Robot Framework, see http://robotframework.org.

\n

SeleniumLibrary uses the Selenium WebDriver modules internally to control a web browser. See http://seleniumhq.org for more information about Selenium in general and SeleniumLibrary README.rst Browser drivers chapter for more details about WebDriver binary installation.

\n\n

Locating elements

\n

All keywords in SeleniumLibrary that need to interact with an element on a web page take an argument typically named locator that specifies how to find the element. Most often the locator is given as a string using the locator syntax described below, but using WebElements is possible too.

\n

Locator syntax

\n

SeleniumLibrary supports finding elements based on different strategies such as the element id, XPath expressions, or CSS selectors. The strategy can either be explicitly specified with a prefix or the strategy can be implicit.

\n

Default locator strategy

\n

By default, locators are considered to use the keyword specific default locator strategy. All keywords support finding elements based on id and name attributes, but some keywords support additional attributes or other values that make sense in their context. For example, Click Link supports the href attribute and the link text and addition to the normal id and name.

\n

Examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Click Elementexample# Match based on id or name.
Click Linkexample# Match also based on link text and href.
Click Buttonexample# Match based on id, name or value.
\n

If a locator accidentally starts with a prefix recognized as explicit locator strategy or implicit XPath strategy, it is possible to use the explicit default prefix to enable the default strategy.

\n

Examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Click Elementname:foo# Find element with name foo.
Click Elementdefault:name:foo# Use default strategy with value name:foo.
Click Element//foo# Find element using XPath //foo.
Click Elementdefault: //foo# Use default strategy with value //foo.
\n

Explicit locator strategy

\n

The explicit locator strategy is specified with a prefix using either syntax strategy:value or strategy=value. The former syntax is preferred because the latter is identical to Robot Framework's named argument syntax and that can cause problems. Spaces around the separator are ignored, so id:foo, id: foo and id : foo are all equivalent.

\n

Locator strategies that are supported by default are listed in the table below. In addition to them, it is possible to register custom locators.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
StrategyMatch based onExample
idElement id.id:example
namename attribute.name:example
identifierEither id or name.identifier:example
classElement class.class:example
tagTag name.tag:div
xpathXPath expression.xpath://div[@id=\"example\"]
cssCSS selector.css:div#example
domDOM expression.dom:document.images[5]
linkExact text a link has.link:The example
partial linkPartial link text.partial link:he ex
sizzleSizzle selector deprecated.sizzle:div.example
dataElement data-* attributedata:id:my_id
jqueryjQuery expression.jquery:div.example
defaultKeyword specific default behavior.default:example
\n

See the Default locator strategy section below for more information about how the default strategy works. Using the explicit default prefix is only necessary if the locator value itself accidentally matches some of the explicit strategies.

\n

Different locator strategies have different pros and cons. Using ids, either explicitly like id:foo or by using the default locator strategy simply like foo, is recommended when possible, because the syntax is simple and locating elements by id is fast for browsers. If an element does not have an id or the id is not stable, other solutions need to be used. If an element has a unique tag name or class, using tag, class or css strategy like tag:h1, class:example or css:h1.example is often an easy solution. In more complex cases using XPath expressions is typically the best approach. They are very powerful but a downside is that they can also get complex.

\n

Examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Click Elementid:foo# Element with id 'foo'.
Click Elementcss:div#foo h1# h1 element under div with id 'foo'.
Click Elementxpath: //div[@id=\"foo\"]//h1# Same as the above using XPath, not CSS.
Click Elementxpath: //*[contains(text(), \"example\")]# Element containing text 'example'.
\n

NOTE:

\n
    \n
  • The strategy:value syntax is only supported by SeleniumLibrary 3.0 and newer.
  • \n
  • Using the sizzle strategy or its alias jquery requires that the system under test contains the jQuery library.
  • \n
  • Prior to SeleniumLibrary 3.0, table related keywords only supported xpath, css and sizzle/jquery strategies.
  • \n
  • data strategy is conveniance locator that will construct xpath from the parameters. If you have element like <div data-automation=\"automation-id-2\">, you locate the element via data:automation:automation-id-2. This feature was added in SeleniumLibrary 5.2.0
  • \n
\n

Implicit XPath strategy

\n

If the locator starts with // or multiple opening parenthesis in front of the //, the locator is considered to be an XPath expression. In other words, using //div is equivalent to using explicit xpath://div and ((//div)) is equivalent to using explicit xpath:((//div))

\n

Examples:

\n\n\n\n\n\n\n\n\n\n
Click Element//div[@id=\"foo\"]//h1
Click Element(//div)[2]
\n

The support for the (// prefix is new in SeleniumLibrary 3.0. Supporting multiple opening parenthesis is new in SeleniumLibrary 5.0.

\n

Chaining locators

\n

It is possible chain multiple locators together as single locator. Each chained locator must start with locator strategy. Chained locators must be separated with single space, two greater than characters and followed with space. It is also possible mix different locator strategies, example css or xpath. Also a list can also be used to specify multiple locators. This is useful, is some part of locator would match as the locator separator but it should not. Or if there is need to existing WebElement as locator.

\n

Although all locators support chaining, some locator strategies do not abey the chaining. This is because some locator strategies use JavaScript to find elements and JavaScript is executed for the whole browser context and not for the element found be the previous locator. Chaining is supported by locator strategies which are based on Selenium API, like xpath or css, but example chaining is not supported by sizzle or `jquery

\n

Examples:

\n\n\n\n\n\n\n
Click Elementcss:.bar >> xpath://a# To find a link which is present after an element with class \"bar\"
\n

List examples:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
${locator_list} =Create Listcss:div#div_idxpath://*[text(), \" >> \"]
Page Should Contain Element${locator_list}
${element} =Get WebElementxpath://*[text(), \" >> \"]
${locator_list} =Create Listcss:div#div_id${element}
Page Should Contain Element${locator_list}
\n

Chaining locators in new in SeleniumLibrary 5.0

\n

Using WebElements

\n

In addition to specifying a locator as a string, it is possible to use Selenium's WebElement objects. This requires first getting a WebElement, for example, by using the Get WebElement keyword.

\n\n\n\n\n\n\n\n\n\n\n\n
${elem} =Get WebElementid:example
Click Element${elem}
\n

Custom locators

\n

If more complex lookups are required than what is provided through the default locators, custom lookup strategies can be created. Using custom locators is a two part process. First, create a keyword that returns a WebElement that should be acted on:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Custom Locator Strategy[Arguments]${browser}${locator}${tag}${constraints}
${element}=Execute Javascriptreturn window.document.getElementById('${locator}');
[Return]${element}
\n

This keyword is a reimplementation of the basic functionality of the id locator where ${browser} is a reference to a WebDriver instance and ${locator} is the name of the locator strategy. To use this locator, it must first be registered by using the Add Location Strategy keyword:

\n\n\n\n\n\n\n
Add Location StrategycustomCustom Locator Strategy
\n

The first argument of Add Location Strategy specifies the name of the strategy and it must be unique. After registering the strategy, the usage is the same as with other locators:

\n\n\n\n\n\n
Click Elementcustom:example
\n

See the Add Location Strategy keyword for more details.

\n

Browser and Window

\n

There is different conceptual meaning when SeleniumLibrary talks about windows or browsers. This chapter explains those differences.

\n

Browser

\n

When Open Browser or Create WebDriver keyword is called, it will create a new Selenium WebDriver instance by using the Selenium WebDriver API. In SeleniumLibrary terms, a new browser is created. It is possible to start multiple independent browsers (Selenium Webdriver instances) at the same time, by calling Open Browser or Create WebDriver multiple times. These browsers are usually independent of each other and do not share data like cookies, sessions or profiles. Typically when the browser starts, it creates a single window which is shown to the user.

\n

Window

\n

Windows are the part of a browser that loads the web site and presents it to the user. All content of the site is the content of the window. Windows are children of a browser. In SeleniumLibrary browser is a synonym for WebDriver instance. One browser may have multiple windows. Windows can appear as tabs, as separate windows or pop-ups with different position and size. Windows belonging to the same browser typically share the sessions detail, like cookies. If there is a need to separate sessions detail, example login with two different users, two browsers (Selenium WebDriver instances) must be created. New windows can be opened example by the application under test or by example Execute Javascript keyword:

\n
\nExecute Javascript    window.open()    # Opens a new window with location about:blank\n
\n

The example below opens multiple browsers and windows, to demonstrate how the different keywords can be used to interact with browsers, and windows attached to these browsers.

\n

Structure:

\n
\nBrowserA\n           Window 1  (location=https://robotframework.org/)\n           Window 2  (location=https://robocon.io/)\n           Window 3  (location=https://github.com/robotframework/)\n\nBrowserB\n           Window 1  (location=https://github.com/)\n
\n

Example:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Open Browserhttps://robotframework.org${BROWSER}alias=BrowserA# BrowserA with first window is opened.
Execute Javascriptwindow.open()# In BrowserA second window is opened.
Switch Windowlocator=NEW# Switched to second window in BrowserA
Go Tohttps://robocon.io# Second window navigates to robocon site.
Execute Javascriptwindow.open()# In BrowserA third window is opened.
${handle}Switch Windowlocator=NEW# Switched to third window in BrowserA
Go Tohttps://github.com/robotframework/# Third windows goes to robot framework github site.
Open Browserhttps://github.com${BROWSER}alias=BrowserB# BrowserB with first windows is opened.
${location}Get Location# ${location} is: https://www.github.com
Switch Window${handle}browser=BrowserA# BrowserA second windows is selected.
${location}Get Location# ${location} = https://robocon.io/
@{locations 1}Get Locations# By default, lists locations under the currectly active browser (BrowserA).
@{locations 2}Get Locationsbrowser=ALL# By using browser=ALL argument keyword list all locations from all browsers.
\n

The above example, @{locations 1} contains the following items: https://robotframework.org/, https://robocon.io/ and https://github.com/robotframework/'. The @{locations 2} contains the following items: https://robotframework.org/, https://robocon.io/, https://github.com/robotframework/' and 'https://github.com/.

\n

Timeouts, waits, and delays

\n

This section discusses different ways how to wait for elements to appear on web pages and to slow down execution speed otherwise. It also explains the time format that can be used when setting various timeouts, waits, and delays.

\n

Timeout

\n

SeleniumLibrary contains various keywords that have an optional timeout argument that specifies how long these keywords should wait for certain events or actions. These keywords include, for example, Wait ... keywords and keywords related to alerts. Additionally Execute Async Javascript. Although it does not have timeout, argument, uses a timeout to define how long asynchronous JavaScript can run.

\n

The default timeout these keywords use can be set globally either by using the Set Selenium Timeout keyword or with the timeout argument when importing the library. If no default timeout is set globally, the default is 5 seconds. If None is specified for the timeout argument in the keywords, the default is used. See time format below for supported timeout syntax.

\n

Implicit wait

\n

Implicit wait specifies the maximum time how long Selenium waits when searching for elements. It can be set by using the Set Selenium Implicit Wait keyword or with the implicit_wait argument when importing the library. See Selenium documentation for more information about this functionality.

\n

See time format below for supported syntax.

\n

Page load

\n

Page load timeout is the amount of time to wait for page load to complete until a timeout exception is raised.

\n

The default page load timeout can be set globally when importing the library with the page_load_timeout argument or by using the Set Selenium Page Load Timeout keyword.

\n

See time format below for supported timeout syntax.

\n

Support for page load is new in SeleniumLibrary 6.1

\n

Selenium speed

\n

Selenium execution speed can be slowed down globally by using Set Selenium speed keyword. This functionality is designed to be used for demonstrating or debugging purposes. Using it to make sure that elements appear on a page is not a good idea. The above-explained timeouts and waits should be used instead.

\n

See time format below for supported syntax.

\n

Time format

\n

All timeouts and waits can be given as numbers considered seconds (e.g. 0.5 or 42) or in Robot Framework's time syntax (e.g. 1.5 seconds or 1 min 30 s). For more information about the time syntax see the Robot Framework User Guide.

\n

Run-on-failure functionality

\n

SeleniumLibrary has a handy feature that it can automatically execute a keyword if any of its own keywords fails. By default, it uses the Capture Page Screenshot keyword, but this can be changed either by using the Register Keyword To Run On Failure keyword or with the run_on_failure argument when importing the library. It is possible to use any keyword from any imported library or resource file.

\n

The run-on-failure functionality can be disabled by using a special value NOTHING or anything considered false (see Boolean arguments) such as NONE.

\n

Boolean arguments

\n

Starting from 5.0 SeleniumLibrary relies on Robot Framework to perform the boolean conversion based on keyword arguments type hint. More details in Robot Framework user guide

\n

Please note SeleniumLibrary 3 and 4 did have own custom methods to covert arguments to boolean values.

\n

EventFiringWebDriver

\n

The SeleniumLibrary offers support for EventFiringWebDriver. See the Selenium and SeleniumLibrary EventFiringWebDriver support documentation for further details.

\n

EventFiringWebDriver is new in SeleniumLibrary 4.0

\n

Thread support

\n

SeleniumLibrary is not thread-safe. This is mainly due because the underlying Selenium tool is not thread-safe within one browser/driver instance. Because of the limitation in the Selenium side, the keywords or the API provided by the SeleniumLibrary is not thread-safe.

\n

Plugins

\n

SeleniumLibrary offers plugins as a way to modify and add library keywords and modify some of the internal functionality without creating a new library or hacking the source code. See plugin API documentation for further details.

\n

Plugin API is new SeleniumLibrary 4.0

\n

Auto closing browser

\n

By default, the browser instances created during a task execution are closed at the end of the task. This can be prevented with the auto_close parameter when importing the library.

\n

The value of the parameter needs to be set to False or any object evaluated as false (see Boolean arguments).

", "version": "6.2.0", - "generated": "2024-04-03 09:58:12", + "generated": "2024-04-03 10:12:18", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -33373,7 +33373,7 @@ "name": "RPA.Browser.common", "doc": "

Documentation for library RPA.Browser.common.

", "version": "", - "generated": "2024-04-03 09:58:12", + "generated": "2024-04-03 10:12:18", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -33464,7 +33464,7 @@ "name": "RPA.Calendar", "doc": "
\n

Library for handling different operations for date and time\nhandling especially in business days and holiday contexts.

\n

Utilizing pendulum and\nholidays packages.

\n

Library is by default using days from Monday to Friday as business\ndays, but that can be changed by giving list of weekdays to\nSet Business Days keyword. A weekday is given as a integer, the\n0 for Sunday and 6 for Saturday.

\n

Common country holidays are respected when getting next and previous\nbusiness days, but custom holidays can be added into consideration\nusing keyword Add Custom Holidays keyword.

\n

Some dates containing for example month names are in English (en), but\nthe locale of the library can be changed with keyword Set Locale or\nfor specific keyword if that has a locale parameter.

\n
\n", "version": "", - "generated": "2024-04-03 09:58:12", + "generated": "2024-04-03 10:12:18", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -34734,7 +34734,7 @@ "name": "RPA.Cloud.AWS", "doc": "
\n

AWS is a library for operating with Amazon AWS services S3, SQS,\nTextract and Comprehend.

\n

Services are initialized with keywords like Init S3 Client for S3.

\n

AWS authentication

\n

Authentication for AWS is set with key id and access key which can be given to the library\nin three different ways.

\n
    \n
  • Method 1 as environment variables, AWS_KEY_ID and AWS_KEY.
  • \n
  • Method 2 as keyword parameters to Init Textract Client for example.
  • \n
  • Method 3 as Robocorp vault secret. The vault name needs to be given in library init or\nwith keyword Set Robocorp Vault. Secret keys are expected to match environment variable\nnames.
  • \n
\n

Note. Starting from rpaframework-aws 1.0.3 region can be given as environment\nvariable AWS_REGION or include as Robocorp Vault secret with the same key name.

\n

Redshift Data authentication: Depending on the authorization method, use\none of the following combinations of request parameters, which can only\nbe passed via method 2:

\n
\n
    \n
  • Secrets Manager - when connecting to a cluster, specify the Amazon\nResource Name (ARN) of the secret, the database name, and the\ncluster identifier that matches the cluster in the secret. When\nconnecting to a serverless endpoint, specify the Amazon Resource\nName (ARN) of the secret and the database name.
  • \n
  • Temporary credentials - when connecting to a cluster, specify the\ncluster identifier, the database name, and the database user name.\nAlso, permission to call the redshift:GetClusterCredentials\noperation is required. When connecting to a serverless endpoint,\nspecify the database name.
  • \n
\n
\n

Role Assumption: With the use of the STS service client, you are able\nto assume another role, which will return temporary credentials. The\ntemporary credentials will include an access key and session token, see\nkeyword documentation for Assume Role for details of how the\ncredentials are returned. You can use these temporary credentials\nas part of method 2, but you must also include the session token.

\n

Method 1. credentials using environment variable

\n
\n*** Settings ***\nLibrary   RPA.Cloud.AWS\n\n*** Tasks ***\nInit AWS services\n    # NO parameters for client, expecting to get credentials\n    # with AWS_KEY, AWS_KEY_ID and AWS_REGION environment variables\n    Init S3 Client\n
\n

Method 2. credentials with keyword parameter

\n
\n*** Settings ***\nLibrary   RPA.Cloud.AWS   region=us-east-1\n\n*** Tasks ***\nInit AWS services\n    Init S3 Client  aws_key_id=${AWS_KEY_ID}  aws_key=${AWS_KEY}\n
\n

Method 3. setting Robocorp Vault in the library init

\n
\n*** Settings ***\nLibrary   RPA.Cloud.AWS  robocorp_vault_name=aws\n\n*** Tasks ***\nInit AWS services\n    Init S3 Client  use_robocorp_vault=${TRUE}\n
\n

Method 3. setting Robocorp Vault with keyword

\n
\n*** Settings ***\nLibrary   RPA.Cloud.AWS\n\n*** Tasks ***\nInit AWS services\n    Set Robocorp Vault     vault_name=aws\n    Init Textract Client    use_robocorp_vault=${TRUE}\n
\n

Requirements

\n

The default installation depends on boto3 library. Due to the size of the\ndependency, this library is available separate package rpaframework-aws but can\nalso be installed as an optional package for rpaframework.

\n

Recommended installation is rpaframework-aws plus rpaframework package.\nRemember to check latest versions from rpaframework Github repository.

\n
\nchannels:\n  - conda-forge\ndependencies:\n  - python=3.7.5\n  - pip=20.1\n  - pip:\n    - rpaframework==13.0.2\n    - rpaframework-aws==1.0.3\n
\n

Example

\n
\n*** Settings ***\nLibrary   RPA.Cloud.AWS   region=us-east-1\n\n*** Variables ***\n${BUCKET_NAME}        testbucket12213123123\n\n*** Tasks ***\nUpload a file into S3 bucket\n    [Setup]   Init S3 Client\n    Upload File      ${BUCKET_NAME}   ${/}path${/}to${/}file.pdf\n    @{files}         List Files   ${BUCKET_NAME}\n    FOR   ${file}  IN   @{files}\n        Log  ${file}\n    END\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:13", + "generated": "2024-04-03 10:12:19", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -37185,7 +37185,7 @@ "name": "RPA.Cloud.Azure", "doc": "
\n

Azure is a library for operating with Microsoft Azure API endpoints.

\n

List of supported service names:

\n\n

Azure authentication

\n

Authentication for Azure is set with service subscription key which can be given to the library\nin two different ways.

\n
    \n
  • Method 1 as environment variables, either service specific environment variable\nfor example AZURE_TEXTANALYTICS_KEY or with common key AZURE_SUBSCRIPTION_KEY which\nwill be used for all the services.
  • \n
  • Method 2 as Robocorp Vault secret. The vault name needs to be given in library init or\nwith keyword Set Robocorp Vault. Secret keys are expected to match environment variable\nnames.
  • \n
\n

Method 1. subscription key using environment variable

\n
\n*** Settings ***\nLibrary   RPA.Cloud.Azure\n\n*** Tasks ***\nInit Azure services\n    # NO parameters for client, expecting to get subscription key\n    # with AZURE_TEXTANALYTICS_KEY or AZURE_SUBSCRIPTION_KEY environment variable\n    Init Text Analytics Service\n
\n

Method 2. setting Robocorp Vault in the library init

\n
\n*** Settings ***\nLibrary   RPA.Cloud.Azure  robocorp_vault_name=azure\n\n*** Tasks ***\nInit Azure services\n    Init Text Analytics Service  use_robocorp_vault=${TRUE}\n
\n

Method 2. setting Robocorp Vault with keyword

\n
\n*** Settings ***\nLibrary   RPA.Cloud.Azure\n\n*** Tasks ***\nInit Azure services\n    Set Robocorp Vault          vault_name=googlecloud\n    Init Text Analytics Service  use_robocorp_vault=${TRUE}\n
\n

References

\n

List of supported language locales - Azure locale list

\n

List of supported region identifiers - Azure region list

\n

Examples

\n

Robot Framework

\n

This is a section which describes how to use the library in your\nRobot Framework tasks.

\n
\n*** Settings ***\nLibrary  RPA.Cloud.Azure\n\n*** Variables ***\n${IMAGE_URL}   IMAGE_URL\n${FEATURES}    Faces,ImageType\n\n*** Tasks ***\nVisioning image information\n   Init Computer Vision Service\n   &{result}   Vision Analyze  image_url=${IMAGE_URL}  visual_features=${FEATURES}\n   @{faces}    Set Variable  ${result}[faces]\n   FOR  ${face}  IN   @{faces}\n      Log  Age: ${face}[age], Gender: ${face}[gender], Rectangle: ${face}[faceRectangle]\n   END\n
\n

Python

\n

This is a section which describes how to use the library in your\nown Python modules.

\n
\nlibrary = Azure()\nlibrary.init_text_analytics_service()\nlibrary.init_face_service()\nlibrary.init_computer_vision_service()\nlibrary.init_speech_service("westeurope")\n\nresponse = library.sentiment_analyze(\n   text="The rooms were wonderful and the staff was helpful."\n)\nresponse = library.detect_face(\n   image_file=PATH_TO_FILE,\n   face_attributes="age,gender,smile,hair,facialHair,emotion",\n)\nfor item in response:\n   gender = item["faceAttributes"]["gender"]\n   age = item["faceAttributes"]["age"]\n   print(f"Detected a face, gender:{gender}, age: {age}")\n\nresponse = library.vision_analyze(\n   image_url=URL_TO_IMAGE,\n   visual_features="Faces,ImageType",\n)\nmeta = response['metadata']\nprint(\n   f"Image dimensions meta['width']}x{meta['height']} pixels"\n)\n\nfor face in response["faces"]:\n   left = face["faceRectangle"]["left"]\n   top = face["faceRectangle"]["top"]\n   width = face["faceRectangle"]["width"]\n   height = face["faceRectangle"]["height"]\n   print(f"Detected a face, gender:{face['gender']}, age: {face['age']}")\n   print(f"      Face rectangle: (left={left}, top={top})")\n   print(f"      Face rectangle: (width={width}, height={height})")\n\nlibrary.text_to_speech(\n    text="Developer tools for open-source RPA leveraging the Robot Framework ecosystem",\n    neural_voice_style="cheerful",\n    target_file='output.mp3'\n)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:13", + "generated": "2024-04-03 10:12:19", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -38165,7 +38165,7 @@ "name": "RPA.Cloud.Google", "doc": "
\n

Google is a library for operating with Google API endpoints.

\n

Installation

\n

Usage requires the following steps:

\n
    \n
  • Create a GCP project
  • \n
  • Enable approriate APIs
  • \n
  • Create credentials (OAuth or service account)
  • \n
  • Install rpaframework-google package
  • \n
\n

Check the latest package version from PyPI.

\n

Google authentication

\n

Authentication for Google is set with service account JSON file which can be given to the library\nin three different ways or with OAuth2 token, which is used for OAuth authentication.

\n

See library authentication examples for more information.

\n

Basic usage examples

\n

Python

\n
\nfrom RPA.Cloud.Google import Google\n\nlibrary = Google()\nservice_account = '/path/to/service_account.json'\n\nlibrary.init_vision(service_account)\nlibrary.init_text_to_speech(service_account)\n\nresponse = library.detect_text('imagefile.png', 'result.json')\nlibrary.synthesize_speech('I want this said aloud', target_file='said.mp3')\n
\n

Robot Framework

\n
\n*** Settings ***\nLibrary   RPA.Cloud.Google\n\n*** Variables ***\n${SERVICE_ACCOUNT}    ${/}path${/}to${/}service_account.json\n${BUCKET_NAME}            testbucket12213123123\n\n*** Tasks ***\nUpload a file into a new storage bucket\n    [Setup]   Init Storage    ${SERVICE_ACCOUNT}\n    Create Storage Bucket    ${BUCKET_NAME}\n    Upload Storage File      ${BUCKET_NAME}\n    ...   ${/}path${/}to${/}file.pdf\n    ...   myfile.pdf\n    @{files}         List Storage Files   ${BUCKET_NAME}\n    FOR   ${file}  IN   @{files}\n        Log  ${file}\n    END\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:14", + "generated": "2024-04-03 10:12:20", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -43633,7 +43633,7 @@ "name": "RPA.Crypto", "doc": "
\n

Library for common encryption and hashing operations.

\n

Library uses by default the\nFernet format\nfor encryption. More specifically, it uses AES in CBC mode with\na 128-bit key for encryption and HMAC with SHA256 for authentication.

\n

Alternative encryption format for the library is\nAES256.

\n

To use the encryption features, generate a key with the command line\nutility rpa-crypto or with the keyword Generate Key. Store\nthe key in a secure place, such as Robocorp Vault, and load it within\nthe execution before calling encryption/decryption keywords.

\n

Example usage with Robocorp Vault

\n

Create an encryption key with the CLI utility:

\n
\n> rpa-crypto key\nrGx1edA07yz7uD08ChiPSunn8vaauRxw0pAbsal9zjM=\n
\n

Store the key in Robocorp Vault, in this case with the name EncryptionKey.

\n

Load the key from the vault before encryption operations:

\n
\nUse encryption key from vault    EncryptionKey\n${encrypted}=   Encrypt file    orders.xlsx\nAdd work item file    ${encrypted}    name=Orders\n
\n

In another task, this same key can be used to decrypt the file:

\n
\nUse encryption key from vault    EncryptionKey\n${encrypted}=    Get work item file    Orders\n${orders}=   Decrypt file    ${encrypted}\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:14", + "generated": "2024-04-03 10:12:20", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -44321,7 +44321,7 @@ "name": "RPA.Database", "doc": "
\n

Database is a library for handling different database operations.

\n

All database operations are supported. Keywords Query and Get Rows\nreturn values by default in RPA.Table format.

\n

Library is compatible with any Database API Specification 2.0 module.

\n

Workaround for inserting large JSON data for Call Stored Procedure

\n

Workaround is to use instead Query keyword. At the moment there is\nno known fix for the Call Stored Procedure keyword as it fails if\nJSON string is more than 8000 characters long.

\n

Robot Framework

\n
\n${data}=    Load JSON from file    random_data.json\n${json}=    Convert JSON to String    ${data}\n# Single quotes around ${json} string are necessary\nQuery    exec InsertJsonDataToSampleTable '${json}'\n
\n

References:

\n\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary         RPA.Database\n\n*** Tasks ***\nGet Orders From Database\n    Connect To Database  pymysql  tester  user  password  127.0.0.1\n    @{orders}            Query    Select * FROM incoming_orders\n    FOR   ${order}  IN  @{orders}\n        Handle Order  ${order}\n    END\n
\n

Python

\n
\nfrom RPA.Database import Database\nfrom RPA.Robocorp.Vault import FileSecrets\n\nfilesecrets = FileSecrets("secrets.json")\nsecrets = filesecrets.get_secret("databasesecrets")\n\ndb = Database()\ndb.connect_to_database('pymysql',\n                    secrets["DATABASE"],\n                    secrets["USERNAME"],\n                    secrets["PASSWORD"],\n                    '127.0.0.1'\n                    )\norders = db.query("SELECT * FROM incoming_orders")\nfor order in orders:\n    print(order)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:14", + "generated": "2024-04-03 10:12:20", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -44981,7 +44981,7 @@ "name": "RPA.Desktop", "doc": "
\n

Desktop is a cross-platform library for navigating and interacting with\ndesktop environments. It can be used to automate applications through\nthe same interfaces that are available to human users.

\n

The library includes the following features:

\n
    \n
  • Mouse and keyboard input emulation
  • \n
  • Starting and stopping applications
  • \n
  • Finding elements through image template matching
  • \n
  • Scraping text from given regions
  • \n
  • Taking screenshots
  • \n
  • Clipboard management
  • \n
\n
\n

Warning

\n

Windows element selectors are not currently supported, and require the use of RPA.Desktop.Windows

\n
\n

Installation

\n

The basic features such as mouse and keyboard input and application\ncontrol work with a default rpaframework install.

\n

Advanced computer-vision features such as image template matching and\nOCR require an additional library called rpaframework-recognition.

\n

The dependency should be added separately by specifing it in your conda.yaml\nas rpaframework-recognition==5.0.1 for example. If installing recognition\nthrough pip instead of conda, the OCR feature also requires tesseract.

\n

Locating elements

\n

To automate actions on the desktop, a robot needs to interact with various\ngraphical elements such as buttons or input fields. The locations of these\nelements can be found using a feature called locators.

\n

A locator describes the properties or features of an element. This information\ncan be later used to locate similar elements even when window positions or\nstates change.

\n

The currently supported locator types are:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
NameArgumentsDescription
aliasname (str)A custom named locator from the locator database, the default.
imagepath (str)Image of an element that is matched to current screen content.
pointx (int), y (int)Pixel coordinates as absolute position.
offsetx (int), y (int)Pixel coordinates relative to current mouse position.
sizewidth (int), height (int)Region of fixed size, around point or screen top-left
regionleft (int), top (int), right (int), bottom (int)Bounding coordinates for a rectangular region.
ocrtext (str), confidence (float, optional)Text to find from the current screen.
\n

A locator is defined by its type and arguments, divided by a colon.\nSome example usages are shown below. Note that the prefix for alias can\nbe omitted as its the default type.

\n
\nClick       point:50,100\nClick       region:20,20,100,30\n\nMove mouse  image:%{ROBOT_ROOT}/logo.png\nMove mouse  offset:200,0\nClick\n\nClick       alias:SpareBin.Login\nClick       SpareBin.Login\n\nClick       ocr:"Create New Account"\n
\n

You can also pass internal region objects as locators:

\n
\n${region}=  Find Element  ocr:"Customer name"\nClick       ${region}\n
\n

Locator chaining

\n

Often it is not enough to have one locator, but instead an element\nis defined through a relationship of various locators. For this use\ncase the library supports a special syntax, which we will call\nlocator chaining.

\n

An example of chaining:

\n
\n# Read text from area on the right side of logo\nRead text    image:logo.png + offset:600,0 + size:400,200\n
\n

The supported operators are:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperatorDescription
then, +Base locator relative to the previous one
and, &&, &Both locators should be found
or, ||, |Either of the locators should be found
not, !The locator should not be found
\n

Further examples:

\n
\n# Click below either label\nClick    (image:name.png or image:email.png) then offset:0,300\n\n# Wait until dialog disappears\nWait for element    not image:cookie.png\n
\n

Named locators

\n

The library supports storing locators in a database, which contains\nall of the required fields and various bits of metadata. This enables\nhaving one source of truth, which can be updated if a website's or applications's\nUI changes. Robot Framework scripts can then only contain a reference\nto a stored locator by name.

\n

The main way to create named locators is with VSCode.

\n

Read more on identifying elements and crafting locators:

\n\n

Keyboard and mouse

\n

Keyboard keywords can emulate typing text, but also pressing various function keys.\nThe name of a key is case-insensitive and spaces will be converted to underscores,\ni.e. the key Page Down and page_down are equivalent.

\n

The following function keys are supported:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KeyDescription
shiftA generic Shift key. This is a modifier.
shift_lThe left Shift key. This is a modifier.
shift_rThe right Shift key. This is a modifier.
ctrlA generic Ctrl key. This is a modifier.
ctrl_lhe left Ctrl key. This is a modifier.
ctrl_rThe right Ctrl key. This is a modifier.
altA generic Alt key. This is a modifier.
alt_lThe left Alt key. This is a modifier.
alt_rThe right Alt key. This is a modifier.
alt_grThe AltGr key. This is a modifier.
cmdA generic command button (Windows / Command / Super key). This may be a modifier.
cmd_lThe left command button (Windows / Command / Super key). This may be a modifier.
cmd_rThe right command button (Windows / Command / Super key). This may be a modifier.
upAn up arrow key.
downA down arrow key.
leftA left arrow key.
rightA right arrow key.
enterThe Enter or Return key.
spaceThe Space key.
tabThe Tab key.
backspaceThe Backspace key.
deleteThe Delete key.
escThe Esc key.
homeThe Home key.
endThe End key.
page_downThe Page Down key.
page_upThe Page Up key.
caps_lockThe Caps Lock key.
f1 to f20The function keys.
insertThe Insert key. This may be undefined for some platforms.
menuThe Menu key. This may be undefined for some platforms.
num_lockThe Num Lock key. This may be undefined for some platforms.
pauseThe Pause / Break key. This may be undefined for some platforms.
print_screenThe Print Screen key. This may be undefined for some platforms.
scroll_lockThe Scroll Lock key. This may be undefined for some platforms.
\n

When controlling the mouse, there are different types of actions that can be\ndone. Same formatting rules as function keys apply. They are as follows:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ActionDescription
clickClick with left mouse button
left_clickClick with left mouse button
double_clickDouble click with left mouse button
triple_clickTriple click with left mouse button
right_clickClick with right mouse button
\n

The supported mouse button types are left, right, and middle.

\n

Examples

\n

Both Robot Framework and Python examples follow.

\n

The library must be imported first.

\n
\n*** Settings ***\nLibrary    RPA.Desktop\n
\n
\nfrom RPA.Desktop import Desktop\ndesktop = Desktop()\n
\n

The library can open applications and interact with them through\nkeyboard and mouse events.

\n
\n*** Keywords ***\nWrite entry in accounting\n    [Arguments]    ${entry}\n    Open application    erp_client.exe\n    Click         image:%{ROBOT_ROOT}/images/create.png\n    Type text     ${entry}\n    Press keys    ctrl    s\n    Press keys    enter\n
\n
\ndef write_entry_in_accounting(entry):\n    desktop.open_application("erp_client.exe")\n    desktop.click(f"image:{ROBOT_ROOT}/images/create.png")\n    desktop.type_text(entry)\n    desktop.press_keys("ctrl", "s")\n    desktop.press_keys("enter")\n
\n

Targeting can be currently done using coordinates (absolute or relative),\nbut using template matching is preferred.

\n
\n*** Keywords ***\nWrite to field\n    [Arguments]  ${text}\n    Move mouse   image:input_label.png\n    Move mouse   offset:200,0\n    Click\n    Type text    ${text}\n    Press keys   enter\n
\n
\ndef write_to_field(text):\n    desktop.move_mouse("image:input_label.png")\n    desktop.move_mouse("offset:200,0")\n    desktop.click()\n    desktop.type_text(text)\n    desktop.press_keys("enter")\n
\n

Elements can be found by text too.

\n
\n*** Keywords ***\nClick New\n    Click       ocr:New\n
\n
\ndef click_new():\n    desktop.click('ocr:"New"')\n
\n

It is recommended to wait for the elements to be visible before\ntrying any interaction. You can also pass region objects as locators.

\n
\n*** Keywords ***\nClick New\n    ${region}=  Wait For element  ocr:New\n    Click       ${region}\n
\n
\ndef click_new():\n    region = desktop.wait_for_element("ocr:New")\n    desktop.click(region)\n
\n

Another way to find elements by offsetting from an anchor:

\n
\n*** Keywords ***\nType Notes\n    [Arguments]        ${text}\n    Click With Offset  ocr:Notes  500  0\n    Type Text          ${text}\n
\n
\ndef type_notes(text):\n    desktop.click_with_offset("ocr:Notes", 500, 0)\n    desktop.type_text(text)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:14", + "generated": "2024-04-03 10:12:20", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -46191,7 +46191,7 @@ "name": "RPA.Desktop.Clipboard", "doc": "
\n

DEPRECATED!! Use library RPA.Desktop's clipboard functionality instead.

\n

Clipboard is a library for managing clipboard - copy text to,\npaste text from, and clear clipboard contents.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary    RPA.Desktop.Clipboard\n\n*** Tasks ***\nClipping\n    Copy To Clipboard   Text from Robot to clipboard\n    ${var}=             Paste From Clipboard\n    Clear Clipboard\n
\n

Python

\n
\nfrom RPA.Desktop.Clipboard import Clipboard\n\nclip = Clipboard()\nclip.copy_to_clipboard('Text from Python to clipboard')\ntext = clip.paste_from_clipboard()\nprint(f"clipboard had text: '{text}'")\nclip.clear_clipboard()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:14", + "generated": "2024-04-03 10:12:20", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -46249,7 +46249,7 @@ "name": "RPA.Desktop.OperatingSystem", "doc": "
\n

OperatingSystem is a cross-platform library for managing\ncomputer properties and actions.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary    RPA.Desktop.OperatingSystem\n\n*** Tasks ***\nGet computer information\n    ${boot_time}=   Get Boot Time  as_datetime=${TRUE}\n    ${machine}=     Get Machine Name\n    ${username}=    Get Username\n    &{memory}=      Get Memory Stats\n    Log Many        ${memory}\n
\n

Python

\n
\nfrom RPA.Desktop.OperatingSystem import OperatingSystem\n\ndef get_computer_information():\n    ops = OperatingSystem()\n    print(f"Boot time    : { ops.get_boot_time(as_datetime=True) }"\n          f"Machine name : { ops.get_machine_name() }"\n          f"Username     : { ops.get_username() }"\n          f"Memory       : { ops.get_memory_stats() }")\n\nif __name__ == "__main__":\n    get_computer_information()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:14", + "generated": "2024-04-03 10:12:20", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -46513,7 +46513,7 @@ "name": "RPA.Desktop.Windows", "doc": "
\n

Windows is a library for managing the Windows operating system.

\n

DEPRECATION WARNING! USE RPA.Windows library instead.

\n

For Windows desktop automation Robocorp recommends the RPA.Windows library.

\n

No further updates will be released for this library and new functionality will continue\nto be developed in RPA.Windows library.

\n

Running Windows applications

\n

Windows applications can be started in several ways. The library supports\nthe following keywords:

\n
    \n
  • Open Application (dispatch Office applications)
  • \n
  • Open File (open the file as process which opens the associated application)
  • \n
  • Open Executable (uses pywinauto start)
  • \n
  • Open Using Run Dialog (uses Windows run dialog)
  • \n
  • Open From Search (uses Windows search dialog)
  • \n
\n

Locators

\n

Locator is used to identify the element for interaction - usually for a mouse click.

\n

Locators can investigated for application once it has been opened by calling\nthe keyword get_windows_elements which can store locator information into JSON file\nand screenshot of the element into an image file.

\n

Identifying locator

\n

The element needs to be identified by a unique method, for example, "Three" for button 3\nin the Calculator application. It can be given either as Three or name:Three.

\n

Possible search criterias:

\n
    \n
  • name
  • \n
  • class (class_name)
  • \n
  • type (control_type)
  • \n
  • id (automation_id)
  • \n
  • any if none was defined
  • \n
\n

The current method of inspecting elements on Windows is inspect.exe which is part\nof Windows SDK.

\n

Keyboard

\n

The keyword send_keys can be used to send keys to the active window. The keyword\ntype_keys sends keys to the active window element.

\n

Special key codes are documented on pywinauto\ndocumentation page.

\n

FAQ

\n
    \n
  1. I see error message AttributeError: module 'win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x9' has no attribute 'CLSIDToClassMap'
  2. \n
\n
    \n
  1. From PowerShell run this command: Remove-Item -path $env:LOCALAPPDATATempgen_py -recurse
  2. \n
\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary          RPA.Desktop.Windows\nSuite Teardown   Close all applications\n\n*** Tasks ***\nOpen Calculator using run dialog\n    ${result}=              Open using run dialog    calc.exe   Calculator\n    ${result}=              Get Window Elements\n    Send Keys               5*2=\n    ${result}=              Get element             partial name:Display is\n    Log Many                ${result}\n    ${result}=              Get element rich text   id:CalculatorResults\n    Should Be Equal As Strings  ${result}  Display is 10\n    ${result}=              Get element rectangle   partial name:Display is\n    ${result}=              Is Element Visible      CalculatorResults\n    ${result}=              Is Element Enabled      partial name:Display is\n
\n

Python

\n
\nfrom RPA.Desktop.Windows import Windows\n\nwin = Windows()\n\ndef open_calculator():\n    win.open_from_search("calc.exe", "Calculator")\n    elements = win.get_window_elements()\n\ndef make_calculations(expression):\n    win.send_keys(expression)\n    result = win.get_element_rich_text('id:CalculatorResults')\n    return int(result.strip('Display is '))\n\nif __name__ == "__main__":\n    open_calculator()\n    exp = '5*2='\n    result = make_calculations(exp)\n    print(f"Calculation result of '{exp}' is '{result}'")\n    win.close_all_applications()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:15", + "generated": "2024-04-03 10:12:21", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -48924,7 +48924,7 @@ "name": "RPA.DocumentAI", "doc": "
\n

Wrapper library offering generic keywords for initializing, scanning and\nretrieving results as fields from documents (PDF, PNG etc.).

\n

Library requires at the minimum rpaframework version 19.0.0.

\n

This is a helper facade for the following libraries:

\n
    \n
  • RPA.Cloud.Google (requires rpaframework-google)
  • \n
  • RPA.DocumentAI.Base64AI
  • \n
  • RPA.DocumentAI.Nanonets
  • \n
\n

Where the following steps are required:

\n
    \n
  1. Engine initialization: Init Engine
  2. \n
  3. Document scan: Predict
  4. \n
  5. Result retrieval: Get Result
  6. \n
\n

So no matter the engine you're using, the very same keywords can be used, as only\nthe passed parameters will differ (please check the docs on each library for\nparticularities). Once initialized, you can jump between the engines with\nSwitch Engine. Before scanning documents, you must configure the service first,\nwith a model to scan the files with and an API key for authorizing the access.

\n

See Portal example: https://robocorp.com/portal/robot/robocorp/example-document-ai

\n

Example: Robot Framework

\n
\n*** Settings ***\nLibrary    RPA.DocumentAI\n\n*** Tasks ***\nScan Documents\n    Init Engine    base64ai    vault=document_ai:base64ai\n    Init Engine    nanonets    vault=document_ai:nanonets\n\n    Switch Engine   base64ai\n    Predict    invoice.png\n    ${data} =    Get Result\n    Log List    ${data}\n\n    Switch Engine   nanonets\n    Predict    invoice.png      model=858e4b37-6679-4552-9481-d5497dfc0b4a\n    ${data} =    Get Result\n    Log List    ${data}\n
\n

Example: Python

\n
\nfrom RPA.DocumentAI import DocumentAI, EngineName\n\nlib_docai = DocumentAI()\nlib_docai.init_engine(\n    EngineName.GOOGLE, vault="document_ai:serviceaccount", region="eu"\n)\nlib_docai.predict(\n    "invoice.pdf", model="df1d166771005ff4",\n    project_id="complete-agency-347912", region="eu"\n)\nprint(lib_docai.get_result())\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:15", + "generated": "2024-04-03 10:12:21", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -49239,7 +49239,7 @@ "name": "RPA.DocumentAI.Base64AI", "doc": "
\n

Library to support Base64.ai service for intelligent\ndocument processing (IDP).

\n

Library requires at the minimum rpaframework version 19.0.0.

\n

Service supports identifying fields in the documents, which can be given to the\nservice in multiple different file formats and via URL.

\n

Robot Framework example usage

\n
\n*** Settings ***\nLibrary   RPA.DocumentAI.Base64AI\nLibrary   RPA.Robocorp.Vault\n\n*** Tasks ***\nIdentify document\n    ${secrets}=   Get Secret  base64ai-auth\n    Set Authorization  ${secrets}[email-address]   ${secrets}[apikey]\n    ${results}=  Scan Document File\n    ...   ${CURDIR}${/}invoice.pdf\n    ...   model_types=finance/check/usa,finance/invoice/usa\n    # Scan response contains list of detected models in the document\n    FOR  ${result}  IN  @{results}\n        Log To Console  Model: ${result}[model]\n        Log To Console  Field keys: ${{','.join($result['fields'].keys())}}\n        Log To Console  Fields: ${result}[fields]\n        Log To Console  Text (OCR): ${result}[ocr]\n    END\n
\n

Python example usage

\n
\nfrom RPA.DocumentAI.Base64AI import Base64AI\nfrom RPA.Robocorp.Vault import Vault\n\nsecrets = Vault().get_secret("base64ai-auth")\nbaselib = Base64AI()\nbaselib.set_authorization(secrets["email-address"], secrets["apikey"])\nresult = baselib.scan_document_file(\n    "invoice.pdf",\n    model_types="finance/invoice,finance/check/usa",\n)\nfor r in result:\n    print(f"Model: {r['model']}")\n    for key, props in r["fields"].items():\n        print(f"FIELD {key}: {props['value']}")\n    print(f"Text (OCR): {r['ocr']}")\n
\n

Portal example: https://github.com/robocorp/example-idp-base64

\n
\n", "version": "", - "generated": "2024-04-03 09:58:15", + "generated": "2024-04-03 10:12:21", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -49752,7 +49752,7 @@ "name": "RPA.DocumentAI.DocumentAI", "doc": "
\n

Wrapper library offering generic keywords for initializing, scanning and\nretrieving results as fields from documents (PDF, PNG etc.).

\n

Library requires at the minimum rpaframework version 19.0.0.

\n

This is a helper facade for the following libraries:

\n
    \n
  • RPA.Cloud.Google (requires rpaframework-google)
  • \n
  • RPA.DocumentAI.Base64AI
  • \n
  • RPA.DocumentAI.Nanonets
  • \n
\n

Where the following steps are required:

\n
    \n
  1. Engine initialization: Init Engine
  2. \n
  3. Document scan: Predict
  4. \n
  5. Result retrieval: Get Result
  6. \n
\n

So no matter the engine you're using, the very same keywords can be used, as only\nthe passed parameters will differ (please check the docs on each library for\nparticularities). Once initialized, you can jump between the engines with\nSwitch Engine. Before scanning documents, you must configure the service first,\nwith a model to scan the files with and an API key for authorizing the access.

\n

See Portal example: https://robocorp.com/portal/robot/robocorp/example-document-ai

\n

Example: Robot Framework

\n
\n*** Settings ***\nLibrary    RPA.DocumentAI\n\n*** Tasks ***\nScan Documents\n    Init Engine    base64ai    vault=document_ai:base64ai\n    Init Engine    nanonets    vault=document_ai:nanonets\n\n    Switch Engine   base64ai\n    Predict    invoice.png\n    ${data} =    Get Result\n    Log List    ${data}\n\n    Switch Engine   nanonets\n    Predict    invoice.png      model=858e4b37-6679-4552-9481-d5497dfc0b4a\n    ${data} =    Get Result\n    Log List    ${data}\n
\n

Example: Python

\n
\nfrom RPA.DocumentAI import DocumentAI, EngineName\n\nlib_docai = DocumentAI()\nlib_docai.init_engine(\n    EngineName.GOOGLE, vault="document_ai:serviceaccount", region="eu"\n)\nlib_docai.predict(\n    "invoice.pdf", model="df1d166771005ff4",\n    project_id="complete-agency-347912", region="eu"\n)\nprint(lib_docai.get_result())\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:15", + "generated": "2024-04-03 10:12:21", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -50067,7 +50067,7 @@ "name": "RPA.DocumentAI.Nanonets", "doc": "
\n

Library to support Nanonets service for intelligent document processing (IDP).

\n

Library requires at the minimum rpaframework version 19.0.0.

\n

Service supports identifying fields in the documents, which can be given to the\nservice in multiple different file formats and via URL.

\n

Robot Framework example usage

\n
\n*** Settings ***\nLibrary   RPA.DocumentAI.Nanonets\nLibrary   RPA.Robocorp.Vault\n\n*** Tasks ***\nIdentify document\n    ${secrets}=   Get Secret  nanonets-auth\n    Set Authorization    ${secrets}[apikey]\n    ${result}=    Predict File\n    ...  ${CURDIR}${/}files${/}eckero.jpg\n    ...  ${secrets}[receipts-model-id]\n    ${fields}=    Get Fields From Prediction Result    ${result}\n    FOR    ${field}    IN    @{fields}\n        Log To Console    Label:${field}[label] Text:${field}[ocr_text]\n    END\n    ${tables}=    Get Tables From Prediction Result    ${result}\n    FOR    ${table}    IN    @{tables}\n        FOR    ${rows}    IN    ${table}[rows]\n            FOR    ${row}    IN    @{rows}\n                ${cells}=    Evaluate    [cell['text'] for cell in $row]\n                Log To Console    ROW:${{" | ".join($cells)}}\n            END\n        END\n    END\n
\n

Python example usage

\n
\nfrom RPA.DocumentAI.Nanonets import Nanonets\nfrom RPA.Robocorp.Vault import Vault\n\nsecrets = Vault().get_secret("nanonets-auth")\nnanolib = Nanonets()\nnanolib.set_authorization(secrets["apikey"])\nresult = nanolib.predict_file(file_to_scan, secrets["receipts-model-id"])\nfields = nanolib.get_fields_from_prediction_result(result)\nfor field in fields:\n    print(f"Label: {field['label']} Text: {field['ocr_text']}")\ntables = nanolib.get_tables_from_prediction_result(result)\nfor table in tables:\n    rpatable = Tables().create_table(table["rows"])\n    for row in table["rows"]:\n        cells = [cell["text"] for cell in row]\n        print(f"ROW: {' | '.join(cells)}")\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:15", + "generated": "2024-04-03 10:12:21", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -50365,7 +50365,7 @@ "name": "RPA.Email.Exchange", "doc": "
\n

Exchange is a library for sending, reading, and deleting emails.\nExchange is interfacing with Exchange Web Services (EWS).

\n

For more information about server settings, see\nthis Microsoft support article.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary     RPA.Email.Exchange\n...     vault_name=email_oauth_microsoft    vault_token_key=token\n...     tenant=ztzvn.onmicrosoft.com  # your custom tenant here\nTask Setup      Ensure Auth\n\n*** Variables ***\n${ACCOUNT}              ACCOUNT_NAME\n${RECIPIENT_ADDRESS}    RECIPIENT\n${IMAGES}               myimage.png\n${ATTACHMENTS}          C:${/}files${/}mydocument.pdf\n\n*** Keywords ***\nEnsure Auth\n    ${secrets} =    Get Secret    email_oauth_microsoft\n    RPA.Email.Exchange.Authorize    ${ACCOUNT}\n    ...    is_oauth=${True}  # use the OAuth2 auth code flow (required)\n    ...    client_id=${secrets}[client_id]  # app ID\n    ...    client_secret=${secrets}[client_secret]  # app password\n    ...    token=${secrets}[token]  # token dict (access, refresh, scope etc.)\n\n*** Tasks ***\nTask of sending email\n    Send Message  recipients=${RECIPIENT_ADDRESS}\n    ...           subject=Exchange Message from RPA Robot\n    ...           body=<p>Exchange RPA Robot message body<br><img src='myimage.png'/></p>\n    ...           save=${TRUE}\n    ...           html=${TRUE}\n    ...           images=${IMAGES}\n    ...           cc=EMAIL_ADDRESS\n    ...           bcc=EMAIL_ADDRESS\n    ...           attachments=${ATTACHMENTS}\n\nTask of listing messages\n    # Attachments are saved specifically with a keyword Save Attachments\n    ${messages}=    List Messages\n    FOR    ${msg}    IN    @{messages}\n        Log Many    ${msg}\n        ${attachments}=    Run Keyword If    "${msg}[subject]"=="about my orders"\n        ...    Save Attachments\n        ...    ${msg}\n        ...    save_dir=${CURDIR}${/}savedir\n    END\n    # Using save_dir all attachments in listed messages are saved\n    ${messages}=    List Messages\n    ...    INBOX/Problems/sub1\n    ...    criterion=subject:'about my orders'\n    ...    save_dir=${CURDIR}${/}savedir2\n    FOR    ${msg}    IN    @{messages}\n        Log Many    ${msg}\n    END\n\nTask of moving messages\n    Move Messages    criterion=subject:'about my orders'\n    ...    source=INBOX/Processed Purchase Invoices/sub2\n    ...    target=INBOX/Problems/sub1\n
\n

Python

\n
\nfrom RPA.Email.Exchange import Exchange\nfrom RPA.Robocorp.Vault import Vault\n\nvault_name = "email_oauth_microsoft"\nsecrets = Vault().get_secret(vault_name)\nex_account = "ACCOUNT_NAME"\n\nmail = Exchange(\n    vault_name=vault_name,\n    vault_token_key="token",\n    tenant="ztzvn.onmicrosoft.com"\n)\nmail.authorize(\n    username=ex_account,\n    is_oauth=True,\n    client_id=secrets["client_id"],\n    client_secret=secrets["client_secret"],\n    token=secrets["token"]\n)\nmail.send_message(\n    recipients="RECIPIENT",\n    subject="Message from RPA Python",\n    body="RPA Python message body",\n)\n
\n

OAuth2

\n

The OAuth2 flow is the only way of authorizing at the moment as Microsoft disabled\nentirely the usage of passwords, even App Passwords. And since you have to work\nwith tokens now and because this library has the capability to automatically\nrefresh an expired token, please don't forget to initialize the library with the\nfollowing parameters: vault_name, vault_token_key and tenant.

\n

Learn more on how to use the OAuth2 flow in this Portal robot\nexample-oauth-email.

\n

About criterion parameter

\n

Following table shows possible criterion keys that can be used to filter emails.\nThere apply to all keywords which have criterion parameter.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KeyEffective search
subjectsubject to match
subject_containssubject to contain
bodybody to match
body_containsbody to contain
sendersender (from) to match
sender_containssender (from) to contain
beforereceived time before this time
afterreceived time after this time
betweenreceived time between start and end
categorycategories to match
category_containscategories to contain
importanceimportance to match
\n

Keys before, after and between at the moment support two\ndifferent timeformats either %d-%m-%Y %H:%M or %d-%m-%Y. These\nkeys also support special string NOW which can be used especially\ntogether with keyword Wait for message  criterion=after:NOW.

\n

When giving time which includes hours and minutes then the whole\ntime string needs to be enclosed into single quotes.

\n
\nbefore:25-02-2022\nafter:NOW\nbetween:'31-12-2021 23:50 and 01-01-2022 00:10'\n
\n

Different criterion keys can be combined.

\n
\nsubject_contains:'new year' between:'31-12-2021 23:50 and 01-01-2022 00:10'\n
\n

Please note that all values in the criterion that contain spaces need\nto be enclosed within single quotes.

\n

In the following example the email subject is going to matched\nonly against new not new year.

\n
\nsubject_contains:new year\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:16", + "generated": "2024-04-03 10:12:22", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -51766,7 +51766,7 @@ "name": "RPA.Email.ImapSmtp", "doc": "
\n

ImapSmtp is a library for sending, reading, and deleting emails.\nImapSmtp is interfacing with SMTP and IMAP protocols.

\n

*About criteria argument*

\n

Various keywords like List Messages and Move Messages have keyword\nargument called criterion which can be used to filter emails according\nto given criteria.

\n

Syntax needs to according to specification and more information about that\ncan be read from https://robocorp.com/docs/development-guide/email/sending-emails-with-gmail-smtp#listing-email-messages-by-criteria

\n

Troubleshooting

\n
    \n
  • \n
    Authentication error with GMail - "Application-specific password required"
    \n

    See: https://support.google.com/mail/answer/185833?hl=en

    \n
    \n
    \n
  • \n
  • \n
    More secure apps (XOAUTH2 protocol) - Use the OAuth2 flow as in this Portal robot:
    \n

    example-oauth-email

    \n

    Make sure to specify a provider (and optionally a tenant) when importing\nthe library and planning to use this flow.

    \n
    \n
    \n
  • \n
\n

Examples

\n

Robot Framework

\n

It is highly recommended to secure your passwords and take care\nthat they are not stored in version control by mistake.\nSee RPA.Robocorp.Vault to see how to store secrets in\nRobocorp Vault.

\n

When sending HTML content with IMG tags, the src filenames must match\nthe base image name given with the images parameter.

\n
\n*** Settings ***\nLibrary     RPA.Email.ImapSmtp   smtp_server=smtp.gmail.com  smtp_port=587\nTask Setup  Authorize  account=${GMAIL_ACCOUNT}  password=${GMAIL_PASSWORD}\n\n*** Variables ***\n${GMAIL_ACCOUNT}        ACCOUNT_NAME\n${GMAIL_PASSWORD}       APP_PASSWORD\n${RECIPIENT_ADDRESS}    RECIPIENT\n${BODY_IMG1}            ${IMAGEDIR}${/}approved.png\n${BODY_IMG2}            ${IMAGEDIR}${/}invoice.png\n${EMAIL_BODY}     <h1>Heading</h1><p>Status: <img src='approved.png' alt='approved image'/></p>\n...               <p>INVOICE: <img src='invoice.png' alt='invoice image'/></p>\n\n*** Tasks ***\nSending email\n    Send Message  sender=${GMAIL_ACCOUNT}\n    ...           recipients=${RECIPIENT_ADDRESS}\n    ...           subject=Message from RPA Robot\n    ...           body=RPA Robot message body\n\nSending HTML Email With Image\n    [Documentation]     Sending email with HTML content and attachment\n    Send Message\n    ...                 sender=${GMAIL_ACCOUNT}\n    ...                 recipients=${RECIPIENT_ADDRESS}\n    ...                 subject=HTML email with body images (2) plus one attachment\n    ...                 body=${EMAIL_BODY}\n    ...                 html=${TRUE}\n    ...                 images=${BODY_IMG1}, ${BODY_IMG2}\n    ...                 attachments=example.png\n
\n

Python

\n
\nfrom RPA.Email.ImapSmtp import ImapSmtp\n\ngmail_account = "ACCOUNT_NAME"\ngmail_password = "APP_PASSWORD"\n\nmail = ImapSmtp(smtp_server="smtp.gmail.com", smtp_port=587)\nmail.authorize(account=gmail_account, password=gmail_password)\nmail.send_message(\n    sender=gmail_account,\n    recipients="RECIPIENT",\n    subject="Message from RPA Python",\n    body="RPA Python message body",\n)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:16", + "generated": "2024-04-03 10:12:22", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -53955,7 +53955,7 @@ "name": "RPA.Excel.Application", "doc": "
\n

Excel.Application is a library for controlling the Excel application.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary             RPA.Excel.Application\nTask Setup          Open Application\nTask Teardown       Quit Application\n\n*** Tasks ***\nManipulate Excel application\n    Open Workbook           workbook.xlsx\n    Set Active Worksheet    sheetname=new stuff\n    Write To Cells          row=1\n    ...                     column=1\n    ...                     value=my data\n    Save Excel\n\nRun Excel Macro\n    Open Workbook   orders_with_macro.xlsm\n    Run Macro       Sheet1.CommandButton1_Click\n\nExport Workbook as PDF\n    Open Workbook           workbook.xlsx\n    Export as PDF           workbook.pdf\n
\n

Python

\n
\nfrom RPA.Excel.Application import Application\n\napp = Application()\n\napp.open_application()\napp.open_workbook('workbook.xlsx')\napp.set_active_worksheet(sheetname='new stuff')\napp.write_to_cells(row=1, column=1, value='new data')\napp.save_excel()\napp.quit_application()\n
\n

Caveats

\n

This library works on a Windows operating system with UI enabled only, and you must\nensure that you open the app first with Open Application before running any\nother relevant keyword which requires to operate on an open app. The application is\nautomatically closed at the end of the task execution, so this can be changed by\nimporting the library with the autoexit=${False} setting.

\n
\n*** Settings ***\nLibrary     RPA.Excel|Outlook|Word.Application    autoexit=${False}\n
\n

If you're running the Process by Control Room through a custom self-hosted Worker\nservice, then please make sure that you enable an RDP session by ticking "Use\nDesktop Connection" under the Step configuration.

\n

If you still encounter issues with opening a document, please ensure that file can\nbe opened first manually and dismiss any alert potentially blocking the process.

\n

Check the documentation below for more info:

\n\n
\n", "version": "", - "generated": "2024-04-03 09:58:16", + "generated": "2024-04-03 10:12:23", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -55229,7 +55229,7 @@ "name": "RPA.Excel.Files", "doc": "
\n

The Excel.Files library can be used to read and write Excel\nfiles without the need to start the actual Excel application.

\n

It supports both legacy .xls files and modern .xlsx files.

\n

Note: To run macros or load password protected worksheets,\nplease use the Excel application library.

\n

Examples

\n

Robot Framework

\n

A common use-case is to load an existing Excel file as a table,\nwhich can be iterated over later in a Robot Framework keyword or task:

\n
\n*** Settings ***\nLibrary    RPA.Tables\nLibrary    RPA.Excel.Files\n\n*** Keywords ***\nRead orders as table\n    Open workbook    ${ORDERS_FILE}\n    ${worksheet}=    Read worksheet   header=${TRUE}\n    ${orders}=       Create table     ${worksheet}\n    [Return]         ${orders}\n    [Teardown]       Close workbook\n
\n

Processing all worksheets in the Excel file and checking row count:

\n
\n*** Settings ***\nLibrary    RPA.Excel.Files\n\n*** Variables ***\n${EXCEL_FILE}   /path/to/excel.xlsx\n\n*** Tasks ***\nRows in the sheet\n    [Setup]      Open Workbook    ${EXCEL_FILE}\n    @{sheets}=   List Worksheets\n    FOR  ${sheet}  IN   @{sheets}\n        ${count}=  Get row count in the sheet   ${sheet}\n        Log   Worksheet '${sheet}' has ${count} rows\n    END\n\n*** Keywords ***\nGet row count in the sheet\n    [Arguments]      ${SHEET_NAME}\n    ${sheet}=        Read Worksheet   ${SHEET_NAME}\n    ${rows}=         Get Length  ${sheet}\n    [Return]         ${rows}\n
\n

Creating a new Excel file with a dictionary:

\n
\n*** Tasks ***\nCreating new Excel\n    Create Workbook  my_new_excel.xlsx\n    FOR    ${index}    IN RANGE    20\n        &{row}=       Create Dictionary\n        ...           Row No   ${index}\n        ...           Amount   ${index * 25}\n        Append Rows to Worksheet  ${row}  header=${TRUE}\n    END\n    Save Workbook\n
\n

Creating a new Excel file with a list:

\n
\n*** Variables ***\n@{heading}   Row No   Amount\n@{rows}      ${heading}\n\n*** Tasks ***\nCreating new Excel\n    Create Workbook  my_new_excel.xlsx\n    FOR    ${index}    IN RANGE   1  20\n        @{row}=         Create List   ${index}   ${index * 25}\n        Append To List  ${rows}  ${row}\n    END\n    Append Rows to Worksheet  ${rows}\n    Save Workbook\n
\n

Python

\n

The library can also be imported directly into Python.

\n
\nfrom RPA.Excel.Files import Files\n\ndef read_excel_worksheet(path, worksheet):\n    lib = Files()\n    lib.open_workbook(path)\n    try:\n        return lib.read_worksheet(worksheet)\n    finally:\n        lib.close_workbook()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:17", + "generated": "2024-04-03 10:12:23", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -57161,7 +57161,7 @@ "name": "RPA.FTP", "doc": "
\n

FTP library can be used to access an FTP server,\nand interact with files.

\n

The library is based on Python's built-in ftplib.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary    RPA.FTP\n\n*** Variables ***\n${HOST}       127.0.0.1\n${PORT}       27345\n${USER}       user\n${PASS}       12345\n\n*** Tasks ***\nList files on the server directory\n    Connect   ${HOST}  ${PORT}  ${USER}  ${PASS}\n    @{files}  List Files\n    FOR  ${file}  IN  @{files}\n        Log  ${file}\n    END\n
\n

Python

\n
\nfrom RPA.FTP import FTP\n\nlibrary = FTP()\nlibrary.connect('127.0.0.1', 27345, 'user', '12345')\nfiles = library.list_files()\nfor f in files:\n    print(f)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:17", + "generated": "2024-04-03 10:12:24", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -57764,7 +57764,7 @@ "name": "RPA.FileSystem", "doc": "
\n

The FileSystem library can be used to interact with files and directories\non the local computer. It can inspect and list files, remove and create them,\nread contents from files, and write data out.

\n

It shadows the built-in OperatingSystem library but contains keywords\nwhich are more RPA-oriented.

\n

Examples

\n

Robot Framework

\n

The library allows, for instance, iterating over files and inspecting them.

\n
\n*** Settings ***\nLibrary    RPA.FileSystem\n\n*** Keywords ***\nDelete large files\n    ${files}=    List files in directory    archive/orders/\n    FOR    ${file}  IN  @{FILES}\n        Run keyword if    ${file.size} > 10**8    Remove file    ${file}\n    END\n\nRead process output\n    Start external program\n    Wait until modified    process.log\n    ${output}=  Read file  process.log\n    [Return]    ${output}\n
\n

Python

\n

The library can also be used inside Python.

\n
\nfrom RPA.FileSystem import FileSystem\n\ndef move_to_archive():\n    lib = FileSystem()\n\n    matches = lib.find_files("**/*.xlsx")\n    if matches:\n        lib.create_directory("archive")\n        lib.move_files(matches, "archive")\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:18", + "generated": "2024-04-03 10:12:24", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -59422,7 +59422,7 @@ "name": "RPA.HTTP", "doc": "
\n

The RPA.HTTP library extends functionality of the RequestsLibrary.\nSee that documentation for several examples of how to issue GET\nrequests and utilize the returned result objects.

\n

This extension provides helper keywords to get an HTTP resource on a\nsession. The HTTP Get and Download keywords will initiate a\nsession if one does not exist for the provided URL, or use an existing\nsession. When using these keywords, you do not need to manage\nsessions with Create Session. Session management is still\nrequired if you use the underlying session keywords, e.g.,\n* On Session.

\n
\n", "version": "0.9.6", - "generated": "2024-04-03 09:58:18", + "generated": "2024-04-03 10:12:24", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -59593,10 +59593,10 @@ "name": "retry_method_list", "types": [], "typedocs": {}, - "defaultValue": "['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']", + "defaultValue": "['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "retry_method_list=['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']" + "repr": "retry_method_list=['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']" } ], "doc": "
\n

Create Session: create a HTTP session to a server

\n

url Base url of the server

\n

alias Robot Framework alias to identify the session

\n

headers Dictionary of default headers

\n

cookies Dictionary of cookies

\n

client_certs ['client certificate', 'client key'] PEM files containing the client key and certificate

\n

timeout Connection timeout

\n
\n
proxies Dictionary mapping protocol or protocol and host to the URL of the proxy
\n
(e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'})
\n
verify Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.
\n
Defaults to False.
\n
debug Enable http verbosity option more information
\n
https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel
\n
max_retries Number of maximum retries each connection should attempt.
\n
By default it will retry 3 times in case of connection errors only.\nA 0 value will disable any kind of retries regardless of other retry settings.\nIn case the number of retries is reached a retry exception is raised.
\n
\n

disable_warnings Disable requests warning useful when you have large number of testcases

\n
\n
backoff_factor Introduces a delay time between retries that is longer after each retry.
\n
eg. if backoff_factor is set to 0.1\nthe sleep between attemps will be: 0.0, 0.2, 0.4\nMore info here: https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html
\n
retry_method_list List of uppercased HTTP method verbs where retries are allowed.
\n
By default retries are allowed only on HTTP requests methods that are considered to be\nidempotent (multiple requests with the same parameters end with the same state).\neg. set to ['POST', 'GET'] to retry only those kind of requests.
\n
retry_status_list List of integer HTTP status codes that, if returned, a retry is attempted.
\n
eg. set to [502, 503] to retry requests if those status are returned.\nNote that max_retries must be greater than 0.
\n
\n
\n", @@ -59729,10 +59729,10 @@ "name": "retry_method_list", "types": [], "typedocs": {}, - "defaultValue": "['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']", + "defaultValue": "['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "retry_method_list=['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']" + "repr": "retry_method_list=['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']" } ], "doc": "
\n

Create Session: create a HTTP session to a server

\n

url Base url of the server

\n

alias Robot Framework alias to identify the session

\n

headers Dictionary of default headers

\n

cookies Dictionary of cookies

\n
\n
auth A Custom Authentication object to be passed on to the requests library.
\n
http://docs.python-requests.org/en/master/user/advanced/#custom-authentication
\n
\n

timeout Connection timeout

\n
\n
proxies Dictionary mapping protocol or protocol and host to the URL of the proxy
\n
(e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'})
\n
verify Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.
\n
Defaults to False.
\n
debug Enable http verbosity option more information
\n
https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel
\n
max_retries Number of maximum retries each connection should attempt.
\n
By default it will retry 3 times in case of connection errors only.\nA 0 value will disable any kind of retries regardless of other retry settings.\nIn case the number of retries is reached a retry exception is raised.
\n
\n

disable_warnings Disable requests warning useful when you have large number of testcases

\n
\n
backoff_factor Introduces a delay time between retries that is longer after each retry.
\n
eg. if backoff_factor is set to 0.1\nthe sleep between attemps will be: 0.0, 0.2, 0.4\nMore info here: https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html
\n
retry_method_list List of uppercased HTTP method verbs where retries are allowed.
\n
By default retries are allowed only on HTTP requests methods that are considered to be\nidempotent (multiple requests with the same parameters end with the same state).\neg. set to ['POST', 'GET'] to retry only those kind of requests.
\n
retry_status_list List of integer HTTP status codes that, if returned, a retry is attempted.
\n
eg. set to [502, 503] to retry requests if those status are returned.\nNote that max_retries must be greater than 0.
\n
\n
\n", @@ -59865,10 +59865,10 @@ "name": "retry_method_list", "types": [], "typedocs": {}, - "defaultValue": "['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']", + "defaultValue": "['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "retry_method_list=['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']" + "repr": "retry_method_list=['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']" } ], "doc": "
\n

Create Session: create a HTTP session to a server

\n

url Base url of the server

\n

alias Robot Framework alias to identify the session

\n

headers Dictionary of default headers

\n

cookies Dictionary of cookies

\n

auth ['DOMAIN', 'username', 'password'] for NTLM Authentication

\n

timeout Connection timeout

\n
\n
proxies Dictionary mapping protocol or protocol and host to the URL of the proxy
\n
(e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'})
\n
verify Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.
\n
Defaults to False.
\n
debug Enable http verbosity option more information
\n
https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel
\n
max_retries Number of maximum retries each connection should attempt.
\n
By default it will retry 3 times in case of connection errors only.\nA 0 value will disable any kind of retries regardless of other retry settings.\nIn case the number of retries is reached a retry exception is raised.
\n
\n

disable_warnings Disable requests warning useful when you have large number of testcases

\n
\n
backoff_factor Introduces a delay time between retries that is longer after each retry.
\n
eg. if backoff_factor is set to 0.1\nthe sleep between attemps will be: 0.0, 0.2, 0.4\nMore info here: https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html
\n
retry_method_list List of uppercased HTTP method verbs where retries are allowed.
\n
By default retries are allowed only on HTTP requests methods that are considered to be\nidempotent (multiple requests with the same parameters end with the same state).\neg. set to ['POST', 'GET'] to retry only those kind of requests.
\n
retry_status_list List of integer HTTP status codes that, if returned, a retry is attempted.
\n
eg. set to [502, 503] to retry requests if those status are returned.\nNote that max_retries must be greater than 0.
\n
\n
\n", @@ -60001,10 +60001,10 @@ "name": "retry_method_list", "types": [], "typedocs": {}, - "defaultValue": "['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']", + "defaultValue": "['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "retry_method_list=['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']" + "repr": "retry_method_list=['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']" } ], "doc": "
\n

Create Session: create a HTTP session to a server

\n

url Base url of the server

\n

alias Robot Framework alias to identify the session

\n

headers Dictionary of default headers

\n

cookies Dictionary of cookies

\n

auth ['DOMAIN', 'username', 'password'] for NTLM Authentication

\n

timeout Connection timeout

\n
\n
proxies Dictionary mapping protocol or protocol and host to the URL of the proxy
\n
(e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'})
\n
verify Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.
\n
Defaults to False.
\n
debug Enable http verbosity option more information
\n
https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel
\n
max_retries Number of maximum retries each connection should attempt.
\n
By default it will retry 3 times in case of connection errors only.\nA 0 value will disable any kind of retries regardless of other retry settings.\nIn case the number of retries is reached a retry exception is raised.
\n
\n

disable_warnings Disable requests warning useful when you have large number of testcases

\n
\n
backoff_factor Introduces a delay time between retries that is longer after each retry.
\n
eg. if backoff_factor is set to 0.1\nthe sleep between attemps will be: 0.0, 0.2, 0.4\nMore info here: https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html
\n
retry_method_list List of uppercased HTTP method verbs where retries are allowed.
\n
By default retries are allowed only on HTTP requests methods that are considered to be\nidempotent (multiple requests with the same parameters end with the same state).\neg. set to ['POST', 'GET'] to retry only those kind of requests.
\n
retry_status_list List of integer HTTP status codes that, if returned, a retry is attempted.
\n
eg. set to [502, 503] to retry requests if those status are returned.\nNote that max_retries must be greater than 0.
\n
\n
\n", @@ -60137,10 +60137,10 @@ "name": "retry_method_list", "types": [], "typedocs": {}, - "defaultValue": "['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']", + "defaultValue": "['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "retry_method_list=['HEAD', 'OPTIONS', 'TRACE', 'GET', 'DELETE', 'PUT']" + "repr": "retry_method_list=['HEAD', 'TRACE', 'PUT', 'OPTIONS', 'GET', 'DELETE']" } ], "doc": "
\n

Create Session: create a HTTP session to a server

\n

alias Robot Framework alias to identify the session

\n

url Base url of the server

\n

headers Dictionary of default headers

\n

cookies Dictionary of cookies

\n

auth List of username & password for HTTP Basic Auth

\n

timeout Connection timeout

\n
\n
proxies Dictionary mapping protocol or protocol and host to the URL of the proxy
\n
(e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'})
\n
\n

verify Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.

\n
\n
debug Enable http verbosity option more information
\n
https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel
\n
max_retries Number of maximum retries each connection should attempt.
\n
By default it will retry 3 times in case of connection errors only.\nA 0 value will disable any kind of retries regardless of other retry settings.\nIn case the number of retries is reached a retry exception is raised.
\n
\n

disable_warnings Disable requests warning useful when you have large number of testcases

\n
\n
backoff_factor Introduces a delay time between retries that is longer after each retry.
\n
eg. if backoff_factor is set to 0.1\nthe sleep between attemps will be: 0.0, 0.2, 0.4\nMore info here: https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html
\n
retry_method_list List of uppercased HTTP method verbs where retries are allowed.
\n
By default retries are allowed only on HTTP requests methods that are considered to be\nidempotent (multiple requests with the same parameters end with the same state).\neg. set to ['POST', 'GET'] to retry only those kind of requests.
\n
retry_status_list List of integer HTTP status codes that, if returned, a retry is attempted.
\n
eg. set to [502, 503] to retry requests if those status are returned.\nNote that max_retries must be greater than 0.
\n
\n
\n", @@ -61519,7 +61519,7 @@ "name": "RPA.Hubspot", "doc": "
\n

Hubspot is a library for accessing HubSpot using REST API. It\nextends hubspot-api-client.

\n

Current features of this library focus on retrieving CRM object data\nfrom HubSpot via API. For additional information, see\nUnderstanding the CRM.

\n
\n

Using Date Times When Searching

\n

When using date times with the Hubspot API, you must provide\nthem as Unix-style epoch timestamps (with milliseconds), which can be obtained\nusing the DateTime library's Convert Date with the\nargument result_format=epoch. The resulting timestamp string\nwill be a float, but the API only accepts integers, so you must\nmultiply the resulting timestamp by 1,000 and then round it to\nthe nearest integar to include in API calls (i.e., the resulting\ninteger sent to the API must have 13 digits as of March 18, 2022).

\n

Robot framework example usage:

\n
\n*** Settings ***\nLibrary     DateTime\nLibrary     RPA.Hubspot\nTask Setup  Authorize Hubspot\n\n*** Tasks ***\nSearch with date\n    ${yesterday}=    Get current date    increment=-24h   result_format=epoch\n    ${yesterday_hs_ts}=    Evaluate    round(${yesterday} * 1000)\n    ${deals}=    Search for objects    DEALS\n    ...    hs_lastmodifieddate    GTE    ${yesterday_hs_ts}\n
\n

Python example usage

\n
\nfrom robot.libraries.DateTime import get_current_date, subtract_time_from_date\nfrom RPA.Hubspot import Hubspot\nfrom RPA.Robocorp.Vault import Vault\n\nsecrets = Vault().get_secret("hubspot")\n\nhs = Hubspot(hubspot_apikey=secrets["api_key"])\nyesterday = round(\n    subtract_time_from_date(get_current_date(), "24h", result_format="epoch") * 1000\n)\ndeals = hs.search_for_objects("DEALS", "hs_lastmodifieddate", "GTE", yesterday)\nprint(deals)\n
\n
\n
\n

Batch Inputs

\n

When retrieving information, the library automatically batches requests\nthat are provided as lists, see Get object keyword for an example,\nbut when wishing to create or update many objects, the library provides\na batching system.

\n

In order to start a batch, you must first call the Create new batch\nkeyword. This initializes a new batch to accept inputs. If a batch\nalready exists when you call this keyword, it will be lost and a new\nblank one will be started.

\n

Once the batch has been initialized, you can add inputs one at a time with\nAdd input to batch or many at a time with Extend batch with inputs.

\n

In order to finally send the batch to HubSpot, you must call\nExecute batch. The final keyword will return the created or updated\nobjects from HubSpot. New object IDs can be obtained from the id\nproperty, see the SimplePublicObject reference.

\n

Robot framework example:

\n
\n*** Settings ***\nLibrary         RPA.Hubspot\nLibrary         RPA.Robocorp.Vault\nTask Setup      Authorize Hubspot\n\n*** Tasks ***\nCreate objects via batch\n    Create new batch\n    Add input to batch    name=Nokia    country=Finland\n    Add input to batch    name=Google    country=USA\n    ${new_companies}=    Execute batch\n    Log    The first new company added has the new id ${{$new_companies[0].id}}\n\n*** Keywords ***\nAuthorize Hubspot\n    ${secrets}=    Get secret    hubspot\n    Auth with api key    ${secrets}[API_KEY]\n
\n

Python example:

\n

NOTE: When executing a batch input in Python, you can directly import the\nBatchInputFactory class to use to create your batch input before\nexecuting the batch.

\n
\nfrom RPA.Hubspot import Hubspot, BatchInputFactory, BatchMode\nfrom RPA.Robocorp.Vault import RobocorpVault\n\n\nvault = RobocorpVault()\nsecrets = vault.get_secret("hubspot")\n\nhs = Hubspot(secrets["API_KEY"])\n\nbatch = BatchInputFactory(BatchMode.UPDATE, "company")\nbatch.extend_inputs(\n    [\n        {"name": "Nokia's New Name", "city": "Espoo"},\n        {"name": "Alphabet", "city": "Mountain View"},\n    ],\n    ["1001", "1002"],\n)\nhs.batch_input = batch\nupdated_companies = hs.execute_batch()\nprint(\n    "Companies have been updated:\\\\n" +\n    "\\\\n".join([str(c) for c in updated_companies])\n)\n
\n
\n
\n

Information Caching

\n

This library loads custom object schemas and pipelines into memory\nthe first time when keywords using them are called. These cached versions\nare recalled unless the use_cache is set to False, where available.

\n
\n
\n

Custom Object Types

\n

All keywords that request a parameter of object_type can accept\ncustom object type names as long as they are properly configured in\nHubSpot. The system will lookup the custom object ID using the\nprovided name against the configured name or one of the configured\nlabels (e.g., "singular" and "plural" types of the name).

\n
\n
\n

HubSpot Object Reference

\n

This section describes the types of objects returned by this Library\nand their associated attributes. These attributes can be accessed via\ndot-notation as described in the Attribute Access section below.

\n
\n

Attribute Access

\n

Keywords return native Python Hubspot objects, rather than common Robot\nFramework types. These types have sets of defined attributes allowing\nfor dot-notation access of object properties. Properties (e.g.,\nthose configured in Hubspot settings for each object) will be\naccessible in a Python dictionary attached to the properties attribute\nof the returned object. See the Attribute Definitions section for\ndetails of that associated attributes for all types returned by this\nlibrary.

\n

Example usage retrieving the city property of a Company object:

\n

Robot framework example:

\n
\n*** Settings ***\nLibrary         RPA.Hubspot\nLibrary         RPA.Robocorp.Vault\n\nTask Setup      Authorize Hubspot\n\n*** Variables ***\n${ACCOUNT_NOKIA}    6818764598\n\n*** Tasks ***\nObtain city information from Hubspot\n    ${account}=    Get object    COMPANY    ${ACCOUNT_NOKIA}\n    Log    The city for account number ${ACCOUNT_NOKIA} is ${account.properties}[city]\n\n*** Keywords ***\nAuthorize Hubspot\n    ${secrets}=    Get secret    hubspot\n    Auth with api key    ${secrets}[API_KEY]\n
\n

Python example:

\n
\nfrom RPA.Hubspot import Hubspot\nfrom RPA.Robocorp.Vault import RobocorpVault\n\nvault = RobocorpVault()\nsecrets = vault.get_secret("hubspot")\n\nhs = Hubspot(secrets["API_KEY"])\nnokia_account_id = "6818764598"\naccount = hs.get_object("COMPANY", nokia_account_id)\nprint(f"The city for account number {nokia_account_id} is {account.properties['city']}")\n
\n
\n
\n

Attribute Definitions

\n

This library can return various types of objects, whose attributes\nare only accessible via dot-notation. The below reference describes\nthe attributes available on these objects.

\n
\n

SimplePublicObject

\n

An object in HubSpot. The object itself does not describe what type\nit represents.

\n
\n
id : str
\n
The HubSpot ID of the object.
\n
properties : Dict[str, str]
\n
A dictionary representing all returned properties associated\nto this object. Properties must be accessed as via standard\ndictionary subscription, e.g., properties["name"].
\n
created_at : datetime
\n
The timestamp when this object was created in HubSpot.
\n
updated_at : datetime
\n
The last modified timestamp for this object.
\n
archived : bool
\n
Whether this object is archived.
\n
archived_at : datetime
\n
The timestamp when this object was archived.
\n
\n
\n
\n

SimplePublicObjectWithAssociations

\n

An object in HubSpot including associations to other objects. The\nobject itself does not describe what type it represents.

\n
\n
id : str
\n
The HubSpot ID of the object.
\n
properties : Dict[str, str]
\n
A dictionary representing all returned properties associated\nto this object. Properties must be accessed as via standard\ndictionary subscription, e.g., properties["name"].
\n
created_at : datetime
\n
The timestamp when this object was created in HubSpot.
\n
updated_at : datetime
\n
The last modified timestamp for this object.
\n
archived : bool
\n
Whether this object is archived.
\n
archived_at : datetime
\n
The timestamp when this object was archived.
\n
associations : Dict[str, CollectionResponseAssociatedId]
\n
A dictionary whose key will be the requested association type, e.g.,\ncompanies and associated value will be a container object\nwith all the associations. See CollectionResponseAssociatedId.
\n
\n
\n
\n

AssociatedId

\n

The ID of an associated object, as well as the type of association.

\n
\n
id : str
\n
The ID of the associated HubSpot object.
\n
type : str
\n
The type of association, e.g., deals_to_companies.
\n
\n
\n
\n

CollectionResponseAssociatedId

\n

A container object for a collection of AssociatedId objects returned\nby the API.

\n
\n
results : List[AssociatedId]
\n
The list of AssociatedId objects returned by the API.
\n
paging : Paging
\n
Used by this library to assist with retreiving multi-page\nAPI responses.
\n
\n
\n
\n

Pipeline

\n

A pipeline represents the steps objects travel through within HubSpot.

\n
\n
id : str
\n
The HubSpot ID for the pipeline. All accounts start with one\npipeline with the id default.
\n
label : str
\n
The human-readabel label for the pipeline.
\n
stages : List[PipelineStage]
\n
A list of PipelineStage objects in the order the object would\nfollow through the pipeline.
\n
created_at : datetime
\n
The timestamp when this pipeline was created in HubSpot.
\n
updated_at : datetime
\n
The last modified timestamp for this pipeline.
\n
archived : bool
\n
Whether this pipeline is archived.
\n
display_order : int
\n
The place in the list of pipelines where this pipeline is shown\nin the HubSpot UI.
\n
\n
\n
\n

PipelineStage

\n

A pipeline stage is one of the various stages defined in a Pipeline.

\n
\n
id : str
\n
The HubSpot ID of the stage.
\n
label : str
\n
The human-readabel label for the stage.
\n
metadata : Dict[str, str]
\n
A dictionary of additional data associated with ths stage, such\nas probability.
\n
created_at : datetime
\n
The timestamp when this stage was created in HubSpot.
\n
updated_at : datetime
\n
The last modified timestamp for this stage.
\n
archived : bool
\n
Whether this stage is archived.
\n
archived_at : datetime
\n
The timestamp when this stage was archived.
\n
\n
\n
\n

PublicOwner

\n

An owner in HubSpot. Owners of companies and deals are responsible\nfor driving a sale to close or similar.

\n
\n
id : str
\n
The HubSpot ID of the owner.
\n
email : str
\n
The owner's email address in HubSpot.
\n
first_name : str
\n
The owner's first name.
\n
last_name : str
\n
The owner's last name.
\n
user_id : int
\n
The associated user ID if the owner is a HubSpot user.
\n
created_at : datetime
\n
The timestamp when this owner was created in HubSpot.
\n
updated_at : datetime
\n
The last modified timestamp for this owner.
\n
archived : bool
\n
Whether this owner is archived.
\n
teams : List[PublicTeam]
\n
A list of teams the owner is in. See PublicTeam.
\n
\n
\n
\n

PublicTeam

\n

A team of owners in HubSpot

\n
\n
id : str
\n
The HubSpot ID of the Team.
\n
name : str
\n
The Team's name.
\n
membership : str
\n
One of PRIMARY, SECONDARY, or CHILD.
\n
\n
\n
\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:19", + "generated": "2024-04-03 10:12:25", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -62695,7 +62695,7 @@ "name": "RPA.Images", "doc": "
\n

Images is a library for general image manipulation.\nFor image-based desktop automation, use the RPA.Desktop library.

\n

Coordinates

\n

The coordinates used in the library are pairs of x and y values that\nrepresent pixels. The upper left corner of the image or screen\nis (0, 0). The x-coordinate increases towards the right, and the y-coordinate\nincreases towards the bottom.

\n

Regions are represented as tuples of (left, top, right, bottom). For example,\na 400 by 200-pixel region in the upper left corner would be (0, 0, 400, 200).

\n

Template matching

\n

Template matching refers to an operation where the (potential) location of\na smaller image is searched from a larger image. It can be used for verifying\ncertain conditions or locating UI elements for desktop or web automation.

\n

Requirements

\n

The default installation depends on Pillow\nlibrary, which is used for general image manipulation operations.

\n

For more robust and faster template matching, the library can use a combination\nof NumPy and OpenCV.\nThey can be installed by opting in to the recognition dependency:

\n

pip install rpaframework rpaframework-recognition

\n

Examples

\n

Robot Framework

\n

The Images library can be imported and used directly in Robot Framework,\nfor instance, for capturing screenshots or verifying something on the screen.

\n

Desktop automation based on images should be done using the corresponding\ndesktop library, i.e. RPA.Desktop.

\n
\n*** Settings ***\nLibrary    RPA.Images\n\n*** Keywords ***\nShould show success\n    [Documentation]    Raises ImageNotFoundError if success image is not on screen\n    Find template on screen    ${CURDIR}${/}success.png\n\nSave screenshot to results\n    [Documentation]    Saves screenshot of desktop with unique name\n    ${timestamp}=      Get current date    result_format=%H%M%S\n    Take screenshot    filename=${OUTPUT_DIR}${/}desktop_${timestamp}.png\n
\n

Python

\n
\nfrom RPA.Images import Images\n\ndef draw_matches_on_image(source, template):\n    matches = lib.find_template_in_image(source, template)\n    for match in matches:\n        lib.show_region_in_image(source, match)\n\n    source.save("matches.png")\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:19", + "generated": "2024-04-03 10:12:25", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -62882,7 +62882,7 @@ "name": "RPA.JSON", "doc": "
\n

JSON is a library for manipulating JSON files and strings.

\n

JSON is a common data interchange format inspired by a subset of\nthe Javascript programming language, but these days is a de facto\nstandard in modern web APIs and is language agnostic.

\n
\n

Serialization

\n

The term serialization refers to the process of converting\nRobot Framework or Python types to JSON or the other way around.

\n

Basic types can be easily converted between the domains,\nand the mapping is as follows:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
JSONPython
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone
\n
\n
\n

About JSONPath

\n

Reading and writing values from/to JSON serializable objects is done\nusing JSONPath. It's a syntax designed to quickly and easily refer to\nspecific elements in a JSON structure. The specific flavor used in this\nlibrary is based on jsonpath-ng.

\n

Compared to Python's normal dictionary access, JSONPath expressions can\ntarget multiple elements through features such as conditionals and wildcards,\nwhich can simplify many JSON-related operations. It's analogous to XPath\nfor XML structures.

\n
\n

Syntax example

\n

For this example consider the following structure:

\n
\n{\n  "clients": [\n    {\n      "name": "Johnny Example",\n      "email": "john@example.com",\n      "orders": [\n          {"address": "Streetroad 123", "price": 103.20},\n          {"address": "Streetroad 123", "price": 98.99}\n      ]\n    },\n    {\n      "name": "Jane Example",\n      "email": "jane@example.com",\n      "orders": [\n          {"address": "Waypath 321", "price": 22.00},\n          {"address": "Streetroad 123", "price": 2330.01}\n      ]\n    }\n  ]\n}\n
\n

In the simplest case JSONPath can replace nested access:

\n
\n*** Tasks ***\nNested access\n    # First order of first client, with direct dictionary access\n    ${value}=    Set variable    ${json}["clients"][0]["orders"][0]\n\n    # JSONPath access\n    ${value}=    Get value from JSON    ${json}    $.clients[0].orders[0]\n
\n

But the power comes from complicated expressions:

\n
\n*** Tasks ***\nComplicated expressions\n    # Find delivery addresses for all orders\n    ${prices}=        Get values from JSON    $..address\n\n    # Find orders that cost over 100\n    ${expensives}=    Get values from JSON    $..orders[?(@.price>100)]\n
\n
\n
\n

Supported Expressions

\n

The supported syntax elements are:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ElementDescription
$Root object/element
@Current object/element inside expressions
. or []Child operator
..Recursive descendant operator
`parent`Parent operator, see functions
*Wilcard, any element
,Select multiple fields
[n]Array index
[a:b:c]Array slice (start, end, step)
[a,b]Union of indices or names
[?()]Apply a filter expression
()Script expression
[\\\\field]Sort descending by field, cannot be combined with\nfilters.
[/field]Sort ascending by field, cannot be combined with\nfilters.
`str()`Convert value to string, see functions
`sub()`Regex substitution function, see functions
`len`Calculate value's length, see functions
`split()`String split function, see functions
+ - * /Arithmetic functions, see functions
\n
\n

Functions

\n

This library allows JSON path expressions to include certain functions\nwhich can provide additional benefit to users. These functions are\ngenerally encapsulated in backticks (`). Some functions require\nyou to pass arguments similar to a Python function.

\n

For example, let's say a JSON has nodes on the JSON path\n$.books[*].genres which are represented as strings of genres with\ncommas separating each genre. So for one book, this node might have a\nvalue like horror,young-adult. You can return a list of first genre\nfor each book by using the split function like so:

\n
\n*** Task ***\nGet genres\n    ${genres}=  Get values from JSON    $.books[*].genres.`split(,, 0, -1)`\n
\n

Each functions parameters are defined here:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
FunctionUsage
str()No parameters, but parenthesis are required
sub(/regex/, repl)The regex pattern must be provided in regex\nand the replacement value provided in repl
lenNo parameters and no parenthesis
split(char, segment, max_split)Separator character provided as char, which\nindex from the resulting array to be returns\nprovided as segment, and maximum number of\nsplits to perform provided as max_split,\n-1 for all splits.
parentNo parameters, no parenthesis
\n

Arithmetic Functions

\n

JSON Path can be written and combined to concatenate string values\nor perform arithmetic functions on numerical values. Each JSONPath\nexpression used must return the same type, and when performing\nsuch functions between returned lists, each list must be the same\nlength. An example is included in documentation for the keyword\nGet values from JSON.

\n
\n
\n

Additional Information

\n

There are a multitude of different script expressions\nin addition to the elements listed above, which can\nbe seen in the aforementioned article.

\n

For further library usage examples, see the individual keywords.

\n
\n
\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:19", + "generated": "2024-04-03 10:12:25", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -63538,7 +63538,7 @@ "name": "RPA.JavaAccessBridge", "doc": "
\n

Java application UI automation library using Java Access Bridge technology.

\n

The library utilizes java-access-bridge-wrapper package to interact with\nJava UI. Currently only the 64-bit Windows OS is supported.

\n

Inspecting elements

\n

We have built an Assistant for working with Java application's element structure and Java locators.\nThe Assistant provides copy-paste-able locators for each element and also allows testing locators against\nselected application.

\n

If our tools fail to pick the locator from your target application, there is always the\nAccess Bridge Explorer from Google that enables you to see the raw view. Please note that\nAccess Bridge Explorer repository has been archived on July 27, 2022 and is no longer actively\nmaintained.

\n

The Accessibility Insights for Windows can show element properties if application framework\nsupports Windows UI Automation (UIA), see more at using Accessibility Insights. Then the recommended\nlibrary would be RPA.Windows library.

\n

Steps to enable

\n
\n
    \n
  1. Enable the Java Access Bridge in Windows
  2. \n
  3. Set environment variable RC_JAVA_ACCESS_BRIDGE_DLL as an absolute path to WindowsAccessBridge-64.dll.\nIt is also possible to give DLL location as library initialization parameter access_bridge_path.
  4. \n
\n
\nC:\\path\\to\\java\\bin\\jabswitch -enable\nset RC_JAVA_ACCESS_BRIDGE_DLL=C:\\path\\to\\Java\\bin\\WindowsAccessBridge-64.dll\n
\n
\n*** Settings ***\nLibrary   RPA.JavaAccessBridge   access_bridge_path=C:\\path\\to\\Java\\bin\\WindowsAccessBridge-64.dll\n
\n
\n

About Java wrapper callbacks and actions

\n

There might be a compatibility issue with callbacks and actions on target Java application. Possible reasons:

\n
    \n
  • target application is executed with 32-bit Java
  • \n
  • target application does not support callbacks and/or actions
  • \n
\n

Workaround for this situation is to initialize JavaAccessBridge library with parameter ignore_callbacks=True.\nThen application's element information is still accessible and any actions on those elements can be performed\nwith RPA.Desktop library. Keep in mind that you can still manuall refresh an element with Refresh Element.

\n

Note. There are still keywords, for example. Call Element Action, which will cause error if used in this\nsituation.

\n
\n*** Settings ***\nLibrary   RPA.JavaAccessBridge   ignore_callbacks=True\n
\n

Controlling the Java window

\n

Keyword for this purpose is Select Window. Window selection is based on the title parameter, which can be\ngiven as a regular expressions to match the correct window. The keyword brings the window into focus and initially\nreads window's element structure.

\n

Locating elements

\n

To automate actions on the Java application, the robot needs locations to various elements\nusing a feature called Java locators. Locator describes properties of an element.

\n

At the moment library contains basic level support for locators.

\n

The common locator types are name and role.

\n

To identify element with more than one property and can be used, for example:

\n
\n
\nrole:push button and name:Clear\n
\n
\n

To address element within parent element > can be used, for example:

\n
\n
\nname:Find Purchase Orders > name:NumberField\n
\n
\n

Some keywords accept element as an parameter in place of locator.

\n

New locator type strict has been added in rpaframework==12.5.0. Currently\nproperty values of string type have been evaluated with startsWith which\ncan match several property values. With strict set in the locator string,\nall locator on the right side of this definition will be matched using\nstrict (equal matching), example:

\n
\n
\n# without strict, name can be 'Type', 'Type1', 'Type of'...\nGet Elements   role:push button and name:Type\n# name must be equal to 'Type'\nGet Elements  role:push button and strict:True and name:Type\n
\n
\n

Keyword Get Elements has extra parameter strict, which when set to\nTrue forces all locator value matches to be strict, example:

\n
\n
\n# without strict, name can be 'Type', 'Type1', 'Type of'...\nGet Elements  role:push button and name:Type\n# name must be equal to 'Type' and role must be equal to 'text'\nGet Elements  role:text and name:Type  strict=True\n
\n
\n

About JavaElement object

\n

The JavaElement was added in rpaframework==12.3.0 for easy access into\nContextNode objects which have been returned by Get Elements keyword.

\n

Keyword Get Elements still returns ContextNode objects, but with parameter\njava_elements=True the keyword returns JavaElement objects instead (they\nstill contain reference to ContextNode object via node property, e.g.\nJavaObject.node).

\n

Properties and methods included in the JavaElement:

\n
    \n
  • name: str
  • \n
  • role: str
  • \n
  • description: str
  • \n
  • states: list # list presentation of states (string)
  • \n
  • ancestry: int # you can set the maximum depth based on this
  • \n
  • checked: bool
  • \n
  • selected: bool
  • \n
  • visible: bool
  • \n
  • enabled: bool
  • \n
  • showing: bool
  • \n
  • focusable: bool
  • \n
  • states_string: str
  • \n
  • x: int # left coordinate of the element
  • \n
  • y: int # top coordinate of the element
  • \n
  • width: int
  • \n
  • height: int
  • \n
  • node: ContextNode # original ContextNode
  • \n
  • row: int # table row, -1 if element is not member of table
  • \n
  • col: int # table column, -1 if element is not member of table
  • \n
  • text: str # text content of the element
  • \n
  • column_count: int # table column count
  • \n
  • visible_children: list # visible children elements of this element
  • \n
  • visible_children_count: int
  • \n
  • index_in_parent: int # position in the parent
  • \n
  • click() # method for clicking element center
  • \n
  • type_text() # method for typing text into element (if possible)
  • \n
\n

Interacting with elements

\n

By default application elements are interacted with Actions supported by the element.\nMost common example is click action supported by an button element.

\n

But because application and technology support for the actions might be limited, it is also\npossible to opt for interaction elements by their coordinates by giving keyword parameter\naction=False if parameter is available.

\n

Examples

\n

robotframework

\n
\n*** Settings ***\nLibrary   RPA.JavaAccessBridge\nLibrary   Process\n\n*** Tasks ***\nWrite text into Swing application\n    Start Process    java -jar BasicSwing.jar\n    ...              shell=${TRUE}\n    ...              cwd=${CURDIR}\n    Select Window    Chat Frame\n    Type Text    role:text\n    ...          text for the textarea\n    Type Text    role:text\n    ...          text for the input field\n    ...          index=1\n    ...          clear=${TRUE}\n    Click Element    role:push button and name:Send\n
\n

Python

\n
\nfrom RPA.JavaAccessBridge import JavaAccessBridge\nimport subprocess\n\njab = JavaAccessBridge()\n\nsubprocess.Popen(\n    ["java", "-jar", "BasicSwing.jar"],\n    shell=True,\n    cwd=".",\n    close_fds=True\n)\njab.select_window("Chat Frame")\njab.type_text(\n    "role:text",\n    "text for the textarea",\n    enter=True\n)\njab.type_text(\n    "role:text",\n    "text for the input field",\n    index=1,\n    clear=True\n)\njab.click_element("role:push button and name:Send")\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:19", + "generated": "2024-04-03 10:12:25", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -64852,7 +64852,7 @@ "name": "RPA.MFA", "doc": "
\n

RPA.MFA is a library intended mainly for generating one-time passwords (OTP)\nand not only, as OAuth2 support was introduced lately.

\n

Library requires at the minimum rpaframework version 19.4.0.

\n

Based on the pyotp and\nrequests_oauthlib packages. It\nprovides support for both MFA with the * OTP related keywords and OAuth2\n"Authorization Code Flow" with the * OAuth * related keywords.

\n

In the below example the mfa secret we are reading from the Robocorp\nVault is the passcode generated by the Authenticator service. The passcode\nvalue is stored into the Vault with key otpsecret.

\n

Passcode is typically a long string (16-32 characters), which is provided\nin a form of QR image, but it can be obtained by requesting access to a string.

\n

Note that same code can be used to add a mobile phone as a duplicate authentication\ndevice at the same time when the same code is added into the Vault.

\n

Robot framework example usage:

\n
\n*** Settings ***\nLibrary     RPA.MFA\nLibrary     RPA.Robocorp.Vault\n\n*** Tasks ***\nGenerate time based code\n    ${secrets}=    Get Secret   mfa\n    ${code}=    Get Time Based OTP    ${secrets}[otpsecret]\n
\n

Python example usage

\n
\nfrom RPA.MFA import MFA\nfrom RPA.Robocorp.Vault import Vault\n\n\ndef main():\n    secrets = Vault().get_secret("mfa")\n    code = MFA().get_time_based_otp(secrets["otpsecret"])\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:19", + "generated": "2024-04-03 10:12:25", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -65402,7 +65402,7 @@ "name": "RPA.MSGraph", "doc": "
\n

The MSGraph library wraps the O365 package, giving robots\nthe ability to access the Microsoft Graph API programmatically.

\n

OAuth Configuration

\n

Graph's API primarily authenticates via the OAuth 2.0 authorization code grant\nflow or OpenID Connect. This library exposes the OAuth 2.0 flow for robots to\nauthenticate on behalf of users. A user must complete an initial authentication\nflow with the help of our OAuth Graph Example Bot.

\n

For best results, register an app in Azure AD and configure it as so:

\n
    \n
  • The type is "Web App".
  • \n
  • Redirect URI should be https://login.microsoftonline.com/common/oauth2/nativeclient
  • \n
  • The app should be a multi-tenant app.
  • \n
  • Accounts in any organizational directory is checked.
  • \n
  • Has relevant permissions enabled, check the Microsoft Graph permissions reference\nfor a list of permissions available to MS Graph apps.
  • \n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:19", + "generated": "2024-04-03 10:12:26", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -66749,7 +66749,7 @@ "name": "RPA.Netsuite", "doc": "
\n

Netsuite is a library for accessing Netsuite using NetSuite SOAP web service SuiteTalk.\nThe library extends the netsuitesdk library.

\n

More information available at NetSuite SOAP webservice SuiteTalk.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary     RPA.Netsuite\nLibrary     RPA.Excel.Files\nLibrary     RPA.Tables\nTask Setup  Authorize Netsuite\n\n*** Tasks ***\nGet data from Netsuite and Store into Excel files\n    ${accounts}=        Get Accounts   account_type=_expense\n    ${accounts}=        Create table    ${accounts}\n    Create Workbook\n    Append Rows To Worksheet  ${accounts}\n    Save Workbook       netsuite_accounts.xlsx\n    Close Workbook\n    ${bills}=           Get Vendor Bills\n    ${bills}=           Create table    ${bills}\n    Create Workbook\n    Append Rows To Worksheet  ${bills}\n    Save Workbook       netsuite_bills.xlsx\n    Close Workbook\n\n\n*** Keywords ***\nAuthorize Netsuite\n    ${secrets}=     Get Secret   netsuite\n    Connect\n    ...        account=${secrets}[ACCOUNT]\n    ...        consumer_key=${secrets}[CONSUMER_KEY]\n    ...        consumer_secret=${secrets}[CONSUMER_KEY]\n    ...        token_key=${secrets}[CONSUMER_SECRET]\n    ...        token_secret=${secrets}[TOKEN_KEY]\n
\n

Python

\n
\nfrom RPA.Netsuite import Netsuite\n\nns = Netsuite()\nns.connect()\naccounts = ns.get_accounts()\ncurrencies = ns.get_currencies()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:20", + "generated": "2024-04-03 10:12:26", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -67298,7 +67298,7 @@ "name": "RPA.Notifier", "doc": "
\n

Notifier is a library interfacting with different notification providers.

\n

Supported providers

\n
    \n
  • email
  • \n
  • gmail
  • \n
  • pushover
  • \n
  • slack
  • \n
  • telegram
  • \n
  • twilio
  • \n
\n

Providers not supported yet via specific keywords

\n
    \n
  • gitter
  • \n
  • join
  • \n
  • mailgun
  • \n
  • pagerduty
  • \n
  • popcornnotify
  • \n
  • pushbullet
  • \n
  • simplepush
  • \n
  • statuspage
  • \n
  • zulip
  • \n
\n

There is a keyword Generic Notify which can be used\nto call above services, for example.

\n
\nGeneric Notify\n    provider_name=gitter\n    message=Hello from Robot\n    token=TOKEN\n    room_id=ID_OF_THE_GITTER_ROOM\n
\n

Parameters for different providers can be read from the\nNotifiers documents (link below).

\n

Read more at https://notifiers.readthedocs.io/en/latest/

\n

About kwargs

\n

The **kwargs is a term for any extra named parameters, which\ncan be included in the same way as already named arguments,\ne.g. Notify Email could be called with subject=my email subject\nwhich will be passed through **kwargs.

\n

Notifier documentation contains information about all possible\narguments that different providers support.

\n

Robot Framework

\n
\n&{account}=    Create Dictionary\n...    host=smtp.office365.com\n...    username=ACCOUNT_USERNAME\n...    password=ACCOUNT_PASSWORD\nNotify Email\n...    to=RECIPIENT_EMAIL\n...    from_=SENDER_ADDRESS            # passed via kwargs\n...    subject=Hello from the Robot    # passed via kwargs\n...    message=Hello from the Robot\n...    &{account}                      # passed via kwargs\n
\n
\nnotifier = Notifier()\naccount = {\n    "host": "smtp.office365.com",\n    "username": "EMAIL_USERNAME",\n    "password": "EMAIL_PASSWORD"\n}\nnotifier.email_notify(\n    to="RECIPIENT_EMAIL",\n    from_="SENDER_EMAIL",\n    subject="Hello from the Python Robot",\n    message="Hello from the Python RObot",\n    **account\n)\n
\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary  RPA.Notifier\n\n*** Variables ***\n${SLACK_WEBHOOK}   https://hooks.slack.com/services/WEBHOOKDETAILS\n${CHANNEL}         notification-channel\n\n*** Tasks ***\nLets notify\n   Notify Slack   message from robot  channel=${CHANNEL}  webhook_url=${SLACK_WEBHOOK}\n
\n

Python

\n
\nfrom RPA.Notifier import Notifier\n\nlibrary = Notifier()\n\nslack_attachments = [\n   {\n      "title": "attachment 1",\n      "fallback": "liverpool logo",\n      "image_url": "https://upload.wikimedia.org/wikipedia/fi/thumb/c/cd/Liverpool_FC-n_logo.svg/1200px-Liverpool_FC-n_logo.svg.png",\n   }\n]\n\nlibrary.notify_slack(\n   message='message for the Slack',\n   channel="notification-channel",\n   webhook_url=slack_webhook_url,\n   attachments=slack_attachments,\n)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:20", + "generated": "2024-04-03 10:12:26", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -67896,7 +67896,7 @@ "name": "RPA.OpenAI", "doc": "
\n

Library to support OpenAI and Azure OpenAI services.

\n

Library is not included in the rpaframework package, so in order to use it\nyou have to add rpaframework-openai with the desired version in your\nconda.yaml file.

\n

Robot Framework example usage

\n
\n*** Settings ***\nLibrary    RPA.Robocorp.Vault\nLibrary    RPA.OpenAI\n\n*** Tasks ***\nCreate a text completion\n    ${secrets}   Get Secret   secret_name=OpenAI\n    Authorize To OpenAI   api_key=${secrets}[key]\n    ${completion}    Completion Create\n    ...     Write a tagline for an ice cream shop\n    ...     temperature=0.6\n    Log   ${completion}\n
\n

Python example usage

\n
\nfrom RPA.Robocorp.Vault import Vault\nfrom RPA.OpenAI import OpenAI\n\nsecrets = Vault().get_secret("OpenAI")\nbaselib = OpenAI()\nbaselib.authorize_to_openai(secrets["key"])\n\nresult = baselib.completion_create(\n    Create a tagline for icecream shop',\n    temperature=0.6,\n)\nprint(result)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:20", + "generated": "2024-04-03 10:12:26", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -68459,7 +68459,7 @@ "name": "RPA.Outlook.Application", "doc": "
\n

Outlook.Application is a library for controlling the Outlook application.

\n

About Email Filtering

\n

Emails can be filtered according to specification set by Restrict method of the\nItem class https://docs.microsoft.com/en-us/office/vba/api/outlook.items.restrict.

\n

Couple of examples:

\n
\nGet Emails\n...   email_filter=[Subject]='test email'\n\nMove Emails\n...   email_filter=[SenderEmailAddress]='hello@gmail.com'\n
\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary                 RPA.Outlook.Application\nTask Setup              Open Application\nSuite Teardown          Quit Application\n\n*** Variables ***\n${RECIPIENT}            address@domain.com\n\n*** Tasks ***\nSend email\n    Send Email         recipients=${RECIPIENT}\n    ...                subject=This is the subject\n    ...                body=This is the message body\n    ..                 attachments=approved.png\n
\n

Python

\n
\nfrom RPA.Outlook.Application import Application\n\ndef send_email():\n    app = Application()\n    app.open_application()\n    app.send_email(\n        recipients='EMAILADDRESS_1, EMAILADDRESS_2',\n        subject='email subject',\n        body='email body message',\n        attachments='../orders.csv'\n
\n

For more information, see: https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb219950(v=office.12)

\n

Caveats

\n

This library works on a Windows operating system with UI enabled only, and you must\nensure that you open the app first with Open Application before running any\nother relevant keyword which requires to operate on an open app. The application is\nautomatically closed at the end of the task execution, so this can be changed by\nimporting the library with the autoexit=${False} setting.

\n
\n*** Settings ***\nLibrary     RPA.Excel|Outlook|Word.Application    autoexit=${False}\n
\n

If you're running the Process by Control Room through a custom self-hosted Worker\nservice, then please make sure that you enable an RDP session by ticking "Use\nDesktop Connection" under the Step configuration.

\n

If you still encounter issues with opening a document, please ensure that file can\nbe opened first manually and dismiss any alert potentially blocking the process.

\n

Check the documentation below for more info:

\n\n
\n", "version": "", - "generated": "2024-04-03 09:58:20", + "generated": "2024-04-03 10:12:26", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -69204,7 +69204,7 @@ "name": "RPA.PDF", "doc": "
\n

PDF is a library for managing PDF documents.

\n

It can be used to extract text from PDFs, add watermarks to pages, and\ndecrypt/encrypt documents.

\n

Merging and splitting PDFs is supported by Add Files To PDF keyword. Read\nthe keyword documentation for examples.

\n

There is also limited support for updating form field values. (check\nSet Field Value and Save Field Values for more info)

\n

The input PDF file can be passed as an argument to the keywords, or it can be\nomitted if you first call Open PDF. A reference to the current active PDF will\nbe stored in the library instance and can be changed by using the Switch To PDF\nkeyword with another PDF file path, therefore you can asynchronously work with\nmultiple PDFs.

\n
\n

Attention!

\n

Keep in mind that this library works with text-based PDFs, and it can't\nextract information from an image-based (scan) PDF file. For accurate\nresults, you have to use specialized external services wrapped by the\nRPA.DocumentAI library.

\n
\n

Portal example with video recording demo for parsing PDF invoices:\nhttps://github.com/robocorp/example-parse-pdf-invoice

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary    RPA.PDF\nLibrary    String\n\n*** Tasks ***\nExtract Data From First Page\n    ${text} =    Get Text From PDF    report.pdf\n    ${lines} =     Get Lines Matching Regexp    ${text}[${1}]    .+pain.+\n    Log    ${lines}\n\nGet Invoice Number\n    Open Pdf    invoice.pdf\n    ${matches} =  Find Text    Invoice Number\n    Log List      ${matches}\n\nFill Form Fields\n    Switch To Pdf    form.pdf\n    ${fields} =     Get Input Fields   encoding=utf-16\n    Log Dictionary    ${fields}\n    Set Field Value    Given Name Text Box    Mark\n    Save Field Values    output_path=${OUTPUT_DIR}${/}completed-form.pdf\n    ...                  use_appearances_writer=${True}\n
\n
\nfrom RPA.PDF import PDF\nfrom robot.libraries.String import String\n\npdf = PDF()\nstring = String()\n\ndef extract_data_from_first_page():\n    text = pdf.get_text_from_pdf("report.pdf")\n    lines = string.get_lines_matching_regexp(text[1], ".+pain.+")\n    print(lines)\n\ndef get_invoice_number():\n    pdf.open_pdf("invoice.pdf")\n    matches = pdf.find_text("Invoice Number")\n    for match in matches:\n        print(match)\n\ndef fill_form_fields():\n    pdf.switch_to_pdf("form.pdf")\n    fields = pdf.get_input_fields(encoding="utf-16")\n    for key, value in fields.items():\n        print(f"{key}: {value}")\n    pdf.set_field_value("Given Name Text Box", "Mark")\n    pdf.save_field_values(\n        output_path="completed-form.pdf",\n        use_appearances_writer=True\n    )\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:20", + "generated": "2024-04-03 10:12:26", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -70859,7 +70859,7 @@ "name": "RPA.Robocloud.Items", "doc": "
\n

A library for interacting with Control Room work items.

\n

Work items are used for managing data that go through multiple\nsteps and tasks inside a process. Each step of a process receives\ninput work items from the previous step, and creates output work items for\nthe next step.

\n

Item structure

\n

A work item's data payload is JSON and allows storing anything that is\nserializable. This library by default interacts with payloads that\nare a dictionary of key-value pairs, which it treats as individual\nvariables. These variables can be exposed to the Robot Framework task\nto be used directly.

\n

In addition to the data section, a work item can also contain files,\nwhich are stored by default in Robocorp Control Room. Adding and using\nfiles with work items requires no additional setup from the user.

\n

Loading inputs

\n

The library automatically loads the first input work item, if the\nlibrary input argument autoload is truthy (default).

\n

After an input has been loaded its payload and files can be accessed\nthrough corresponding keywords, and optionally these values can be modified.

\n

E-mail triggering

\n

Since a process can be started in Control Room by sending an e-mail, a body\nin Text/JSON/YAML/HTML format can be sent as well and this gets attached to the\ninput work item with the rawEmail payload variable. This library automatically\nparses the content of it and saves into parsedEmail the dictionary\ntransformation of the original e-mail.

\n

If "Parse email" Control Room configuration option is enabled (recommended), then\nyour e-mail is automatically parsed in the work item under the email payload\nvariable, which is a dictionary containing a body holding the final parsed form\nof the interpreted e-mail body. The payload variable parsedEmail is still\navailable for backwards compatibility reasons and holds the very same body inside\nthe parsedEmail[Body].

\n

E-mail attachments will be added into the work item as files. Read more on:\nhttps://robocorp.com/docs/control-room/attended-or-unattended/email-trigger

\n

Example:

\n

After starting the process by sending an e-mail with a body like:

\n
\n{\n    "message": "Hello world!"\n}\n
\n

The robot can use the parsed e-mail body's dictionary:

\n
\n*** Tasks ***\nUsing Parsed Emails\n    ${mail} =    Get Work Item Variable    email\n    Set Work Item Variables    &{mail}[body]\n    ${message} =     Get Work Item Variable     message\n    Log    ${message}    # will print "Hello world!"\n
\n

The behaviour can be disabled by loading the library with\nauto_parse_email=${None} or altered by providing to it a dictionary with one\n"key: value" where the key is usually "email.text" (deprecated "rawEmail", the\nvariable set by Control Room, which acts as source for the parsed (deprecated raw)\ne-mail data) and the value can be "email.body" (deprecated "parsedEmail", where the\nparsed e-mail data gets stored into), value which can be customized and retrieved\nwith Get Work Item Variable.

\n

Creating outputs

\n

It's possible to create multiple new work items as an output from a\ntask. With the keyword Create Output Work Item a new empty item\nis created as a child for the currently loaded input.

\n

All created output items are sent into the input queue of the next\nstep in the process.

\n

Active work item

\n

Keywords that read or write from a work item always operate on the currently\nactive work item. Usually that is the input item that has been automatically\nloaded when the execution started, but the currently active item is changed\nwhenever the keywords Create Output Work Item or Get Input Work Item\nare called. It's also possible to change the active item manually with the\nkeyword Set current work item.

\n

Saving changes

\n

While a work item is loaded automatically when a suite starts, changes are\nnot automatically reflected back to the source. The work item will be modified\nlocally and then saved when the keyword Save Work Item is called.\nThis also applies to created output work items.

\n

It is recommended to defer saves until all changes have been made to prevent\nleaving work items in a half-modified state in case of failures.

\n

Local Development

\n

While Control Room is the default implementation, it can also be replaced\nwith a custom adapter. The selection is based on either the default_adapter\nargument for the library, or the RPA_WORKITEMS_ADAPTER environment\nvariable. The library has a built-in alternative adapter called FileAdapter for\nstoring work items to disk.

\n

The FileAdapter uses a local JSON file for input work items.\nIt's a list of work items, each of which has a data payload and files.

\n

An example of a local file with one work item:

\n
\n[\n    {\n        "payload": {\n            "variable1": "a-string-value",\n            "variable2": ["a", "list", "value"]\n        },\n        "files": {\n            "file1": "path/to/file.ext"\n        }\n    }\n]\n
\n

Output work items (if any) are saved to an adjacent file\nwith the same name, but with the extension .output.json. You can specify\nthrough the "RPA_OUTPUT_WORKITEM_PATH" env var a different path and name for this\nfile.

\n

Simulating the Cloud with Robocorp Code VSCode Extension

\n

If you are developing in VSCode with the Robocorp Code extension, you can\nutilize the built in local development features described in the\nDeveloping with work items locally section of the\nUsing work items development guide.

\n

Examples

\n

Robot Framework

\n

In the following example a task creates an output work item,\nand attaches some variables to it.

\n
\n*** Settings ***\nLibrary    RPA.Robocorp.WorkItems\n\n*** Tasks ***\nSave variables to Control Room\n    Create Output Work Item\n    Set work item variables    user=Dude    mail=address@company.com\n    Save Work Item\n
\n

In the next step of the process inside a different robot, we can use\npreviously saved work item variables. Also note how the input work item is\nloaded implicitly when the suite starts.

\n
\n*** Settings ***\nLibrary    RPA.Robocorp.WorkItems\n\n*** Tasks ***\nUse variables from Control Room\n    Set task variables from work item\n    Log    Variables are now available: s${user}, ${mail}\n
\n

Python

\n

The library can also be used through Python, but it does not implicitly\nload the first work item.

\n
\nimport logging\nfrom RPA.Robocorp.WorkItems import WorkItems\n\ndef list_variables(item_id):\n    library = WorkItems()\n    library.get_input_work_item()\n\n    variables = library.get_work_item_variables()\n    for variable, value in variables.items():\n        logging.info("%s = %s", variable, value)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -71217,10 +71217,10 @@ "name": "default", "types": [], "typedocs": {}, - "defaultValue": "", + "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "default=" + "repr": "default=" } ], "doc": "
\n

Return a single variable value from the work item,\nor default value if defined and key does not exist.

\n

If key does not exist and default is not defined, raises KeyError.

\n\n\n\n\n\n\n\n\n\n
param name:Name of variable
param default:Default value if key does not exist
\n

Robot Framework Example:

\n
\n*** Tasks ***\nUsing a work item\n    ${username}=    Get work item variable    username    default=guest\n
\n

Python Example:

\n
\nfrom RPA.Robocorp.WorkItems import WorkItems\n\nwi = WorkItems()\nwi.get_input_work_item()\ncustomers = wi.get_work_item_variable("customers")\nprint(customers)\n
\n
\n", @@ -71666,7 +71666,7 @@ "name": "RPA.Robocloud.Secrets", "doc": "
\n

Vault is a library for interacting with secrets stored in the Robocorp\nControl Room Vault (by default) or file-based secrets, which can be taken\ninto use by setting some environment variables.

\n

Robocorp Vault relies on environment variables, which are normally set\nautomatically by the Robocorp Work Agent or Assistant when a run is\ninitialized by the Robocorp Control Room. When developing robots locally\nin VSCode, you can use the Robocorp Code Extension to set these\nvariables automatically as well.

\n

Alternatively, you may set these environment variable manually using\nrcc or directly in some other fashion. The specific variables which\nmust exist are:

\n
    \n
  • RC_API_SECRET_HOST: URL to Robocorp Vault API
  • \n
  • RC_API_SECRET_TOKEN: API Token for Robocorp Vault API
  • \n
  • RC_WORKSPACE_ID: Control Room Workspace ID
  • \n
\n

File-based secrets can be set by defining two environment variables.

\n
    \n
  • RPA_SECRET_MANAGER: RPA.Robocorp.Vault.FileSecrets
  • \n
  • RPA_SECRET_FILE: Absolute path to the secrets database file
  • \n
\n

Example content of local secrets file:

\n
\n{\n    "swaglabs": {\n        "username": "standard_user",\n        "password": "secret_sauce"\n    }\n}\n
\n

OR

\n
\nswaglabs:\n    username: standard_user\n    password: secret_sauce\n
\n

Examples of Using Secrets in a Robot

\n

Robot Framework

\n
\n*** Settings ***\nLibrary    Collections\nLibrary    RPA.Robocorp.Vault\n\n*** Tasks ***\nReading secrets\n    ${secret}=    Get Secret  swaglabs\n    Log Many      ${secret}\n\nModifying secrets\n    ${secret}=          Get Secret      swaglabs\n    ${level}=           Set Log Level   NONE\n    Set To Dictionary   ${secret}       username    nobody\n    Set Log Level       ${level}\n    Set Secret          ${secret}\n
\n

Python

\n
\nfrom RPA.Robocorp.Vault import Vault\n\nVAULT = Vault()\n\ndef reading_secrets():\n    print(f"My secrets: {VAULT.get_secret('swaglabs')}")\n\ndef modifying_secrets():\n    secret = VAULT.get_secret("swaglabs")\n    secret["username"] = "nobody"\n    VAULT.set_secret(secret)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -71786,7 +71786,7 @@ "name": "RPA.Robocorp.Process", "doc": "
\n

A library for interacting with Control Room (CR) Process API endpoints.

\n

See Unattended processes for information about process run, step run and work\nitem states.

\n

See APIs and webhooks for information about Control Room APIs.

\n

The Process API endpoint is defined by RC_API_PROCESS_HOST environment variable,\nwhich is available during Robocorp Workforce Agent runs.

\n

Examples

\n

Robot Framework

\n

In the following example a task creates two input work items,\nand starts a process with those items. This results in 2 different\nprocess runs in the Control Room.

\n
\n*** Settings ***\nLibrary    RPA.Robocorp.Process\nLibrary    RPA.Robocorp.Vault\n\n*** Keywords ***\nInitialize Process Library\n    ${secrets}=  Get Secret  ProcessAPI\n    Set Credentials\n    ...   ${secrets}[workspace_id]\n    ...   ${secrets}[process_id]\n    ...   ${secrets}[apikey]\n\n*** Tasks ***\nStart process with work items\n    [Setup]   Initialize Process Library\n    &{item1}=  Create Dictionary  fname=Mark  lname=Monkey\n    &{item2}=  Create Dictionary  fname=John  lname=Doe\n    @{items}=  Create List  ${item1}   ${item2}\n    Start Process  work_items=${items}  batch=True\n
\n

Robot Framework

\n

In the following example a task creates work item with files.\nTo include files in a work item, the item needs to be created\nbefore starting the process (note. different start keyword than above).

\n

In this example I am using same keywords and settings from above example.

\n
\n*** Tasks ***\nStart process with work items\n    [Setup]   Initialize Process Library\n    &{data}=  Create Dictionary  fname=Mark  lname=Monkey\n    @{files}=  Create List\n    ...   ${CURDIR}${/}workdata.xlsx\n    ...   ${CURDIR}${/}other.csv\n    ${item_id}=    Create Input Work Item\n    ...   payload=${data}\n    ...   files=${files}\n    Start Configured Process\n    ...  config_type=work_items\n    ...  extra_info=${item_id}\n
\n

Download from process runs artifacts all matching files

\n
\n*** Settings ***\nLibrary      RPA.Robocorp.Process\nLibrary      RPA.Robocorp.Vault\nLibrary      RPA.HTTP\nTask Setup   Set Control Room Variables\n\n*** Keywords ***\nDownload Artifacts Matching\n    [Arguments]   ${filematch}\n    @{workitems}=   List Process Work Items\n    FOR  ${item}  IN  @{workitems}\n        @{artifacts}=   List Run Artifacts\n        ...  process_run_id=${item}[processRunId]\n        ...  step_run_id=${item}[activityRunId]\n        FOR  ${artifact}  IN  @{artifacts}\n            IF  "${filematch}"  IN   "${artifact}[fileName]"\n                ${download_link}=   Get Robot Run Artifact\n                ...  process_run_id=${item}[processRunId]\n                ...  step_run_id=${item}[activityRunId]\n                ...  artifact_id=${artifact}[id]\n                ...  filename=${artifact}[fileName]\n                Download\n                ...  url=${download_link}\n                ...  target=%{ROBOT_ARTIFACTS}${/}${artifact}[fileName]\n                ...  overwrite=${TRUE}\n                ...  stream=${TRUE}\n            END\n        END\n    END\n
\n

Python

\n

List work items in Control Room and retry failed items.

\n
\nfrom RPA.Robocorp.Process import Process\nfrom RPA.Robocorp.Vault import Vault\n\nsecrets = Vault().get_secret("ProcessAPI")\nprocess = Process(\n    secrets["workspace_id"],\n    secrets["process_id"],\n    secrets["apikey"]\n)\n\n\ndef retry_failed_items():\n    items = process.list_process_work_items()\n    for item in items:\n        if item["state"] == "FAILED":\n            print("FAILED work item: %s" % item["id"])\n            result = process.retry_work_item(item["id"])\n            print(result)\n\nif __name__ == "__main__":\n    retry_failed_items()\n
\n

Download from process runs artifacts all ".xlsx" files

\n
\nfrom RPA.Robocorp.Process import Process\nfrom RPA.HTTP import HTTP\n\ndef download_artifacts_matching(filematch=".xlsx"):\n    work_items = process.list_process_work_items()\n    for item in work_items:\n        artifacts = process.list_run_artifacts(\n            process_run_id=item["processRunId"],\n            step_run_id=item["activityRunId"]\n        )\n        for artifact in artifacts:\n            if filematch in artifact["fileName"]:\n                download_link = process.get_robot_run_artifact(\n                    process_run_id=item["processRunId"],\n                    step_run_id=item["activityRunId"],\n                    artifact_id=artifact["id"],\n                    filename=artifact["fileName"]\n                )\n                target_filepath = os.path.join(\n                    os.getenv("ROBOT_ARTIFACTS"),\n                    f"{artifact['fileName']}"\n                )\n                HTTP().download(\n                    url=download_link,\n                    target_file=target_filepath,\n                    overwrite=True,\n                    stream=True\n                )\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -72961,7 +72961,7 @@ "name": "RPA.Robocorp.Storage", "doc": "
\n

Control Room Asset Storage library operating with the cloud built-in key-value\nstore.

\n

Library requires at the minimum rpaframework version 24.0.0.

\n

Usage

\n
\n*** Tasks ***\nManage Assets\n    @{assets} =    List Assets\n    Log List    ${assets}\n\n    Set Text Asset    my-asset    My string asset value\n    ${value} =      Get Text Asset       my-asset\n    Log     Asset value: ${value}\n\n    Delete Asset    my-asset\n
\n
\nimport logging\nfrom RPA.Robocorp.Storage import Storage\n\nstorage = Storage()\n\ndef manage_assets():\n    assets = storage.list_assets()\n    logging.info(assets)\n\n    storage.set_text_asset("my-asset", "My string asset value")\n    value = storage.get_text_asset("my-asset")\n    logging.info("Asset value: %s", value)\n\n    storage.delete_asset("my-asset")\n
\n

Caveats

\n

Currently, there's no local file adapter support, therefore you need to be linked\nto Control Room and connected to a Workspace in VSCode before being able to develop\nlocally robots using this functionality.

\n

While the content type can be controlled (during bytes and file setting), it is\ncurrently disabled in this version of the library for simplicity reasons.

\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -73390,7 +73390,7 @@ "name": "RPA.Robocorp.Vault", "doc": "
\n

Vault is a library for interacting with secrets stored in the Robocorp\nControl Room Vault (by default) or file-based secrets, which can be taken\ninto use by setting some environment variables.

\n

Robocorp Vault relies on environment variables, which are normally set\nautomatically by the Robocorp Work Agent or Assistant when a run is\ninitialized by the Robocorp Control Room. When developing robots locally\nin VSCode, you can use the Robocorp Code Extension to set these\nvariables automatically as well.

\n

Alternatively, you may set these environment variable manually using\nrcc or directly in some other fashion. The specific variables which\nmust exist are:

\n
    \n
  • RC_API_SECRET_HOST: URL to Robocorp Vault API
  • \n
  • RC_API_SECRET_TOKEN: API Token for Robocorp Vault API
  • \n
  • RC_WORKSPACE_ID: Control Room Workspace ID
  • \n
\n

File-based secrets can be set by defining two environment variables.

\n
    \n
  • RPA_SECRET_MANAGER: RPA.Robocorp.Vault.FileSecrets
  • \n
  • RPA_SECRET_FILE: Absolute path to the secrets database file
  • \n
\n

Example content of local secrets file:

\n
\n{\n    "swaglabs": {\n        "username": "standard_user",\n        "password": "secret_sauce"\n    }\n}\n
\n

OR

\n
\nswaglabs:\n    username: standard_user\n    password: secret_sauce\n
\n

Examples of Using Secrets in a Robot

\n

Robot Framework

\n
\n*** Settings ***\nLibrary    Collections\nLibrary    RPA.Robocorp.Vault\n\n*** Tasks ***\nReading secrets\n    ${secret}=    Get Secret  swaglabs\n    Log Many      ${secret}\n\nModifying secrets\n    ${secret}=          Get Secret      swaglabs\n    ${level}=           Set Log Level   NONE\n    Set To Dictionary   ${secret}       username    nobody\n    Set Log Level       ${level}\n    Set Secret          ${secret}\n
\n

Python

\n
\nfrom RPA.Robocorp.Vault import Vault\n\nVAULT = Vault()\n\ndef reading_secrets():\n    print(f"My secrets: {VAULT.get_secret('swaglabs')}")\n\ndef modifying_secrets():\n    secret = VAULT.get_secret("swaglabs")\n    secret["username"] = "nobody"\n    VAULT.set_secret(secret)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -73510,7 +73510,7 @@ "name": "RPA.Robocorp.WorkItems", "doc": "
\n

A library for interacting with Control Room work items.

\n

Work items are used for managing data that go through multiple\nsteps and tasks inside a process. Each step of a process receives\ninput work items from the previous step, and creates output work items for\nthe next step.

\n

Item structure

\n

A work item's data payload is JSON and allows storing anything that is\nserializable. This library by default interacts with payloads that\nare a dictionary of key-value pairs, which it treats as individual\nvariables. These variables can be exposed to the Robot Framework task\nto be used directly.

\n

In addition to the data section, a work item can also contain files,\nwhich are stored by default in Robocorp Control Room. Adding and using\nfiles with work items requires no additional setup from the user.

\n

Loading inputs

\n

The library automatically loads the first input work item, if the\nlibrary input argument autoload is truthy (default).

\n

After an input has been loaded its payload and files can be accessed\nthrough corresponding keywords, and optionally these values can be modified.

\n

E-mail triggering

\n

Since a process can be started in Control Room by sending an e-mail, a body\nin Text/JSON/YAML/HTML format can be sent as well and this gets attached to the\ninput work item with the rawEmail payload variable. This library automatically\nparses the content of it and saves into parsedEmail the dictionary\ntransformation of the original e-mail.

\n

If "Parse email" Control Room configuration option is enabled (recommended), then\nyour e-mail is automatically parsed in the work item under the email payload\nvariable, which is a dictionary containing a body holding the final parsed form\nof the interpreted e-mail body. The payload variable parsedEmail is still\navailable for backwards compatibility reasons and holds the very same body inside\nthe parsedEmail[Body].

\n

E-mail attachments will be added into the work item as files. Read more on:\nhttps://robocorp.com/docs/control-room/attended-or-unattended/email-trigger

\n

Example:

\n

After starting the process by sending an e-mail with a body like:

\n
\n{\n    "message": "Hello world!"\n}\n
\n

The robot can use the parsed e-mail body's dictionary:

\n
\n*** Tasks ***\nUsing Parsed Emails\n    ${mail} =    Get Work Item Variable    email\n    Set Work Item Variables    &{mail}[body]\n    ${message} =     Get Work Item Variable     message\n    Log    ${message}    # will print "Hello world!"\n
\n

The behaviour can be disabled by loading the library with\nauto_parse_email=${None} or altered by providing to it a dictionary with one\n"key: value" where the key is usually "email.text" (deprecated "rawEmail", the\nvariable set by Control Room, which acts as source for the parsed (deprecated raw)\ne-mail data) and the value can be "email.body" (deprecated "parsedEmail", where the\nparsed e-mail data gets stored into), value which can be customized and retrieved\nwith Get Work Item Variable.

\n

Creating outputs

\n

It's possible to create multiple new work items as an output from a\ntask. With the keyword Create Output Work Item a new empty item\nis created as a child for the currently loaded input.

\n

All created output items are sent into the input queue of the next\nstep in the process.

\n

Active work item

\n

Keywords that read or write from a work item always operate on the currently\nactive work item. Usually that is the input item that has been automatically\nloaded when the execution started, but the currently active item is changed\nwhenever the keywords Create Output Work Item or Get Input Work Item\nare called. It's also possible to change the active item manually with the\nkeyword Set current work item.

\n

Saving changes

\n

While a work item is loaded automatically when a suite starts, changes are\nnot automatically reflected back to the source. The work item will be modified\nlocally and then saved when the keyword Save Work Item is called.\nThis also applies to created output work items.

\n

It is recommended to defer saves until all changes have been made to prevent\nleaving work items in a half-modified state in case of failures.

\n

Local Development

\n

While Control Room is the default implementation, it can also be replaced\nwith a custom adapter. The selection is based on either the default_adapter\nargument for the library, or the RPA_WORKITEMS_ADAPTER environment\nvariable. The library has a built-in alternative adapter called FileAdapter for\nstoring work items to disk.

\n

The FileAdapter uses a local JSON file for input work items.\nIt's a list of work items, each of which has a data payload and files.

\n

An example of a local file with one work item:

\n
\n[\n    {\n        "payload": {\n            "variable1": "a-string-value",\n            "variable2": ["a", "list", "value"]\n        },\n        "files": {\n            "file1": "path/to/file.ext"\n        }\n    }\n]\n
\n

Output work items (if any) are saved to an adjacent file\nwith the same name, but with the extension .output.json. You can specify\nthrough the "RPA_OUTPUT_WORKITEM_PATH" env var a different path and name for this\nfile.

\n

Simulating the Cloud with Robocorp Code VSCode Extension

\n

If you are developing in VSCode with the Robocorp Code extension, you can\nutilize the built in local development features described in the\nDeveloping with work items locally section of the\nUsing work items development guide.

\n

Examples

\n

Robot Framework

\n

In the following example a task creates an output work item,\nand attaches some variables to it.

\n
\n*** Settings ***\nLibrary    RPA.Robocorp.WorkItems\n\n*** Tasks ***\nSave variables to Control Room\n    Create Output Work Item\n    Set work item variables    user=Dude    mail=address@company.com\n    Save Work Item\n
\n

In the next step of the process inside a different robot, we can use\npreviously saved work item variables. Also note how the input work item is\nloaded implicitly when the suite starts.

\n
\n*** Settings ***\nLibrary    RPA.Robocorp.WorkItems\n\n*** Tasks ***\nUse variables from Control Room\n    Set task variables from work item\n    Log    Variables are now available: s${user}, ${mail}\n
\n

Python

\n

The library can also be used through Python, but it does not implicitly\nload the first work item.

\n
\nimport logging\nfrom RPA.Robocorp.WorkItems import WorkItems\n\ndef list_variables(item_id):\n    library = WorkItems()\n    library.get_input_work_item()\n\n    variables = library.get_work_item_variables()\n    for variable, value in variables.items():\n        logging.info("%s = %s", variable, value)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -73907,10 +73907,10 @@ "name": "default", "types": [], "typedocs": {}, - "defaultValue": "", + "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "default=" + "repr": "default=" } ], "doc": "
\n

Return a single variable value from the work item,\nor default value if defined and key does not exist.

\n

If key does not exist and default is not defined, raises KeyError.

\n\n\n\n\n\n\n\n\n\n
param name:Name of variable
param default:Default value if key does not exist
\n

Robot Framework Example:

\n
\n*** Tasks ***\nUsing a work item\n    ${username}=    Get work item variable    username    default=guest\n
\n

Python Example:

\n
\nfrom RPA.Robocorp.WorkItems import WorkItems\n\nwi = WorkItems()\nwi.get_input_work_item()\ncustomers = wi.get_work_item_variable("customers")\nprint(customers)\n
\n
\n", @@ -74360,7 +74360,7 @@ "name": "RPA.RobotLogListener", "doc": "
\n

RobotLogListener is a library for controlling logging during\na Robot Framework execution using the listener API.

\n

About keyword parameters

\n

Parameters names and keywords for keywords Mute Run On Failure and Register Protected Keywords\ndo not need to be full names of keywords, ie. all keywords matching even partially will be affected.\nRun Keyword would match all BuiltIn library keywords (17 keywords in RF 3.2.1) and of course all\nRun Keyword named keywords in any resource and/or library file which are imported would be matched also.

\n

Mute Run On Failure

\n

This keyword is to be used specifically with RPA.Browser.Selenium library, which extends\nSeleniumLibrary. Normally most of the SeleniumLibrary keywords execute run_on_failure\nbehaviour, which can be set at library initialization. By default this behaviour is running\nCapture Page Screenshot keyword on failure.

\n

In the example task Check the official website below the keyword Run Keyword is muted and when\nit runs the keyword Element Should Be Visible then those failures do not create page screenshots\ninto log file.

\n

It is also possible to change default failure behaviour by giving parameter\noptional_keyword_to_run for Mute Run On Failure, see task Check the official website with error log.\nThis optional keyword would be then executed on failure. Due to the underlying SeleniumLibrary\nimplementation this keyword can't have arguments.

\n

Example of using Mute Run On Failure without and with optional keyword to run.

\n
\n*** Settings ***\nLibrary         RPA.Browser.Selenium\nLibrary         RPA.RobotLogListener\nTask Setup      Set Task Variable   ${TRIES}   1\nTask Teardown   Close All Browsers\n\n*** Tasks ***\nCheck the official website\n   Mute Run On Failure   Run Keyword\n   Open Available Browser   https://www.robocorp.com\n   Check for visible element\n   Capture Page Screenshot\n\nCheck the official website with error log\n   Mute Run On Failure   Run Keyword  optional_keyword_to_run=Log tries\n   Open Available Browser   https://www.robocorp.com\n   Check for visible element\n   Capture Page Screenshot\n\n*** Keywords ***\nCheck for visible element\n   FOR  ${idx}  IN RANGE  1   20\n      Set Task Variable   ${TRIES}   ${idx}\n      ${status}   Run Keyword And Return Status   Element Should Be Visible  id:xyz\n      Exit For Loop If   '${status}' == 'PASS'\n      Sleep  2s\n   END\n\nLog tries\n   Log  Checked element visibility ${TRIES} times\n
\n

Register Protected Keywords

\n

This keyword is used to totally disable logging for named keywords. In the example below\nthe keyword This will not output is protected and it will not be logging into Robot Framework\nlog files.

\n

Robot Framework

\n
\n*** Settings ***\nLibrary         RPA.RobotLogListener\n\n*** Tasks ***\nProtecting keywords\n   This will not output        # will output because called before register\n   Register Protected Keywords    This will not output\n   This will not output        # is now registered\n   This will output\n\n*** Keywords ***\nThis will not output\n   Log   1\n\nThis will output\n   Log   2\n
\n

Python

\n
\nfrom robot.libraries.BuiltIn import BuiltIn, RobotNotRunningError\nfrom RPA.RobotLogListener import RobotLogListener\n\ntry:\n   BuiltIn().import_library("RPA.RobotLogListener")\nexcept RobotNotRunningError:\n   pass\n\nclass CustomLibrary:\n\n   def __init__(self):\n      listener = RobotLogListener()\n      listener.register_protected_keywords(\n            ["CustomLibrary.special_keyword"]\n      )\n\n   def special_keyword(self):\n      print('will not be written to log')\n      return 'not shown in the log'\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -74574,7 +74574,7 @@ "name": "RPA.SAP", "doc": "

This library wraps the upstream SapGuiLibrary.

\n

The SapGuiLibrary is a library that enables users to create tests for the Sap Gui application

\n

The library uses the Sap Scripting Engine, therefore Scripting must be enabled in Sap in order for this library to work.

\n

Opening a connection / Before running tests

\n

First of all, you have to make sure the Sap Logon Pad is started. You can automate this process by using the AutoIT library or the Process Library.

\n

After the Sap Login Pad is started, you can connect to the Sap Session using the keyword connect to session.

\n

If you have a successful connection you can use Open Connection to open a new connection from the Sap Logon Pad or Connect To Existing Connection to connect to a connection that is already open.

\n

Locating or specifying elements

\n

You need to specify elements starting from the window ID, for example, wnd[0]/tbar[1]/btn[8]. In some cases the SAP ID contains backslashes. Make sure you escape these backslashes by adding another backslash in front of it.

\n

Screenshots (on error)

\n

The SapGUILibrary offers an option for automatic screenshots on error. Default this option is enabled, use keyword disable screenshots on error to skip the screenshot functionality. Alternatively, this option can be set at import.

", "version": "1.1", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:27", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -75846,7 +75846,7 @@ "name": "RPA.Salesforce", "doc": "
\n

Salesforce is a library for accessing Salesforce using REST API.\nThe library extends simple-salesforce library.

\n

More information available at Salesforce REST API Developer Guide.

\n

Dataloader

\n

The keyword execute_dataloader_import can be used to mimic\nSalesforce Dataloader import behaviour.

\n

input_object can be given in different formats. Below is an example where\ninput is in RPA.Table format in method a and list format in method b.

\n
\n*** Settings ***\nLibrary     RPA.Salesforce\nLibrary     RPA.Database\nTask Setup  Authorize Salesforce\n\n*** Tasks ***\n# Method a\n${orders}=        Database Query Result As Table\n...               SELECT * FROM incoming_orders\n${status}=        Execute Dataloader Insert\n...               ${orders}  ${mapping_dict}  Tilaus__c\n# Method b\n${status}=        Execute Dataloader Insert\n...               ${WORKDIR}${/}orders.json  ${mapping_dict}  Tilaus__c\n
\n

Example file orders.json

\n
\n[\n    {\n        "asiakas": "0015I000002jBLIQA2"\n    },\n    {\n        "asiakas": "0015I000002jBLDQA2"\n    },\n]\n
\n

mapping_object describes how the input data fields are mapped into Salesforce\nobject attributes. In the example, the mapping defines that asiakas attribute in the\ninput object is mapped into Tilaaja__c attribute of Tilaus__c custom Salesforce object.

\n
\n{\n    "Tilaus__c": {\n        "asiakas": "Tilaaja__c"\n    },\n}\n
\n

Object type could be, for example, Tilaus__c.

\n

Salesforce object operations

\n

Following operations can be used to manage Salesforce objects:

\n
    \n
  • Get Salesforce Object By Id
  • \n
  • Create Salesforce Object
  • \n
  • Update Salesforce Object
  • \n
  • Upsert Salesforce Object
  • \n
  • Delete Salesforce Object
  • \n
  • Get Salesforce Object Metadata
  • \n
  • Describe Salesforce Object
  • \n
\n

There are two ways to set the Salesforce domain. You can set the domain at time of\nlibrary import or using the Set Domain keyword.

\n

There are several ways to declare a domain at time of library import:

\n
\n*** Settings ***\nLibrary     RPA.Salesforce    sandbox=${TRUE}\n
\n

Or using the domain to your Salesforce My domain:

\n
\n*** Settings ***\nLibrary     RPA.Salesforce    domain="robocorp"\n
\n

The domain can also be set using the keyword Set Domain:

\n
\n*** Settings ***\nLibrary     RPA.Salesforce\n\n*** Tasks ***\n# Sets the domain for a sandbox environment\nSet Domain    sandbox\n\n# Sets the domain to a Salseforce My domain\nSet Domain    robocorp\n\n# Sets to domain to the default of 'login'\nSet Domain\n
\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary     RPA.Salesforce\nTask Setup  Authorize Salesforce\n\n*** Variables ***\n${ACCOUNT_NOKIA}    0015I000002jBLDQA2\n\n*** Tasks ***\nChange account details in Salesforce\n    &{account}=      Get Salesforce Object By Id   Account  ${ACCOUNT_NOKIA}\n    &{update_obj}=   Create Dictionary   Name=Nokia Ltd  BillingStreet=Nokia bulevard 1\n    ${result}=       Update Salesforce Object  Account  ${ACCOUNT_NOKIA}  ${update_obj}\n\n*** Keywords ***\nAuthorize Salesforce\n    ${secrets}=     Get Secret   salesforce\n    Auth With Token\n    ...        username=${secrets}[USERNAME]\n    ...        password=${secrets}[PASSWORD]\n    ...        api_token=${secrets}[API_TOKEN]\n
\n

Python

\n
\nimport pprint\nfrom RPA.Salesforce import Salesforce\nfrom RPA.Robocorp.Vault import FileSecrets\n\npp = pprint.PrettyPrinter(indent=4)\nfilesecrets = FileSecrets("secrets.json")\nsecrets = filesecrets.get_secret("salesforce")\n\nsf = Salesforce()\nsf.auth_with_token(\n    username=secrets["USERNAME"],\n    password=secrets["PASSWORD"],\n    api_token=secrets["API_TOKEN"],\n)\nnokia_account_id = "0015I000002jBLDQA2"\naccount = sf.get_salesforce_object_by_id("Account", nokia_account_id)\npp.pprint(account)\nbilling_information = {\n    "BillingStreet": "Nokia Bulevard 1",\n    "BillingCity": "Espoo",\n    "BillingPostalCode": "01210",\n    "BillingCountry": "Finland",\n}\nresult = sf.update_salesforce_object("Account", nokia_account_id, billing_information)\nprint(f"Update result: {result}")\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:28", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -76905,7 +76905,7 @@ "name": "RPA.Slack", "doc": "
\n

RPA Framework library for Slack operations.

\n
\n", "version": "", - "generated": "2024-04-03 09:58:21", + "generated": "2024-04-03 10:12:28", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -77093,7 +77093,7 @@ "name": "RPA.Smartsheet", "doc": "
\n

Smartsheet is a library for accessing Smartsheet using the\nSmartsheet API 2.0. It extends smartsheet-python-sdk.

\n
\n

Getting started

\n

To use this library, you need to have a Smartsheet account and an API token.\nYou can get your API token from the Smartsheet Developer Portal.\nThis library currently only supports raw token authentication. Once\nobtained, you can configure the access token using the Set Access Token\nkeyword or via the access_token argument in the library import.

\n
\n
\n

Working on a sheet

\n

The library supports working on a single sheet at a time. To select a sheet\nto work on, use the Select Sheet keyword. This will set the sheet as\nthe active sheet for all subsequent operations. Some operations\nupdate the sheet, but this will not necessarily be reflected in the active\nsheet. To refresh the active sheet, use the Refresh Sheet keyword.

\n
\n
\n

Native Smartsheet objects

\n

You can retrieve the native Smartsheet object from many keywords by\nspecifying the native argument. The default will return a more\ncommon Python object, such as a dictionary or list. The native object\nis a class from the smartsheet-python-sdk library and will have\nadditional methods and attributes. The most important attributes\navailable for most native objects are (some may be unavailable\nfor some objects):

\n
    \n
  • id: the unique identifier of the object
  • \n
  • name: the name of the object
  • \n
  • title: the title of a column
  • \n
  • permalink: the URL to the object
  • \n
\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:22", + "generated": "2024-04-03 10:12:28", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -78410,7 +78410,7 @@ "name": "RPA.Tables", "doc": "
\n

Tables is a library for manipulating tabular data inside Robot Framework.

\n

It can import data from various sources and apply different operations to it.\nCommon use-cases are reading and writing CSV files, inspecting files in\ndirectories, or running tasks using existing Excel data.

\n

Import types

\n

The data a table can be created from can be of two main types:

\n
    \n
  1. An iterable of individual rows, like a list of lists, or list of dictionaries
  2. \n
  3. A dictionary of columns, where each dictionary value is a list of values
  4. \n
\n

For instance, these two input values:

\n
\ndata1 = [\n    {"name": "Mark", "age": 58},\n    {"name": "John", "age": 22},\n    {"name": "Adam", "age": 67},\n]\n\ndata2 = {\n    "name": ["Mark", "John", "Adam"],\n    "age":  [    58,     22,     67],\n}\n
\n

Would both result in the following table:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IndexNameAge
0Mark58
1John22
2Adam67
\n

Indexing columns and rows

\n

Columns can be referred to in two ways: either with a unique string\nname or their position as an integer. Columns can be named either when\nthe table is created, or they can be (re)named dynamically with keywords.\nThe integer position can always be used, and it starts from zero.

\n

For instance, a table with columns "Name", "Age", and "Address" would\nallow referring to the "Age" column with either the name "Age" or the\nnumber 1.

\n

Rows do not have a name, but instead only have an integer index. This\nindex also starts from zero. Keywords where rows are indexed also support\nnegative values, which start counting backwards from the end.

\n

For instance, in a table with five rows, the first row could be referred\nto with the number 0. The last row could be accessed with either 4 or\n-1.

\n

Examples

\n

Robot Framework

\n

The Tables library can load tabular data from various other libraries\nand manipulate it inside Robot Framework.

\n
\n*** Settings ***\nLibrary    RPA.Tables\n\n*** Keywords ***\nFiles to Table\n    ${files}=    List files in directory    ${CURDIR}\n    ${files}=    Create table    ${files}\n    Filter table by column    ${files}    size  >=  ${1024}\n    FOR    ${file}    IN    @{files}\n        Log    ${file}[name]\n    END\n    Write table to CSV    ${files}    ${OUTPUT_DIR}${/}files.csv\n
\n

Python

\n

The library is also available directly through Python, where it\nis easier to handle multiple different tables or do more bespoke\nmanipulation operations.

\n
\nfrom RPA.Tables import Tables\n\nlibrary = Tables()\norders = library.read_table_from_csv(\n    "orders.csv", columns=["name", "mail", "product"]\n)\n\ncustomers = library.group_table_by_column(rows, "mail")\nfor customer in customers:\n    for order in customer:\n        add_cart(order)\n    make_order()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:22", + "generated": "2024-04-03 10:12:28", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -80078,7 +80078,7 @@ "name": "RPA.Tasks", "doc": "
\n

Tasks is a library for controlling task execution during a Robot Framework run.

\n

It allows conditional branching between tasks, loops and jumps, and optionally\nvalidating the execution through a schema file. It can also be used to\nvisualize the tasks as a graph.

\n

Execution model

\n

In a typical Robot Framework run, tasks are ordered linearly in a file and\nthey're executed in definition order. Events that happen during\nthe execution can not affect the order and only have the option to fail the task\nor continue as defined.

\n

Using the Tasks library, it's possible to change this model according\nto different states or inputs. The execution will start by running a single\nstart task from the suite, and then according to user-defined keywords or\nschema rules select the next task. Any task which is defined in the same file\ncan be used, and the same task can also be used multiple times during a single\nexecution.

\n

Example:

\n

As an example, the following Robot Framework file describes a process where\na task would have to be executed multiple times before a condition is reached.\nIn a real-world scenario, these tasks would be more complicated, instead of just\nincrementing numbers.

\n
\n*** Settings ***\nLibrary    RPA.Tasks\n\n*** Variables ***\n${CURRENT}    ${1}\n${TARGET}     ${5}\n\n*** Tasks ***\nCheck loop condition\n    Log    I'm trying to count to ${TARGET}\n    Set next task if    ${CURRENT} >= ${TARGET}\n    ...    Target reached\n    ...    Increment current number\n\nThis will not run\n    Fail    This should never run\n\nIncrement current number\n    Set suite variable    ${CURRENT}    ${CURRENT + 1}\n    Log    Number is now ${CURRENT}\n    Jump to task    Check loop condition\n\nTarget reached\n    Log    Those are some good numbers!\n
\n

The execution for this example would go as follows:

\n
    \n
  1. It starts from Check loop condition, as it's the first task in the file.
  2. \n
  3. During the first task, the keyword Set next task if is called, which queues\nup the next task according to a condition.
  4. \n
  5. In the initial state, we have not reached the target number, and will next run\nthe task Increment current number.
  6. \n
  7. The second task executes normally and in the end jumps back to the first\ntask using the keyword Jump to task.
  8. \n
  9. The above sequence is repeated until the condition is met, and we move to\nthe final task of the file. This final task does not schedule further tasks\nand the execution ends.
  10. \n
\n

You can also note the task This will not run, which as the name implies\nis never executed, as no other task schedules or jumps to it.

\n

The console log from the above execution shows how the same task is executed\nmultiple times:

\n
\n==============================================================================\nIncrementing Process\n==============================================================================\n#1   Check loop condition                                             | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#2   Increment current number                                         | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#3   Check loop condition                                             | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#4   Increment current number                                         | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#5   Check loop condition                                             | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#6   Increment current number                                         | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#7   Check loop condition                                             | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#8   Increment current number                                         | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#9   Check loop condition                                             | PASS |\nTransition: Set by keyword\n------------------------------------------------------------------------------\n#10  Target reached                                                   | PASS |\n------------------------------------------------------------------------------\nIncrementing Process:: [/graph_incrementing_process.svg]              | PASS |\n10 critical tasks, 10 passed, 0 failed\n10 tasks total, 10 passed, 0 failed\n==============================================================================\n
\n

Graph

\n

A common way to document a process is through a directed graph. These graphs\nare usually drawn manually and describe the expected higher level steps.\nThe actual implementation itself follows a different path through a graph,\ndepending on inputs or implementation details. This library visualizes this\nexecution graph using the Graphviz tool.

\n

After the execution is finished, it will create a\nDOT file\nand render it as an image. This image will automatically be appended\nto the suite's documentation field.

\n

Requirements

\n

Drawing the graph requires a working installation of\nGraphviz. This can be installed through their\nwebsite or by using Conda.

\n

This requirement is optional for the functioning of this library, and will\ndisplay a warning if the tool is not available. The visualization\ncan be entirely disabled with the graph argument during library\ninitialization.

\n

Schema

\n

There is an option to define a schema file for the suite, which is written in JSON.\nThis file will be used to validate the actual execution and fail it if an unexpected\ntransition between tasks happens. It can also define rules for selecting the next\ntask, which allows separating the task and process definitions.

\n

Example:

\n

The execution-example shown previously used keywords to control\nthe execution. This can also be done using the following schema:

\n
\n{\n    "tasks": {\n        "Check loop condition": {\n            "alias": "check",\n            "start": true,\n            "next": [\n                "increment",\n                "target"\n            ],\n            "actions": [\n                {\n                    "condition": "$CURRENT >= $TARGET",\n                    "task": "target"\n                },\n                {\n                    "condition": "$CURRENT < $TARGET",\n                    "task": "increment"\n                }\n            ]\n        },\n        "Increment current number": {\n            "alias": "increment",\n            "next": [\n                "check"\n            ],\n            "actions": [\n                {\n                    "status": "PASS",\n                    "task": "check"\n                }\n            ]\n        },\n        "Target reached": {\n            "alias": "target",\n            "end": true,\n            "next": []\n        }\n    }\n}\n
\n

This has the added benefit of protecting against implementation errors,\nas the library will validate the start and end tasks, and transitions between\ndifferent tasks.

\n

After this schema has been taken into use, the aforementioned example\nwill reduce to the following:

\n
\n*** Settings ***\nLibrary    RPA.Tasks    schema=counter-schema.json\n\n*** Variables ***\n${CURRENT}    ${1}\n${TARGET}     ${5}\n\n*** Tasks ***\nCheck loop condition\n    Log    I'm trying to count to ${TARGET}\n\nThis will not run\n    Fail    This should never run\n\nIncrement current number\n    Set suite variable    ${CURRENT}    ${CURRENT + 1}\n    Log    Number is now ${CURRENT}\n\nTarget reached\n    Log    Those are some good numbers!\n
\n

Format

\n

The current format is JSON with the following structure:

\n
\n{\n    "tasks": {\n        [name: string]: {\n            "alias": string,\n            "start": boolean,\n            "end": boolean,\n            "next": string[],\n            "actions": action[],\n        }\n    }\n}\n
\n

Each schema is a map of tasks with various properties. The keys must\nmatch the task names in the Robot Framework file definition. All properties\ninside the task are optional.

\n

The available properties and their uses:

\n
    \n
  • \n
    alias: Define a short name for the task, which can be used as a reference
    \n
    inside the schema.
    \n
    \n
  • \n
  • \n
    start: Start task for execution. There can be only one task with this
    \n
    enabled. If not defined, will default to first task in the file.
    \n
    \n
  • \n
  • \n
    end: Valid end task for execution. There can be multiple tasks with this
    \n
    enabled. Fails the execution if this is defined for any task and the\nexecution stops in a non-end task.
    \n
    \n
  • \n
  • \n
    next: List of valid tasks to transition to from this task. Supports
    \n
    alias definitions.
    \n
    \n
  • \n
  • \n
    actions: List of actions that are executed at the end of the task.
    \n
    See section below for details.
    \n
    \n
  • \n
\n

The types of actions:

\n
    \n
  • \n
    exception: Set the next task if a matching exception occurs.
    \n
    Matches the exception message as regex.
    \n
    \n
  • \n
  • \n
    condition: Set the next task if a conditional expression is true.
    \n
    Allows using Robot Framework variables.
    \n
    \n
  • \n
  • \n
    status: Set the next task if the current task's result matches,
    \n
    e.g. PASS or FAIL.
    \n
    \n
  • \n
\n

Examples of actions:

\n
\n[\n    {"exception": ".*ValueError.*", "task": "Invalid input values"},\n    {"condition": "$ATTEMPTS > 10", "task": "Too many attempts"},\n    {"status": "PASS", "task": "Success state"}\n]\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:22", + "generated": "2024-04-03 10:12:28", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -80406,7 +80406,7 @@ "name": "RPA.Twitter", "doc": "
\n

Twitter is a library for accessing Twitter using developer API.\nThe library extends tweepy library.

\n

Authorization credentials can be given as parameters for authorize keyword\nor keyword can read them in as environment variables:

\n
    \n
  • TWITTER_CONSUMER_KEY
  • \n
  • TWITTER_CONSUMER_SECRET
  • \n
  • TWITTER_ACCESS_TOKEN
  • \n
  • TWITTER_ACCESS_TOKEN_SECRET
  • \n
\n

Library usage requires Twitter developer credentials.\nThose can be requested from Twitter developer site

\n

Examples

\n
\n*** Settings ***\nLibrary   RPA.Twitter\n\n*** Tasks ***\nGet user tweets and like them\n    [Setup]   Authorize\n    @{tweets}=   Get User Tweets   username=niinisto   count=5\n    FOR   ${tweet}  IN   @{tweets}\n        Like   ${tweet}\n    END\n
\n
\nfrom RPA.Twitter import Twitter\n\nlibrary = Twitter()\nlibrary.authorize()\ntweets = library.get_user_tweets(username="niinisto", count=5)\nfor tw in tweets:\n    library.like(tw)\ntweets = library.text_search_tweets(query="corona trump")\nfor tw in tweets:\n    print(tw.text)\nuser = library.get_user_profile("niinisto")\nlibrary.follow(user)\nlibrary.tweet("first tweet")\nme = library.get_me()\nprint(me)\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:22", + "generated": "2024-04-03 10:12:28", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -80883,7 +80883,7 @@ "name": "RPA.Windows", "doc": "
\n

The Windows is a library that can be used for Windows desktop automation.

\n

Library is included in the rpaframework package by default, but as shown in the\nbelow example library can be also installed separately without rpaframework.

\n
\nchannels:\n  - conda-forge\ndependencies:\n  - python=3.9.13\n  - pip=22.1.2\n  - pip:\n    - rpaframework-windows==7.0.2 # standalone Windows library (rpaframework includes this library)\n
\n

About terminology

\n

ControlType is a value referred to by locator keys type: or control. Represents type of application\nobject, which can be e.g. Window, Button or ListItem.

\n

Element is an entity of an application structure (e.g. certain button in a window), which can be\nidentified by a locator. (also referred as Control)

\n

WindowsElement is an library container object for the Element. All the keywords returning elements, will in\nfact return WindowsElement`s. The ones accepting `locator or root_element as arguments, will accept\nWindowsElement as an argument value. (locator accepts strings as well)

\n

Structure of the WindowsElement

\n
\nclass WindowsElement:\n    item: Control        # `item` contains object instance of the element\n    locator: str         # `locator` that found this element\n    name: str            # `Name` attribute of the element\n    automation_id: str   # `AutomationId` attribute of the element\n    control_type: str    # `ControlTypeName` attribute of the element\n    class_name: str      # `ClassName` attribute of the element\n    left: int            # element's rectangle left coordinate\n    right: int           # element's rectangle right coordinate\n    top: int             # element's rectangle top coordinate\n    bottom: int          # element's rectangle bottom coordinate\n    width: int           # element's rectangle horizontal width\n    height: int          # element's rectangle vertical height\n    xcenter: int         # element's rectangle center point x coordinate\n    ycenter: int         # element's rectangle center point y coordinate\n
\n

Example of the WindowsElement usage

\n
\n${rows}=    Get Elements    class:DataGridRow\n# ${rows} is a list of `WindowsElement`s\nFOR    ${row}    IN    @{rows}\n    Log To Console   ${row.name}                # access `WindowsElement`\n    Log To Console   ${row.item.AutomationId}   # access `WindowsElement.item` directly\n    Log To Console   ${row.item.Name}           # same as `${row.name}`\nEND\n
\n

Locators

\n

Locators are based on different strategies that can used identify Control object.

\n

Available strategies that can be used for the locators:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KeyMaps to search property
nameName
classClassName
typeControlType
controlControlType
idAutomationId
automationidAutomationId
regexRegexName
subnameSubName
indexfoundIndex (int)
offsetoffset coordinates (x (int), y (int)) from control center
executabletarget window by its executable name
handletarget window handle (int)
desktopSPECIAL target desktop, no value for the key e.g. desktop:desktop and name:Calculator
processNOT YET SUPPORTED target window by its executable's process id
depthsearchDepth (int) for finding Control (default 8)
pathtarget element by its index-based path traversal (e.g. path:2|3|8|2)
\n

About root element on locators

\n

Locators work on currently active root element. At the start root element is the whole\ndesktop. There are different ways on changing this root element.

\n

Keyword Control Window is the most common method of setting certain system window\nas a root element for further actions using locators. In the absence of a provided\nroot_element parameter, here's how you can control the default root element\nresolving:

\n
\n
    \n
  • Set Anchor: Sets the active anchor window from which the search begins.
  • \n
  • Control Window: Controls and focuses on a window and marks it as the current\nactive window, from which all the subsequent searches will start from in the\nabsence of a set anchor.
  • \n
  • If there's no set anchor nor active window, then the last resort will be the\n"Desktop" element itself.
  • \n
\n
\n

Locators themselves support cascading syntax (denoted by character > in the locator string),\nwhich can denote root element in "parent (root) & child" terms.

\n

For example.

\n
\nClick  id:controls > id:activate\n
\n

On the above example the left side of the > character, id:controls, represents the root element\n(can be called as "parent element" in this case). Right side of the locator string, id:activate,\nrepresents "child" element and it will be searched under the "parent element".

\n

This way element search is more efficient, because search are restricted to certain section of element\ntree which can be quite huge especially on the desktop level and in certain applications.

\n

Keyword examples:

\n
\nControl Window    name:Calculator\nControl Window    Calculator  # will execute search by 'name:Calculator'\nControl Window    executable:Spotify.exe\n
\n

some example locators, and can be omitted ie. space between locator keys means the same thing as and:

\n
\nid:clearButton\ntype:Group and name:"Number pad" > type:Button and index:4\ntype:Group and name:"Number pad" > control:Button index:5\nid:Units1 > name:${unit}\nclass:Button offset:370,0\n
\n

About locator restrictions

\n

Visual locators are not supported in this library and they can't be used in the same chain with these\nWindows locators. Visual locators are supported by the RPA.Desktop library. Locator chaining (image and\nWindows locators) support will be added in the future.

\n

Locator syntax does not yet support OR operation (only AND operations).

\n

About search depth

\n

The library does element search depth by default to the level of 8. This means that locator will look into\n8 levels of elements under element tree of the root element. This can lead into situation where element\ncan't be found. To fix this it is recommended to set root element which can be found within 8 levels OR\ndefining depth in the locator string to a bigger value, e.g. id:deeplyNestedButton depth:16. Useful\nkeywords for setting root element are Control Window, Set Anchor and Get Element.

\n

About the path strategy

\n

When automation IDs and names aren't enough (or not reliable), then you can fallback\nto the positions of elements in a tree. This can be achieved using the path:\nstrategy to specify a list of element positions which indicates how to traverse the\ntree from parent to child beginning with the resolved root.

\n

Example: Calculator > path:2|3|2|8|2 - this locator looks for the "Calculator"\nwindow, then it looks for the 2nd direct child and then it looks for the 3rd one of\nthe previous child and so on until it consumes the path completely. (indexes start\nwith 1)

\n

An alternative way to get the whole tree to explore it yourself would be to use the\nPrint Tree keyword.

\n

Keyboard and mouse

\n

Keys for the keyboard actions are given using uiautomation specification.

\n

Special keys which are given within {} syntax.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KeyMaps to action
LBUTTONLeft mouse button
RBUTTONRight mouse button
CANCELControl-break processing
MBUTTONMiddle mouse button (three-button mouse)
XBUTTON1X1 mouse button
XBUTTON2X2 mouse button
BACKBACKSPACE key
TABTAB key
CLEARCLEAR key
RETURNENTER key
ENTERENTER key
SHIFTSHIFT key
CTRLCTRL key
CONTROLCTRL key
ALTALT key
PAUSEPAUSE key
CAPITALCAPS LOCK key
KANAIME Kana mode
HANGUELIME Hanguel mode (maintained for compatibility; use VK_HANGUL)
HANGULIME Hangul mode
JUNJAIME Junja mode
FINALIME final mode
HANJAIME Hanja mode
KANJIIME Kanji mode
ESCESC key
ESCAPEESC key
CONVERTIME convert
NONCONVERTIME nonconvert
ACCEPTIME accept
MODECHANGEIME mode change request
SPACESPACEBAR
PRIORPAGE UP key
PAGEUPPAGE UP key
NEXTPAGE DOWN key
PAGEDOWNPAGE DOWN key
ENDEND key
HOMEHOME key
LEFTLEFT ARROW key
UPUP ARROW key
RIGHTRIGHT ARROW key
DOWNDOWN ARROW key
SELECTSELECT key
PRINTPRINT key
EXECUTEEXECUTE key
SNAPSHOTPRINT SCREEN key
PRINTSCREENPRINT SCREEN key
INSERTINS key
INSINS key
DELETEDEL key
DELDEL key
HELPHELP key
WINLeft Windows key (Natural keyboard)
LWINLeft Windows key (Natural keyboard)
RWINRight Windows key (Natural keyboard)
APPSApplications key (Natural keyboard)
SLEEPComputer Sleep key
NUMPAD0Numeric keypad 0 key
NUMPAD1Numeric keypad 1 key
NUMPAD2Numeric keypad 2 key
NUMPAD3Numeric keypad 3 key
NUMPAD4Numeric keypad 4 key
NUMPAD5Numeric keypad 5 key
NUMPAD6Numeric keypad 6 key
NUMPAD7Numeric keypad 7 key
NUMPAD8Numeric keypad 8 key
NUMPAD9Numeric keypad 9 key
MULTIPLYMultiply key
ADDAdd key
SEPARATORSeparator key
SUBTRACTSubtract key
DECIMALDecimal key
DIVIDEDivide key
F1F1 key
F2F2 key
F3F3 key
F4F4 key
F5F5 key
F6F6 key
F7F7 key
F8F8 key
F9F9 key
F10F10 key
F11F11 key
F12F12 key
F13F13 key
F14F14 key
F15F15 key
F16F16 key
F17F17 key
F18F18 key
F19F19 key
F20F20 key
F21F21 key
F22F22 key
F23F23 key
F24F24 key
NUMLOCKNUM LOCK key
SCROLLSCROLL LOCK key
LSHIFTLeft SHIFT key
RSHIFTRight SHIFT key
LCONTROLLeft CONTROL key
LCTRLLeft CONTROL key
RCONTROLRight CONTROL key
RCTRLRight CONTROL key
LALTLeft MENU key
RALTRight MENU key
BROWSER_BACKBrowser Back key
BROWSER_FORWARDBrowser Forward key
BROWSER_REFRESHBrowser Refresh key
BROWSER_STOPBrowser Stop key
BROWSER_SEARCHBrowser Search key
BROWSER_FAVORITESBrowser Favorites key
BROWSER_HOMEBrowser Start and Home key
VOLUME_MUTEVolume Mute key
VOLUME_DOWNVolume Down key
VOLUME_UPVolume Up key
MEDIA_NEXT_TRACKNext Track key
MEDIA_PREV_TRACKPrevious Track key
MEDIA_STOPStop Media key
MEDIA_PLAY_PAUSEPlay/Pause Media key
LAUNCH_MAILStart Mail key
LAUNCH_MEDIA_SELECTSelect Media key
LAUNCH_APP1Start Application 1 key
LAUNCH_APP2Start Application 2 key
OEM_1Used for miscellaneous characters; it can vary by keyboard.For the US standard keyboard, the ';:' key
OEM_PLUSFor any country/region, the '+' key
OEM_COMMAFor any country/region, the ',' key
OEM_MINUSFor any country/region, the '-' key
OEM_PERIODFor any country/region, the '.' key
OEM_2Used for miscellaneous characters; it can vary by keyboard.
OEM_3Used for miscellaneous characters; it can vary by keyboard.
OEM_4Used for miscellaneous characters; it can vary by keyboard.
OEM_5Used for miscellaneous characters; it can vary by keyboard.
OEM_6Used for miscellaneous characters; it can vary by keyboard.
OEM_7Used for miscellaneous characters; it can vary by keyboard.
OEM_8Used for miscellaneous characters; it can vary by keyboard.
OEM_102Either the angle bracket key or the backslash key on the RT 102-key keyboard
PROCESSKEYIME PROCESS key
PACKETUsed to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KeyUp
ATTNAttn key
CRSELCrSel key
EXSELExSel key
EREOFErase EOF key
PLAYPlay key
ZOOMZoom key
NONAMEReserved
PA1PA1 key
OEM_CLEARClear key
\n

Examples.

\n
\nlib = Windows()\n# {Ctrl}, {Delete} ... are special keys' name in SpecialKeyNames.\nlib.send_keys('{Ctrl}a{Delete}{Ctrl}v{Ctrl}s{Ctrl}{Shift}s{Win}e{PageDown}') #press Ctrl+a, Delete, Ctrl+v, Ctrl+s, Ctrl+Shift+s, Win+e, PageDown\nlib.send_keys('{Ctrl}(AB)({Shift}(123))') #press Ctrl+A+B, type '(', press Shift+1+2+3, type ')', if '()' follows a hold key, hold key won't release util ')'\nlib.send_keys('{Ctrl}{a 3}') #press Ctrl+a at the same time, release Ctrl+a, then type 'a' 2 times\nlib.send_keys('{a 3}{B 5}') #type 'a' 3 times, type 'B' 5 times\nlib.send_keys('{{}Hello{}}abc {a}{b}{c} test{} 3}{!}{a} (){(}{)}') #type: '{Hello}abc abc test}}}!a ()()'\nlib.send_keys('0123456789{Enter}')\nlib.send_keys('ABCDEFGHIJKLMNOPQRSTUVWXYZ{Enter}')\nlib.send_keys('abcdefghijklmnopqrstuvwxyz{Enter}')\nlib.send_keys('`~!@#$%^&*()-_=+{Enter}')\nlib.send_keys('[]{{}{}}\\|;:'",<.>/?{Enter}')\n
\n

Using access key of the element (element property -> AccessKey 'alt+s').\nThe (+s) means that previous special key is kept down until closing parenthesis is reached.

\n

On the below example this means that 'ALT' key is pressed down, then '+' and 's' keys are pressed\ndown before they are all released up.

\n
\nSend Keys   keys={Alt}(+s)\n
\n

Mouse clicks can be executed with keywords specific for a type of a click, e.g. Click (normal click),\nDouble Click and Right Click.

\n

How to inspect

\n

Most common, and recommended by Microsoft, inspector tool for Windows is Accessibility Insights that\ncan be installed separately. Other options are tools Inspect Object and UI Automation Verify, which\ncan be accessed by installing Windows SDK.

\n

A more programmatic approach is to run Print Tree    log_as_warnings=${True}\nkeyword and then observe in the logs the found elements structure starting from\nDesktop (or the currently set anchor / active window) as root. (refer to keyword's\ndocumentation\nfor more details)

\n

Recording

\n

The package provides some rudimentary inspecting and recording via the\nwindows-record script, which can be started through the command line (in an\nenvironment containing the rpaframework-windows installation).

\n

Recording inspects elements on mouse click and can be stopped by pressing the\nESC key. Expected console output:

\n
\nC:\\Users\\User\\robots\\> windows-record -v  # or > python -m RPA.Windows -v\nMouse recording started. Use ESC to stop recording.\n\n--------------------------------------------------------------------------------\nCopy-paste the code below into your *** Tasks *** or *** Keywords ***\n--------------------------------------------------------------------------------\n\nControl Window    name:Calculator and type:WindowControl and class:ApplicationFrameWindow  # handle:9569486\nClick    name:Calculator and id:TitleBar and type:WindowControl and class:ApplicationFrameTitleBarWindow and path:1\nClick    name:"Display is 0" and id:CalculatorResults and type:TextControl and path:2|3|2|2\nClick    name:Eight and id:num8Button and type:ButtonControl and class:Button and path:2|3|2|8|9\nClick    name:Nine and id:num9Button and type:ButtonControl and class:Button and path:2|3|2|8|10\nClick    name:Clear and id:clearButton and type:ButtonControl and class:Button and path:2|3|2|5|3\n\n--------------------------------------------------------------------------------\n
\n

Check our Portal example in order to learn more abot the path: strategy in\nlocators and how to record elements displaying their paths:\nhttps://robocorp.com/portal/robot/robocorp/example-windows-element-path

\n

Video recorded demo on how to run the recorder script from VSCode:\nhttps://www.loom.com/share/2807372359f34b9cbe1bc2df9194ec68

\n

Caveats

\n
    \n
  • Make sure your display scaling is set to 100%, otherwise you might encounter\nissues when clicking or interacting with elements. (since offsets and coordinates\nget distorted)
  • \n
  • Disturbing the automation (like interacting with your mouse/keyboard) or having\nother apps obstructing the process interacting with your app of interest will\nmost probably affect the expected behaviour. In order to avoid this, try\ncontrolling the app's main window right before sending clicks or keys. And keep\ntargeting elements through string locators, as interacting with Windows\nelement objects previously retrieved will not work as expected in a future\naltered state of the app (changes under the element structure).
  • \n
\n

Example: Robot Framework

\n

The library must be imported first.

\n
\n*** Settings ***\nLibrary    RPA.Windows\n
\n

Windows Calculator automation task

\n
\n*** Tasks ***\nDo some calculations\n    [Setup]  Windows Run   calc.exe\n\n    Control Window    name:Calculator\n    Click    id:clearButton\n    Send Keys   keys=96+4=\n    ${result} =    Get Attribute    id:CalculatorResults    Name\n    Log To Console    ${result}\n\n    @{buttons} =  Get Elements  type:Group and name:"Number pad" > type:Button\n    FOR  ${button}  IN  @{buttons}\n        Log To Console   ${button}\n    END\n\n    [Teardown]   Close Current Window\n
\n

Example: Python

\n
\nfrom RPA.Windows import Windows\n\nlibrary = Windows()\n\ndef test_do_some_calculations():\n    library.windows_run("calc.exe")\n    try:\n        library.control_window("name:Calculator")\n        library.click("id:clearButton")\n        library.send_keys(keys="96+4=")\n        result = library.get_attribute("id:CalculatorResults", "Name")\n        print(result)\n        buttons = library.get_elements(\n            'type:Group and name:"Number pad" > type:Button'\n        )\n        for button in buttons:\n            print(button)\n    finally:\n        library.close_current_window()\n
\n
\n", "version": "", - "generated": "2024-04-03 09:58:23", + "generated": "2024-04-03 10:12:29", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -82356,10 +82356,10 @@ "typedocs": { "None": "None" }, - "defaultValue": "", + "defaultValue": "", "kind": "POSITIONAL_OR_NAMED", "required": false, - "repr": "validator: Callable | None = " + "repr": "validator: Callable | None = " } ], "doc": "
\n

Set value of the element defined by the locator.

\n

Note: An anchor will work only on element structures where you can\nrely on the stability of that root/child element tree, as remaining the same.\nUsually these kind of structures are tables. (but not restricted to)

\n

Note: It is important to set append=${True} if you want to keep the\ncurrent text in the element. Other option is to read the current text into a\nvariable, then modify that value as you wish and pass it to the Set Value\nkeyword for a complete text replacement. (without setting the append flag)

\n

The following exceptions may be raised:

\n
\n
    \n
  • ActionNotPossible if the element does not allow the SetValue action\nto be run on it nor having send_keys_fallback=${True}.
  • \n
  • ValueError if the new value to be set can't be set correctly.
  • \n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
param locator:String locator or element object.
param value:String value to be set.
param append:False for setting the value, True for appending it. (OFF by\ndefault)
param enter:Set it to True to press the Enter key at the end of the\ninput. (nothing is pressed by default)
param newline:Set it to True to add a new line at the end of the value. (no\nEOL included by default; this won't work with send_keys_fallback enabled)
param send_keys_fallback:
 Tries to set the value by sending it through keys\nif the main way of setting it fails. (enabled by default)
param validator:
 Function receiving two parameters post-setting, the expected\nand the current value, which returns True if the two values match. (by\ndefault, the keyword will raise if the values are different, set this to\nNone to disable validation or pass your custom function instead)
returns:The element object identified through the passed locator.
\n

Example: Robot Framework

\n
\n*** Tasks ***\nSet Values In Notepad\n    Set Value   type:DataItem name:column1   ab c  # Set value to "ab c"\n    # Press ENTER after setting the value.\n    Set Value    type:Edit name:"File name:"    console.txt   enter=${True}\n\n    # Add newline (manually) at the end of the string. (Notepad example)\n    Set Value    name:"Text Editor"  abc\\n\n    # Add newline with parameter.\n    Set Value    name:"Text Editor"  abc   newline=${True}\n\n    # Clear Notepad window and start appending text.\n    Set Anchor  name:"Text Editor"\n    # All the following keyword calls will use the anchor element as a\n    #  starting point, UNLESS they specify a locator explicitly or\n    #  Clear Anchor is used.\n    ${time} =    Get Time\n    # Clears with append=${False}. (default)\n    Set Value    value=The time now is ${time}\n    # Append text and add a newline at the end.\n    Set Value    value= and it's the task run time.   append=${True}\n    ...    newline=${True}\n    # Continue appending and ensure a new line at the end by pressing\n    #  the Enter key this time.\n    Set Value    value=But this will appear on the 2nd line now.\n    ...    append=${True}   enter=${True}   validator=${None}\n
\n

Example: Python

\n
\nfrom RPA.Windows import Windows\n\nlib_win = Windows()\nlocator = "Document - WordPad > Rich Text Window"\nelem = lib_win.set_value(locator, value="My text", send_keys_fallback=True)\ntext = lib_win.get_value(elem)\nprint(text)\n
\n
\n", @@ -82616,7 +82616,7 @@ "name": "RPA.Word.Application", "doc": "
\n

Word.Application is a library for controlling the Word application.

\n

Examples

\n

Robot Framework

\n
\n*** Settings ***\nLibrary                 RPA.Word.Application\nTask Setup              Open Application\nSuite Teardown          Quit Application\n\n*** Tasks ***\nOpen existing file\n    Open File           old.docx\n    Write Text          Extra Line Text\n    Write Text          Another Extra Line of Text\n    Save Document AS    ${CURDIR}${/}new.docx\n    ${texts}=           Get all Texts\n    Close Document\n
\n

Python

\n
\nfrom RPA.Word.Application import Application\n\napp = Application()\napp.open_application()\napp.open_file('old.docx')\napp.write_text('Extra Line Text')\napp.save_document_as('new.docx')\napp.quit_application()\n
\n

Caveats

\n

This library works on a Windows operating system with UI enabled only, and you must\nensure that you open the app first with Open Application before running any\nother relevant keyword which requires to operate on an open app. The application is\nautomatically closed at the end of the task execution, so this can be changed by\nimporting the library with the autoexit=${False} setting.

\n
\n*** Settings ***\nLibrary     RPA.Excel|Outlook|Word.Application    autoexit=${False}\n
\n

If you're running the Process by Control Room through a custom self-hosted Worker\nservice, then please make sure that you enable an RDP session by ticking "Use\nDesktop Connection" under the Step configuration.

\n

If you still encounter issues with opening a document, please ensure that file can\nbe opened first manually and dismiss any alert potentially blocking the process.

\n

Check the documentation below for more info:

\n\n
\n", "version": "", - "generated": "2024-04-03 09:58:23", + "generated": "2024-04-03 10:12:29", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", @@ -83353,7 +83353,7 @@ "name": "RPA.version", "doc": "

Documentation for library RPA.version.

", "version": "28.4.2", - "generated": "2024-04-03 09:58:23", + "generated": "2024-04-03 10:12:29", "type": "LIBRARY", "scope": "GLOBAL", "docFormat": "HTML", diff --git a/libdoc/RPA_Archive.html b/libdoc/RPA_Archive.html index 5cc5977a4c..98d7f19d94 100644 --- a/libdoc/RPA_Archive.html +++ b/libdoc/RPA_Archive.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Assistant.html b/libdoc/RPA_Assistant.html index 21326bd408..f72f15a3f8 100644 --- a/libdoc/RPA_Assistant.html +++ b/libdoc/RPA_Assistant.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Browser.html b/libdoc/RPA_Browser.html index 7a9af406da..511bdc2bd2 100644 --- a/libdoc/RPA_Browser.html +++ b/libdoc/RPA_Browser.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Browser_Playwright.html b/libdoc/RPA_Browser_Playwright.html index 7461551652..69e91e73cf 100644 --- a/libdoc/RPA_Browser_Playwright.html +++ b/libdoc/RPA_Browser_Playwright.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Browser_Selenium.html b/libdoc/RPA_Browser_Selenium.html index 1b1dbbbee6..b4ac01c6e9 100644 --- a/libdoc/RPA_Browser_Selenium.html +++ b/libdoc/RPA_Browser_Selenium.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Browser_common.html b/libdoc/RPA_Browser_common.html index 4a5d067e9a..8215bd64fc 100644 --- a/libdoc/RPA_Browser_common.html +++ b/libdoc/RPA_Browser_common.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Calendar.html b/libdoc/RPA_Calendar.html index 62bd0e29a4..f01e164f6a 100644 --- a/libdoc/RPA_Calendar.html +++ b/libdoc/RPA_Calendar.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Cloud_AWS.html b/libdoc/RPA_Cloud_AWS.html index 7798762074..32b0966d61 100644 --- a/libdoc/RPA_Cloud_AWS.html +++ b/libdoc/RPA_Cloud_AWS.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Cloud_Azure.html b/libdoc/RPA_Cloud_Azure.html index 7e135a40c4..09ea189546 100644 --- a/libdoc/RPA_Cloud_Azure.html +++ b/libdoc/RPA_Cloud_Azure.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Cloud_Google.html b/libdoc/RPA_Cloud_Google.html index 089b8e368e..3bdce4db8c 100644 --- a/libdoc/RPA_Cloud_Google.html +++ b/libdoc/RPA_Cloud_Google.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Crypto.html b/libdoc/RPA_Crypto.html index f8a343d804..3f0a5d9efa 100644 --- a/libdoc/RPA_Crypto.html +++ b/libdoc/RPA_Crypto.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Database.html b/libdoc/RPA_Database.html index bf531eeb9b..1637639826 100644 --- a/libdoc/RPA_Database.html +++ b/libdoc/RPA_Database.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Desktop.html b/libdoc/RPA_Desktop.html index 752be4b9b4..711cf41cad 100644 --- a/libdoc/RPA_Desktop.html +++ b/libdoc/RPA_Desktop.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Desktop_Clipboard.html b/libdoc/RPA_Desktop_Clipboard.html index e1d339cd38..fc6d63f9d2 100644 --- a/libdoc/RPA_Desktop_Clipboard.html +++ b/libdoc/RPA_Desktop_Clipboard.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Desktop_OperatingSystem.html b/libdoc/RPA_Desktop_OperatingSystem.html index 35aea257b6..8d286f3b25 100644 --- a/libdoc/RPA_Desktop_OperatingSystem.html +++ b/libdoc/RPA_Desktop_OperatingSystem.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Desktop_Windows.html b/libdoc/RPA_Desktop_Windows.html index bef8a4510b..cb23cb1e7d 100644 --- a/libdoc/RPA_Desktop_Windows.html +++ b/libdoc/RPA_Desktop_Windows.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_DocumentAI.html b/libdoc/RPA_DocumentAI.html index 6c0fad6a69..b4a03d277f 100644 --- a/libdoc/RPA_DocumentAI.html +++ b/libdoc/RPA_DocumentAI.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_DocumentAI_Base64AI.html b/libdoc/RPA_DocumentAI_Base64AI.html index 32eed5d03a..42d0b7d05d 100644 --- a/libdoc/RPA_DocumentAI_Base64AI.html +++ b/libdoc/RPA_DocumentAI_Base64AI.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_DocumentAI_DocumentAI.html b/libdoc/RPA_DocumentAI_DocumentAI.html index 7d2d2ad957..4d999cccc1 100644 --- a/libdoc/RPA_DocumentAI_DocumentAI.html +++ b/libdoc/RPA_DocumentAI_DocumentAI.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_DocumentAI_Nanonets.html b/libdoc/RPA_DocumentAI_Nanonets.html index 4173b981b0..b556f1e317 100644 --- a/libdoc/RPA_DocumentAI_Nanonets.html +++ b/libdoc/RPA_DocumentAI_Nanonets.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Email_Exchange.html b/libdoc/RPA_Email_Exchange.html index f2429c9a4d..eadb7cb0f0 100644 --- a/libdoc/RPA_Email_Exchange.html +++ b/libdoc/RPA_Email_Exchange.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Email_ImapSmtp.html b/libdoc/RPA_Email_ImapSmtp.html index 98eb1f0462..a04c72d60c 100644 --- a/libdoc/RPA_Email_ImapSmtp.html +++ b/libdoc/RPA_Email_ImapSmtp.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Excel_Application.html b/libdoc/RPA_Excel_Application.html index d24800529f..66feb037f8 100644 --- a/libdoc/RPA_Excel_Application.html +++ b/libdoc/RPA_Excel_Application.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Excel_Files.html b/libdoc/RPA_Excel_Files.html index 7382e676ee..ce99618c0d 100644 --- a/libdoc/RPA_Excel_Files.html +++ b/libdoc/RPA_Excel_Files.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_FTP.html b/libdoc/RPA_FTP.html index ea1d33c150..2649989744 100644 --- a/libdoc/RPA_FTP.html +++ b/libdoc/RPA_FTP.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_FileSystem.html b/libdoc/RPA_FileSystem.html index 75f197ae9f..1393e972c8 100644 --- a/libdoc/RPA_FileSystem.html +++ b/libdoc/RPA_FileSystem.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_HTTP.html b/libdoc/RPA_HTTP.html index 298cc7a317..3a69f0ee95 100644 --- a/libdoc/RPA_HTTP.html +++ b/libdoc/RPA_HTTP.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Hubspot.html b/libdoc/RPA_Hubspot.html index 4c018f197e..d9457488ea 100644 --- a/libdoc/RPA_Hubspot.html +++ b/libdoc/RPA_Hubspot.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Images.html b/libdoc/RPA_Images.html index b00283b09f..ba324fa0a9 100644 --- a/libdoc/RPA_Images.html +++ b/libdoc/RPA_Images.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_JSON.html b/libdoc/RPA_JSON.html index 4386ecbf70..c07ba4f0e8 100644 --- a/libdoc/RPA_JSON.html +++ b/libdoc/RPA_JSON.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_JavaAccessBridge.html b/libdoc/RPA_JavaAccessBridge.html index 3ff68756fe..216519c9f7 100644 --- a/libdoc/RPA_JavaAccessBridge.html +++ b/libdoc/RPA_JavaAccessBridge.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_MFA.html b/libdoc/RPA_MFA.html index 5badbaf5fe..0a6ca357a4 100644 --- a/libdoc/RPA_MFA.html +++ b/libdoc/RPA_MFA.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_MSGraph.html b/libdoc/RPA_MSGraph.html index 1484f04b15..3c232c7534 100644 --- a/libdoc/RPA_MSGraph.html +++ b/libdoc/RPA_MSGraph.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Netsuite.html b/libdoc/RPA_Netsuite.html index b315f1f835..8a518d4865 100644 --- a/libdoc/RPA_Netsuite.html +++ b/libdoc/RPA_Netsuite.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Notifier.html b/libdoc/RPA_Notifier.html index cd35bc3fc1..375b7dd544 100644 --- a/libdoc/RPA_Notifier.html +++ b/libdoc/RPA_Notifier.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_OpenAI.html b/libdoc/RPA_OpenAI.html index 98fe424d75..f136ce8899 100644 --- a/libdoc/RPA_OpenAI.html +++ b/libdoc/RPA_OpenAI.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Outlook_Application.html b/libdoc/RPA_Outlook_Application.html index e09b02d01e..c2ff6eeca8 100644 --- a/libdoc/RPA_Outlook_Application.html +++ b/libdoc/RPA_Outlook_Application.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_PDF.html b/libdoc/RPA_PDF.html index 9088fcb0fb..40f5ed061d 100644 --- a/libdoc/RPA_PDF.html +++ b/libdoc/RPA_PDF.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Robocloud_Items.html b/libdoc/RPA_Robocloud_Items.html index 0b4a9d4970..4eddd633d7 100644 --- a/libdoc/RPA_Robocloud_Items.html +++ b/libdoc/RPA_Robocloud_Items.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Robocloud_Secrets.html b/libdoc/RPA_Robocloud_Secrets.html index 09bc6c6477..47d9f24449 100644 --- a/libdoc/RPA_Robocloud_Secrets.html +++ b/libdoc/RPA_Robocloud_Secrets.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Robocorp_Process.html b/libdoc/RPA_Robocorp_Process.html index 27e0fc24d0..8152f1e9dd 100644 --- a/libdoc/RPA_Robocorp_Process.html +++ b/libdoc/RPA_Robocorp_Process.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Robocorp_Storage.html b/libdoc/RPA_Robocorp_Storage.html index a972ca2ffc..eaf9e23292 100644 --- a/libdoc/RPA_Robocorp_Storage.html +++ b/libdoc/RPA_Robocorp_Storage.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Robocorp_Vault.html b/libdoc/RPA_Robocorp_Vault.html index bedc81a0ab..465b1c7979 100644 --- a/libdoc/RPA_Robocorp_Vault.html +++ b/libdoc/RPA_Robocorp_Vault.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Robocorp_WorkItems.html b/libdoc/RPA_Robocorp_WorkItems.html index 56a8f652f7..b6c4fd0549 100644 --- a/libdoc/RPA_Robocorp_WorkItems.html +++ b/libdoc/RPA_Robocorp_WorkItems.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_RobotLogListener.html b/libdoc/RPA_RobotLogListener.html index d7061bd8bf..932ceafd05 100644 --- a/libdoc/RPA_RobotLogListener.html +++ b/libdoc/RPA_RobotLogListener.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_SAP.html b/libdoc/RPA_SAP.html index ad97253270..5df54999f6 100644 --- a/libdoc/RPA_SAP.html +++ b/libdoc/RPA_SAP.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Salesforce.html b/libdoc/RPA_Salesforce.html index 48bd8d0aec..eb4a5ab375 100644 --- a/libdoc/RPA_Salesforce.html +++ b/libdoc/RPA_Salesforce.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Slack.html b/libdoc/RPA_Slack.html index 6eac4933ab..b5e26c7924 100644 --- a/libdoc/RPA_Slack.html +++ b/libdoc/RPA_Slack.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Smartsheet.html b/libdoc/RPA_Smartsheet.html index 375bda8d6a..b4f643f4ba 100644 --- a/libdoc/RPA_Smartsheet.html +++ b/libdoc/RPA_Smartsheet.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Tables.html b/libdoc/RPA_Tables.html index 0af908face..e3c6af6180 100644 --- a/libdoc/RPA_Tables.html +++ b/libdoc/RPA_Tables.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Tasks.html b/libdoc/RPA_Tasks.html index 5213afe55b..6a3b157005 100644 --- a/libdoc/RPA_Tasks.html +++ b/libdoc/RPA_Tasks.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Twitter.html b/libdoc/RPA_Twitter.html index d10ec86331..96f25c4930 100644 --- a/libdoc/RPA_Twitter.html +++ b/libdoc/RPA_Twitter.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Windows.html b/libdoc/RPA_Windows.html index 9bed67c811..9e89e571dc 100644 --- a/libdoc/RPA_Windows.html +++ b/libdoc/RPA_Windows.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_Word_Application.html b/libdoc/RPA_Word_Application.html index b6b671b9a6..240ad45217 100644 --- a/libdoc/RPA_Word_Application.html +++ b/libdoc/RPA_Word_Application.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libdoc/RPA_version.html b/libdoc/RPA_version.html index 34e3448a1d..20f93022b8 100644 --- a/libdoc/RPA_version.html +++ b/libdoc/RPA_version.html @@ -1019,7 +1019,7 @@ //# sourceMappingURL=iframeResizer.contentWindow.map diff --git a/libraries/http/python.html b/libraries/http/python.html index 2d0c33c671..10460a6e64 100644 --- a/libraries/http/python.html +++ b/libraries/http/python.html @@ -171,7 +171,7 @@

HTTP* On Session.

-DEFAULT_RETRY_METHOD_LIST = ['OPTIONS', 'TRACE', 'HEAD', 'GET', 'DELETE', 'PUT']
+DEFAULT_RETRY_METHOD_LIST = ['OPTIONS', 'GET', 'PUT', 'DELETE', 'TRACE', 'HEAD']
@@ -210,7 +210,7 @@

HTTP
-create_client_cert_session(alias, url, headers={}, cookies={}, client_certs=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'TRACE', 'HEAD', 'GET', 'DELETE', 'PUT'])
+create_client_cert_session(alias, url, headers={}, cookies={}, client_certs=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'DELETE', 'TRACE', 'HEAD'])

Create Session: create a HTTP session to a server

url Base url of the server

alias Robot Framework alias to identify the session

@@ -248,7 +248,7 @@

HTTP
-create_custom_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'TRACE', 'HEAD', 'GET', 'DELETE', 'PUT'])
+create_custom_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'DELETE', 'TRACE', 'HEAD'])

Create Session: create a HTTP session to a server

url Base url of the server

alias Robot Framework alias to identify the session

@@ -289,7 +289,7 @@

HTTP
-create_digest_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'TRACE', 'HEAD', 'GET', 'DELETE', 'PUT'])
+create_digest_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'DELETE', 'TRACE', 'HEAD'])

Create Session: create a HTTP session to a server

url Base url of the server

alias Robot Framework alias to identify the session

@@ -327,7 +327,7 @@

HTTP
-create_ntlm_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'TRACE', 'HEAD', 'GET', 'DELETE', 'PUT'])
+create_ntlm_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'DELETE', 'TRACE', 'HEAD'])

Create Session: create a HTTP session to a server

url Base url of the server

alias Robot Framework alias to identify the session

@@ -365,7 +365,7 @@

HTTP
-create_session(alias, url, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'TRACE', 'HEAD', 'GET', 'DELETE', 'PUT'])
+create_session(alias, url, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'DELETE', 'TRACE', 'HEAD'])

Create Session: create a HTTP session to a server

alias Robot Framework alias to identify the session

url Base url of the server

diff --git a/packages.html b/packages.html index 435598215c..ec1df98e59 100644 --- a/packages.html +++ b/packages.html @@ -163,7 +163,6 @@

rpaframework-assistant latest version rpaframework-aws latest version rpaframework-core latest version -rpaframework-dialogs latest version rpaframework-google latest version rpaframework-hubspot latest version rpaframework-openai latest version diff --git a/python.json b/python.json index 84cc337b1e..082ed7ec5a 100644 --- a/python.json +++ b/python.json @@ -89,7 +89,7 @@ }, { "module": "RPA.HTTP.HTTP", - "markdown": "# Python API\n\n## HTTP\n\n### *class* RPA.HTTP.HTTP(\\*args, \\*\\*kwargs)\n\nThe *RPA.HTTP* library extends functionality of the [RequestsLibrary](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html).\nSee that documentation for several examples of how to issue `GET`\nrequests and utilize the returned `result` objects.\n\nThis extension provides helper keywords to get an HTTP resource on a\nsession. The `HTTP Get` and `Download` keywords will initiate a\nsession if one does not exist for the provided URL, or use an existing\nsession. When using these keywords, you do not need to manage\nsessions with `Create Session`. Session management is still\nrequired if you use the underlying session keywords, e.g.,\n`* On Session`.\n\n#### DEFAULT_RETRY_METHOD_LIST *= ['GET', 'DELETE', 'PUT', 'TRACE', 'OPTIONS', 'HEAD']*\n\n#### ROBOT_LIBRARY_DOC_FORMAT *= 'reST'*\n\n#### ROBOT_LIBRARY_SCOPE *= 'GLOBAL'*\n\n#### check_vulnerabilities()\n\nCheck for possible vulnerabilities in the installed runtime\nenvironment packages.\n\nCurrently will check only for OpenSSL version and outputs warning message on any\ndiscovered vulnerability.\n\n* **Returns:**\n list of all check results\n\n```robotframework\n*** Tasks ***\nVulnerability Check\n ${results}= Check Vulnerabilities\n FOR ${result} IN @{results}\n Log To Console TYPE: ${result}[type]\n Log To Console VULNERABLE: ${result}[vulnerable]\n Log To Console MESSAGE: ${result}[message]\n END\n```\n\n#### create_client_cert_session(alias, url, headers={}, cookies={}, client_certs=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['GET', 'DELETE', 'PUT', 'TRACE', 'OPTIONS', 'HEAD'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`client_certs` [\u2018client certificate\u2019, \u2018client key\u2019] PEM files containing the client key and certificate\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_custom_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['GET', 'DELETE', 'PUT', 'TRACE', 'OPTIONS', 'HEAD'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` A Custom Authentication object to be passed on to the requests library.\n: [http://docs.python-requests.org/en/master/user/advanced/#custom-authentication](http://docs.python-requests.org/en/master/user/advanced/#custom-authentication)\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_digest_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['GET', 'DELETE', 'PUT', 'TRACE', 'OPTIONS', 'HEAD'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` [\u2018DOMAIN\u2019, \u2018username\u2019, \u2018password\u2019] for NTLM Authentication\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_ntlm_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['GET', 'DELETE', 'PUT', 'TRACE', 'OPTIONS', 'HEAD'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` [\u2018DOMAIN\u2019, \u2018username\u2019, \u2018password\u2019] for NTLM Authentication\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_session(alias, url, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['GET', 'DELETE', 'PUT', 'TRACE', 'OPTIONS', 'HEAD'])\n\nCreate Session: create a HTTP session to a server\n\n`alias` Robot Framework alias to identify the session\n\n`url` Base url of the server\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` List of username & password for HTTP Basic Auth\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### delete_all_sessions()\n\nRemoves all the session objects\n\n#### delete_on_session(\\*\\*kwargs)\n\nSends a DELETE request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### delete_request(alias, uri, data=None, json=None, params=None, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use DELETE On Session instead.\n\nSend a DELETE request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the DELETE request to\n\n`json` a value that will be json encoded\n: and sent as request data if data is not specified\n\n`headers` a dictionary of headers to use with the request\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`timeout` connection timeout\n\n#### download(url: str, target_file: Optional[str] = None, verify: Union[bool, str] = True, force_new_session: bool = False, overwrite: bool = False, stream: bool = False, \\*\\*kwargs)\n\nAn alias for the `HTTP Get` keyword.\n\nThe difference in use is that the URL is always downloaded based on\nthe URL path (even without `target_file`). If there is a filename\nin the path, then that is used as `target_file` to save to. By default,\nthe filename will be \u201cdownloaded.html\u201d.\n\n```robotframework\n*** Settings ***\nLibrary RPA.HTTP\n\n*** Variables ***\n${DOWNLOAD_PATH}= ${OUTPUT DIR}${/}downloads\n${WORD_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc\n${EXCEL_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file_example_XLS_10.xls\n\n*** Tasks ***\nDownload files with reused session with provided file names\n # Starts a new session\n Download ${WORD_EXAMPLE} target_file=${DOWNLOAD_PATH}\n # Uses the previous session\n Download ${EXCEL_EXAMPLE} target_file=${DOWNLOAD_PATH}\n # Above files are downloaded using the same names as they have\n # on the remote server.\n```\n\n* **Parameters:**\n * **url** \u2013 target URL for GET request\n * **target_file** \u2013 filepath to save request content, default `None`\n * **verify** \u2013 if SSL verification should be done, default `True`,\n a CA_BUNDLE path can also be provided\n * **force_new_session** \u2013 if new HTTP session should be created,\n default `False`\n * **overwrite** \u2013 used together with `target_file`, if `True` will overwrite\n the target file, default `False`\n * **stream** \u2013 if `False` the response content will be immediately downloaded\n* **Returns:**\n request response as a dict\n\n#### get_current_session_alias()\n\nGet request session alias that was used with the `HTTP Get` keyword.\n\n* **Returns:**\n name of session alias as a string\n\n#### *static* get_file_for_streaming_upload(path)\n\nOpens and returns a file descriptor of a specified file to be passed as `data` parameter\nto other requests keywords.\n\nThis allows streaming upload of large files without reading them into memory.\n\nFile descriptor is binary mode and read only. Requests keywords will automatically close the file,\nif used outside this library it\u2019s up to the caller to close it.\n\n#### get_on_session(\\*\\*kwargs)\n\nSends a GET request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to retrieve the resource is the `url`, while query\nstring parameters can be passed as string, dictionary (or list of tuples or bytes)\nthrough the `params`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### get_request(alias, uri, headers=None, data=None, json=None, params=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use GET On Session instead.\n\nSend a GET request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the GET request to\n\n`params` url parameters to append to the uri\n\n`headers` a dictionary of headers to use with the request\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as GET data\n or binary data that is sent as the raw body content\n\n`json` a value that will be json encoded\n: and sent as GET data if data is not specified\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`timeout` connection timeout\n\n#### head_on_session(\\*\\*kwargs)\n\nSends a HEAD request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to retrieve the HTTP headers is the `url`.\n\n`allow_redirects` parameter is not provided, it will be set to False (as\nopposed to the default behavior).\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### head_request(alias, uri, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use HEAD On Session instead.\n\nSend a HEAD request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the HEAD request to\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`headers` a dictionary of headers to use with the request\n\n`timeout` connection timeout\n\n#### http_get(url: str, target_file: Optional[str] = None, verify: Union[bool, str] = True, force_new_session: bool = False, overwrite: bool = False, stream: bool = False, \\*\\*kwargs)\n\nA helper method for `Get Request` that will create a session, perform GET\nrequest, and store the target file, if set by the `target_file` parameter.\n\nThe old session will be used if the URL scheme and the host are the same as\npreviously, e.g., \u2018[https://www.google.fi](https://www.google.fi)\u2019 part of the URL.\n\n```robotframework\n*** Settings ***\nLibrary RPA.HTTP\n\n*** Variables ***\n${DOWNLOAD_PATH}= ${OUTPUT DIR}${/}downloads\n${WORD_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc\n${EXCEL_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file_example_XLS_10.xls\n\n*** Tasks ***\nDownload files with reused session\n # Starts a new session\n HTTP Get ${WORD_EXAMPLE} target_file=${DOWNLOAD_PATH}${/}word-example.doc\n # Uses the previous session\n HTTP Get ${EXCEL_EXAMPLE} target_file=${DOWNLOAD_PATH}${/}excel-example.xls\n```\n\n* **Parameters:**\n * **url** \u2013 target URL for GET request\n * **target_file** \u2013 filepath to save request content, default `None`\n * **verify** \u2013 if SSL verification should be done, default `True`,\n a CA_BUNDLE path can also be provided\n * **force_new_session** \u2013 if new HTTP session should be created,\n default `False`\n * **overwrite** \u2013 used together with `target_file`, if `True` will overwrite\n the target file, default `False`\n * **stream** \u2013 if `False`, the response content will be immediately downloaded\n* **Returns:**\n request response as a dict\n\n#### options_on_session(\\*\\*kwargs)\n\nSends a OPTIONS request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to retrieve the resource is the `url`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### options_request(alias, uri, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use OPTIONS On Session instead.\n\nSend an OPTIONS request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the OPTIONS request to\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`headers` a dictionary of headers to use with the request\n\n`timeout` connection timeout\n\n#### patch_on_session(\\*\\*kwargs)\n\nSends a PATCH request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### patch_request(alias, uri, data=None, json=None, params=None, headers=None, files=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use PATCH On Session instead.\n\nSend a PATCH request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the PATCH request to\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as PATCH data\n or binary data that is sent as the raw body content\n or file descriptor retrieved by Get File For Streaming Upload\n\n`json` a value that will be json encoded\n: and sent as PATCH data if data is not specified\n\n`headers` a dictionary of headers to use with the request\n\n`files` a dictionary of file names containing file data to PATCH to the server\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`params` url parameters to append to the uri\n\n`timeout` connection timeout\n\n#### post_on_session(\\*\\*kwargs)\n\nSends a POST request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### post_request(alias, uri, data=None, json=None, params=None, headers=None, files=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use POST On Session instead.\n\nSend a POST request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the POST request to\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as POST data\n or binary data that is sent as the raw body content\n or passed as such for multipart form data if `files` is also defined\n or file descriptor retrieved by Get File For Streaming Upload\n\n`json` a value that will be json encoded\n: and sent as POST data if files or data is not specified\n\n`params` url parameters to append to the uri\n\n`headers` a dictionary of headers to use with the request\n\n`files` a dictionary of file names containing file data to POST to the server\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`timeout` connection timeout\n\n#### put_on_session(\\*\\*kwargs)\n\nSends a PUT request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### put_request(alias, uri, data=None, json=None, params=None, files=None, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use PUT On Session instead.\n\nSend a PUT request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the PUT request to\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as PUT data\n or binary data that is sent as the raw body content\n or file descriptor retrieved by Get File For Streaming Upload\n\n`json` a value that will be json encoded\n: and sent as PUT data if data is not specified\n\n`headers` a dictionary of headers to use with the request\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`params` url parameters to append to the uri\n\n`timeout` connection timeout\n\n#### request_should_be_successful(response=None)\n\nFails if response status code is a client or server error (4xx, 5xx).\n\n`response` is the output of other requests keywords like GET On Session.\nIf omitted the last response will be used.\n\nIn case of failure an HTTPError will be automatically raised.\n\nFor a more versatile assert keyword see Status Should Be.\n\n#### session_exists(alias)\n\nReturn True if the session has been already created\n\n`alias` that has been used to identify the Session object in the cache\n\n#### session_less_delete(\\*\\*kwargs)\n\nSends a DELETE request.\n\nThe endpoint used to send the request is the `url` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_get(\\*\\*kwargs)\n\nSends a GET request.\n\nThe endpoint used to retrieve the resource is the `url`, while query\nstring parameters can be passed as string, dictionary (or list of tuples or bytes)\nthrough the `params`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs` here is a list:\n\n`data` | Dictionary, list of tuples, bytes, or file-like object to send in the body of the request. |\n
\n`json` | A JSON serializable Python object to send in the body of the request. |\n
\n`headers` | Dictionary of HTTP Headers to send with the request. |\n
\n`cookies` | Dict or CookieJar object to send with the request. |\n
\n`files` | Dictionary of file-like-objects (or `{'name': file-tuple}`) for multipart encoding upload. |\n
\n`file-tuple` | can be a 2-tuple `('filename', fileobj)`, 3-tuple `('filename', fileobj, 'content_type')` or a 4-tuple `('filename', fileobj, 'content_type', custom_headers)`, where `'content-type'` is a string defining the content type of the given file and `custom_headers` a dict-like object containing additional headers to add for the file. |\n
\n`auth` | Auth tuple to enable Basic/Digest/Custom HTTP Auth. |\n
\n`timeout` | How many seconds to wait for the server to send data before giving up, as a float, or a `(connect timeout, read timeout)` tuple. |\n
\n`allow_redirects` | Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to `${True}`. |\n
\n`proxies` | Dictionary mapping protocol or protocol and host to the URL of the proxy (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019}) |\n
\n`verify` | Either a boolean, in which case it controls whether we verify the server\u2019s TLS certificate, or a string, in which case it must be a path to a CA bundle to use. Defaults to `${True}`. Warning: if a session has been created with `verify=${False}` any other requests will not verify the SSL certificate. |\n
\n`stream` | if `${False}`, the response content will be immediately downloaded. |\n
\n`cert` | if String, path to ssl client cert file (.pem). If Tuple, (\u2018cert\u2019, \u2018key\u2019) pair. |\n
\n\nFor more updated and complete information verify the official Requests api documentation:\n[https://requests.readthedocs.io/en/latest/api/](https://requests.readthedocs.io/en/latest/api/)\n\n#### session_less_head(\\*\\*kwargs)\n\nSends a HEAD request.\n\nThe endpoint used to retrieve the HTTP headers is the `url`.\n\n`allow_redirects` parameter is not provided, it will be set to False (as\nopposed to the default behavior).\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_options(\\*\\*kwargs)\n\nSends a OPTIONS request.\n\nThe endpoint used to retrieve the resource is the `url`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_patch(\\*\\*kwargs)\n\nSends a PUT request.\n\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_post(\\*\\*kwargs)\n\nSends a POST request.\n\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_put(\\*\\*kwargs)\n\nSends a PUT request.\n\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### status_should_be(expected_status, response=None, msg=None)\n\nFails if response status code is different than the expected.\n\n`expected_status` could be the code number as an integer or as string.\nBut it could also be a named status code like \u2018ok\u2019, \u2018created\u2019, \u2018accepted\u2019 or\n\u2018bad request\u2019, \u2018not found\u2019 etc.\n\n`response` is the output of other requests keywords like GET or GET On Session.\nIf omitted the last response will be used.\n\nIn case of failure an HTTPError will be automatically raised.\nA custom failure message `msg` can be added like in built-in keywords.\n\nNew requests keywords like GET or GET On Session (starting from 0.8 version) already have an implicit assert\nmechanism that, by default, verifies the response status code.\nStatus Should Be keyword can be useful when you disable implicit assert using `expected_status=anything`.\n\nFor example when you have a nested keyword that is used for both OK and ERROR responses:\n\n**\\* Test Cases \\***\n
\n
\nTest Get Request And Make Sure Is A 404 Response\n
\n${resp}= GET Custom Keyword That Returns OK or ERROR Response case=notfound\n
\nStatus Should Be 404 ${resp}\n
\nShould Be Equal As Strings NOT FOUND ${resp.reason}\n
\n
\nTest Get Request And Make Sure Is OK\n
\n${resp}= GET Custom Keyword That Returns OK or ERROR Response case=pass\n
\nStatus Should Be 200 ${resp}\n
\nShould Be Equal As Strings OK ${resp.reason}\n
\n
\n**\\* Keywords \\***\n
\n
\nGET Custom Keyword That Returns OK or ERROR Response\n
\n[Arguments] $case\n
\n[\u2026]\n
\nIF $case == notfound\n
\n$resp= GET [\u2026] expected_status=Anything\n
\n[Return] $resp\n
\nELSE\n
\n[\u2026]\n
\n\n#### to_json(content, pretty_print=False)\n\n*DEPRECATED* Please use ${resp.json()} instead. Have a look at the improved HTML output as pretty printing replacement.\n\nConvert a string to a JSON object\n\n`content` String content to convert into JSON\n\n`pretty_print` If defined, will output JSON is pretty print format\n\n#### update_session(alias, headers=None, cookies=None)\n\nUpdates HTTP Session Headers and Cookies.\n\nSession will be identified using the `alias` name.\nDictionary of `headers` and `cookies` to be updated and merged into session data.\n" + "markdown": "# Python API\n\n## HTTP\n\n### *class* RPA.HTTP.HTTP(\\*args, \\*\\*kwargs)\n\nThe *RPA.HTTP* library extends functionality of the [RequestsLibrary](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html).\nSee that documentation for several examples of how to issue `GET`\nrequests and utilize the returned `result` objects.\n\nThis extension provides helper keywords to get an HTTP resource on a\nsession. The `HTTP Get` and `Download` keywords will initiate a\nsession if one does not exist for the provided URL, or use an existing\nsession. When using these keywords, you do not need to manage\nsessions with `Create Session`. Session management is still\nrequired if you use the underlying session keywords, e.g.,\n`* On Session`.\n\n#### DEFAULT_RETRY_METHOD_LIST *= ['OPTIONS', 'GET', 'PUT', 'TRACE', 'HEAD', 'DELETE']*\n\n#### ROBOT_LIBRARY_DOC_FORMAT *= 'reST'*\n\n#### ROBOT_LIBRARY_SCOPE *= 'GLOBAL'*\n\n#### check_vulnerabilities()\n\nCheck for possible vulnerabilities in the installed runtime\nenvironment packages.\n\nCurrently will check only for OpenSSL version and outputs warning message on any\ndiscovered vulnerability.\n\n* **Returns:**\n list of all check results\n\n```robotframework\n*** Tasks ***\nVulnerability Check\n ${results}= Check Vulnerabilities\n FOR ${result} IN @{results}\n Log To Console TYPE: ${result}[type]\n Log To Console VULNERABLE: ${result}[vulnerable]\n Log To Console MESSAGE: ${result}[message]\n END\n```\n\n#### create_client_cert_session(alias, url, headers={}, cookies={}, client_certs=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'TRACE', 'HEAD', 'DELETE'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`client_certs` [\u2018client certificate\u2019, \u2018client key\u2019] PEM files containing the client key and certificate\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_custom_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'TRACE', 'HEAD', 'DELETE'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` A Custom Authentication object to be passed on to the requests library.\n: [http://docs.python-requests.org/en/master/user/advanced/#custom-authentication](http://docs.python-requests.org/en/master/user/advanced/#custom-authentication)\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_digest_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'TRACE', 'HEAD', 'DELETE'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` [\u2018DOMAIN\u2019, \u2018username\u2019, \u2018password\u2019] for NTLM Authentication\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_ntlm_session(alias, url, auth, headers={}, cookies={}, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'TRACE', 'HEAD', 'DELETE'])\n\nCreate Session: create a HTTP session to a server\n\n`url` Base url of the server\n\n`alias` Robot Framework alias to identify the session\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` [\u2018DOMAIN\u2019, \u2018username\u2019, \u2018password\u2019] for NTLM Authentication\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n: Defaults to False.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### create_session(alias, url, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.1, disable_warnings=0, retry_status_list=[], retry_method_list=['OPTIONS', 'GET', 'PUT', 'TRACE', 'HEAD', 'DELETE'])\n\nCreate Session: create a HTTP session to a server\n\n`alias` Robot Framework alias to identify the session\n\n`url` Base url of the server\n\n`headers` Dictionary of default headers\n\n`cookies` Dictionary of cookies\n\n`auth` List of username & password for HTTP Basic Auth\n\n`timeout` Connection timeout\n\n`proxies` Dictionary mapping protocol or protocol and host to the URL of the proxy\n: (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019})\n\n`verify` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.\n\n`debug` Enable http verbosity option more information\n: [https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel](https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel)\n\n`max_retries` Number of maximum retries each connection should attempt.\n: By default it will retry 3 times in case of connection errors only.\n A 0 value will disable any kind of retries regardless of other retry settings.\n In case the number of retries is reached a retry exception is raised.\n\n`disable_warnings` Disable requests warning useful when you have large number of testcases\n\n`backoff_factor` Introduces a delay time between retries that is longer after each retry.\n: eg. if backoff_factor is set to 0.1\n the sleep between attemps will be: 0.0, 0.2, 0.4\n More info here: [https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html)\n\n`retry_method_list` List of uppercased HTTP method verbs where retries are allowed.\n: By default retries are allowed only on HTTP requests methods that are considered to be\n idempotent (multiple requests with the same parameters end with the same state).\n eg. set to [\u2018POST\u2019, \u2018GET\u2019] to retry only those kind of requests.\n\n`retry_status_list` List of integer HTTP status codes that, if returned, a retry is attempted.\n: eg. set to [502, 503] to retry requests if those status are returned.\n Note that max_retries must be greater than 0.\n\n#### delete_all_sessions()\n\nRemoves all the session objects\n\n#### delete_on_session(\\*\\*kwargs)\n\nSends a DELETE request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### delete_request(alias, uri, data=None, json=None, params=None, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use DELETE On Session instead.\n\nSend a DELETE request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the DELETE request to\n\n`json` a value that will be json encoded\n: and sent as request data if data is not specified\n\n`headers` a dictionary of headers to use with the request\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`timeout` connection timeout\n\n#### download(url: str, target_file: Optional[str] = None, verify: Union[bool, str] = True, force_new_session: bool = False, overwrite: bool = False, stream: bool = False, \\*\\*kwargs)\n\nAn alias for the `HTTP Get` keyword.\n\nThe difference in use is that the URL is always downloaded based on\nthe URL path (even without `target_file`). If there is a filename\nin the path, then that is used as `target_file` to save to. By default,\nthe filename will be \u201cdownloaded.html\u201d.\n\n```robotframework\n*** Settings ***\nLibrary RPA.HTTP\n\n*** Variables ***\n${DOWNLOAD_PATH}= ${OUTPUT DIR}${/}downloads\n${WORD_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc\n${EXCEL_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file_example_XLS_10.xls\n\n*** Tasks ***\nDownload files with reused session with provided file names\n # Starts a new session\n Download ${WORD_EXAMPLE} target_file=${DOWNLOAD_PATH}\n # Uses the previous session\n Download ${EXCEL_EXAMPLE} target_file=${DOWNLOAD_PATH}\n # Above files are downloaded using the same names as they have\n # on the remote server.\n```\n\n* **Parameters:**\n * **url** \u2013 target URL for GET request\n * **target_file** \u2013 filepath to save request content, default `None`\n * **verify** \u2013 if SSL verification should be done, default `True`,\n a CA_BUNDLE path can also be provided\n * **force_new_session** \u2013 if new HTTP session should be created,\n default `False`\n * **overwrite** \u2013 used together with `target_file`, if `True` will overwrite\n the target file, default `False`\n * **stream** \u2013 if `False` the response content will be immediately downloaded\n* **Returns:**\n request response as a dict\n\n#### get_current_session_alias()\n\nGet request session alias that was used with the `HTTP Get` keyword.\n\n* **Returns:**\n name of session alias as a string\n\n#### *static* get_file_for_streaming_upload(path)\n\nOpens and returns a file descriptor of a specified file to be passed as `data` parameter\nto other requests keywords.\n\nThis allows streaming upload of large files without reading them into memory.\n\nFile descriptor is binary mode and read only. Requests keywords will automatically close the file,\nif used outside this library it\u2019s up to the caller to close it.\n\n#### get_on_session(\\*\\*kwargs)\n\nSends a GET request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to retrieve the resource is the `url`, while query\nstring parameters can be passed as string, dictionary (or list of tuples or bytes)\nthrough the `params`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### get_request(alias, uri, headers=None, data=None, json=None, params=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use GET On Session instead.\n\nSend a GET request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the GET request to\n\n`params` url parameters to append to the uri\n\n`headers` a dictionary of headers to use with the request\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as GET data\n or binary data that is sent as the raw body content\n\n`json` a value that will be json encoded\n: and sent as GET data if data is not specified\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`timeout` connection timeout\n\n#### head_on_session(\\*\\*kwargs)\n\nSends a HEAD request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to retrieve the HTTP headers is the `url`.\n\n`allow_redirects` parameter is not provided, it will be set to False (as\nopposed to the default behavior).\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### head_request(alias, uri, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use HEAD On Session instead.\n\nSend a HEAD request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the HEAD request to\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`headers` a dictionary of headers to use with the request\n\n`timeout` connection timeout\n\n#### http_get(url: str, target_file: Optional[str] = None, verify: Union[bool, str] = True, force_new_session: bool = False, overwrite: bool = False, stream: bool = False, \\*\\*kwargs)\n\nA helper method for `Get Request` that will create a session, perform GET\nrequest, and store the target file, if set by the `target_file` parameter.\n\nThe old session will be used if the URL scheme and the host are the same as\npreviously, e.g., \u2018[https://www.google.fi](https://www.google.fi)\u2019 part of the URL.\n\n```robotframework\n*** Settings ***\nLibrary RPA.HTTP\n\n*** Variables ***\n${DOWNLOAD_PATH}= ${OUTPUT DIR}${/}downloads\n${WORD_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc\n${EXCEL_EXAMPLE}= https://file-examples.com/wp-content/uploads/2017/02/file_example_XLS_10.xls\n\n*** Tasks ***\nDownload files with reused session\n # Starts a new session\n HTTP Get ${WORD_EXAMPLE} target_file=${DOWNLOAD_PATH}${/}word-example.doc\n # Uses the previous session\n HTTP Get ${EXCEL_EXAMPLE} target_file=${DOWNLOAD_PATH}${/}excel-example.xls\n```\n\n* **Parameters:**\n * **url** \u2013 target URL for GET request\n * **target_file** \u2013 filepath to save request content, default `None`\n * **verify** \u2013 if SSL verification should be done, default `True`,\n a CA_BUNDLE path can also be provided\n * **force_new_session** \u2013 if new HTTP session should be created,\n default `False`\n * **overwrite** \u2013 used together with `target_file`, if `True` will overwrite\n the target file, default `False`\n * **stream** \u2013 if `False`, the response content will be immediately downloaded\n* **Returns:**\n request response as a dict\n\n#### options_on_session(\\*\\*kwargs)\n\nSends a OPTIONS request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to retrieve the resource is the `url`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### options_request(alias, uri, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use OPTIONS On Session instead.\n\nSend an OPTIONS request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the OPTIONS request to\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`headers` a dictionary of headers to use with the request\n\n`timeout` connection timeout\n\n#### patch_on_session(\\*\\*kwargs)\n\nSends a PATCH request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### patch_request(alias, uri, data=None, json=None, params=None, headers=None, files=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use PATCH On Session instead.\n\nSend a PATCH request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the PATCH request to\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as PATCH data\n or binary data that is sent as the raw body content\n or file descriptor retrieved by Get File For Streaming Upload\n\n`json` a value that will be json encoded\n: and sent as PATCH data if data is not specified\n\n`headers` a dictionary of headers to use with the request\n\n`files` a dictionary of file names containing file data to PATCH to the server\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`params` url parameters to append to the uri\n\n`timeout` connection timeout\n\n#### post_on_session(\\*\\*kwargs)\n\nSends a POST request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### post_request(alias, uri, data=None, json=None, params=None, headers=None, files=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use POST On Session instead.\n\nSend a POST request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the POST request to\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as POST data\n or binary data that is sent as the raw body content\n or passed as such for multipart form data if `files` is also defined\n or file descriptor retrieved by Get File For Streaming Upload\n\n`json` a value that will be json encoded\n: and sent as POST data if files or data is not specified\n\n`params` url parameters to append to the uri\n\n`headers` a dictionary of headers to use with the request\n\n`files` a dictionary of file names containing file data to POST to the server\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`timeout` connection timeout\n\n#### put_on_session(\\*\\*kwargs)\n\nSends a PUT request on a previously created HTTP Session.\n\nSession will be identified using the `alias` name.\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### put_request(alias, uri, data=None, json=None, params=None, files=None, headers=None, allow_redirects=None, timeout=None)\n\n*DEPRECATED* Please use PUT On Session instead.\n\nSend a PUT request on the session object found using the\ngiven alias\n\n`alias` that will be used to identify the Session object in the cache\n\n`uri` to send the PUT request to\n\n`data` a dictionary of key-value pairs that will be urlencoded\n: and sent as PUT data\n or binary data that is sent as the raw body content\n or file descriptor retrieved by Get File For Streaming Upload\n\n`json` a value that will be json encoded\n: and sent as PUT data if data is not specified\n\n`headers` a dictionary of headers to use with the request\n\n`allow_redirects` Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.\n\n`params` url parameters to append to the uri\n\n`timeout` connection timeout\n\n#### request_should_be_successful(response=None)\n\nFails if response status code is a client or server error (4xx, 5xx).\n\n`response` is the output of other requests keywords like GET On Session.\nIf omitted the last response will be used.\n\nIn case of failure an HTTPError will be automatically raised.\n\nFor a more versatile assert keyword see Status Should Be.\n\n#### session_exists(alias)\n\nReturn True if the session has been already created\n\n`alias` that has been used to identify the Session object in the cache\n\n#### session_less_delete(\\*\\*kwargs)\n\nSends a DELETE request.\n\nThe endpoint used to send the request is the `url` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_get(\\*\\*kwargs)\n\nSends a GET request.\n\nThe endpoint used to retrieve the resource is the `url`, while query\nstring parameters can be passed as string, dictionary (or list of tuples or bytes)\nthrough the `params`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs` here is a list:\n\n`data` | Dictionary, list of tuples, bytes, or file-like object to send in the body of the request. |\n
\n`json` | A JSON serializable Python object to send in the body of the request. |\n
\n`headers` | Dictionary of HTTP Headers to send with the request. |\n
\n`cookies` | Dict or CookieJar object to send with the request. |\n
\n`files` | Dictionary of file-like-objects (or `{'name': file-tuple}`) for multipart encoding upload. |\n
\n`file-tuple` | can be a 2-tuple `('filename', fileobj)`, 3-tuple `('filename', fileobj, 'content_type')` or a 4-tuple `('filename', fileobj, 'content_type', custom_headers)`, where `'content-type'` is a string defining the content type of the given file and `custom_headers` a dict-like object containing additional headers to add for the file. |\n
\n`auth` | Auth tuple to enable Basic/Digest/Custom HTTP Auth. |\n
\n`timeout` | How many seconds to wait for the server to send data before giving up, as a float, or a `(connect timeout, read timeout)` tuple. |\n
\n`allow_redirects` | Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to `${True}`. |\n
\n`proxies` | Dictionary mapping protocol or protocol and host to the URL of the proxy (e.g. {\u2018http\u2019: \u2018foo.bar:3128\u2019, \u2018http://host.name\u2019: \u2018foo.bar:4012\u2019}) |\n
\n`verify` | Either a boolean, in which case it controls whether we verify the server\u2019s TLS certificate, or a string, in which case it must be a path to a CA bundle to use. Defaults to `${True}`. Warning: if a session has been created with `verify=${False}` any other requests will not verify the SSL certificate. |\n
\n`stream` | if `${False}`, the response content will be immediately downloaded. |\n
\n`cert` | if String, path to ssl client cert file (.pem). If Tuple, (\u2018cert\u2019, \u2018key\u2019) pair. |\n
\n\nFor more updated and complete information verify the official Requests api documentation:\n[https://requests.readthedocs.io/en/latest/api/](https://requests.readthedocs.io/en/latest/api/)\n\n#### session_less_head(\\*\\*kwargs)\n\nSends a HEAD request.\n\nThe endpoint used to retrieve the HTTP headers is the `url`.\n\n`allow_redirects` parameter is not provided, it will be set to False (as\nopposed to the default behavior).\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_options(\\*\\*kwargs)\n\nSends a OPTIONS request.\n\nThe endpoint used to retrieve the resource is the `url`.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_patch(\\*\\*kwargs)\n\nSends a PUT request.\n\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_post(\\*\\*kwargs)\n\nSends a POST request.\n\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### session_less_put(\\*\\*kwargs)\n\nSends a PUT request.\n\nThe endpoint used to send the request is the `url` parameter, while its body\ncan be passed using `data` or `json` parameters.\n\n`data` can be a dictionary, list of tuples, bytes, or file-like object.\nIf you want to pass a json body pass a dictionary as `json` parameter.\n\nBy default this keyword fails if a status code with error values is returned in the response,\nthis behavior can be modified using the `expected_status` and `msg` parameters,\nread more about it in Status Should Be keyword documentation.\nIn order to disable this implicit assert mechanism you can pass as `expected_status` the values `any` or\n`anything`.\n\nOther optional requests arguments can be passed using `**kwargs`\nsee the GET keyword for the complete list.\n\n#### status_should_be(expected_status, response=None, msg=None)\n\nFails if response status code is different than the expected.\n\n`expected_status` could be the code number as an integer or as string.\nBut it could also be a named status code like \u2018ok\u2019, \u2018created\u2019, \u2018accepted\u2019 or\n\u2018bad request\u2019, \u2018not found\u2019 etc.\n\n`response` is the output of other requests keywords like GET or GET On Session.\nIf omitted the last response will be used.\n\nIn case of failure an HTTPError will be automatically raised.\nA custom failure message `msg` can be added like in built-in keywords.\n\nNew requests keywords like GET or GET On Session (starting from 0.8 version) already have an implicit assert\nmechanism that, by default, verifies the response status code.\nStatus Should Be keyword can be useful when you disable implicit assert using `expected_status=anything`.\n\nFor example when you have a nested keyword that is used for both OK and ERROR responses:\n\n**\\* Test Cases \\***\n
\n
\nTest Get Request And Make Sure Is A 404 Response\n
\n${resp}= GET Custom Keyword That Returns OK or ERROR Response case=notfound\n
\nStatus Should Be 404 ${resp}\n
\nShould Be Equal As Strings NOT FOUND ${resp.reason}\n
\n
\nTest Get Request And Make Sure Is OK\n
\n${resp}= GET Custom Keyword That Returns OK or ERROR Response case=pass\n
\nStatus Should Be 200 ${resp}\n
\nShould Be Equal As Strings OK ${resp.reason}\n
\n
\n**\\* Keywords \\***\n
\n
\nGET Custom Keyword That Returns OK or ERROR Response\n
\n[Arguments] $case\n
\n[\u2026]\n
\nIF $case == notfound\n
\n$resp= GET [\u2026] expected_status=Anything\n
\n[Return] $resp\n
\nELSE\n
\n[\u2026]\n
\n\n#### to_json(content, pretty_print=False)\n\n*DEPRECATED* Please use ${resp.json()} instead. Have a look at the improved HTML output as pretty printing replacement.\n\nConvert a string to a JSON object\n\n`content` String content to convert into JSON\n\n`pretty_print` If defined, will output JSON is pretty print format\n\n#### update_session(alias, headers=None, cookies=None)\n\nUpdates HTTP Session Headers and Cookies.\n\nSession will be identified using the `alias` name.\nDictionary of `headers` and `cookies` to be updated and merged into session data.\n" }, { "module": "RPA.Hubspot.Hubspot", diff --git a/releasenotes.html b/releasenotes.html index e920b0da4c..7f1b30c211 100644 --- a/releasenotes.html +++ b/releasenotes.html @@ -169,7 +169,6 @@

rpaframework-assistant latest version rpaframework-aws latest version rpaframework-core latest version -rpaframework-dialogs latest version rpaframework-google latest version rpaframework-hubspot latest version rpaframework-openai latest version

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 lozY<0?7sG)8w4Y}4%QiZ&AQ;W;?(EKtW@m;u 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Ž($3eHKr0PGCkysYsxM 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 y8$_ZGbl5h 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 z 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,P^lX_0n(`ng%{ub_Q+c(!g^XtD0UKf>NKfG~{PY zlTGfmG%UpWf{~0cn?J3SRDUO-HCTVU#ZG#4?k%pcgH;_A!ZVU%zYlS zKf&st(vo0>bye3jC~Z~63x+WGFxj;!l)$1_qOcs`)VW-qu1%YdC1~kdTVMCi!+dY< zE~F?89MJbY)fv5d;~ELMr4pswDi}(fHC5U}Wz8`8F1#r}g9|U{9ciUf(Fi1!9TjbZ z_vkVQ;2chLw~4)xNe;FuQ|$)7yc37ww%S;=i6USfBuUf`SEo3MI5Ln;CDztEi1tiA zsI1Ts_;<20?rp*P_qw6=Nl2b>7yNNfO|2kbsjVy-R@p4 z0uiu@%}+_XFxL(+0s*G=d&?$0G%OdXOV2E6LR^LX}FC zD&}iSR>Bbz#2FVruZc4%XzCGXBN6A2pid9toSTr9V406l<|$Fin6IGBS%JKG!zIY_ zOaa`QEKd_O^~iE1k>yE(K0U~Cae^!{=O#j(*G8#hzJfXz1k_27njq4f1XySyyJ=f2Th_s5j6Ek zbQO{4V}d>biLyPG%sm({h(8xBh#!F~0hpAVlRXh_D>Y0Xz^K6%F$|5NG=3@v7U^d; zqeDHksUlagu0*lgAGR)Vat%3MlP26 zpWRHnF}zKHjke-y&TP#{1l6u19elW8c&&q1qiJ9<`v|J>oJMxjI_MXaGs=>ugCzR- zIv7ON!XuZb5nhA!r&#o)QMKQ+Jy-{~#C0%?s&yX|)0Sj$sB-zngS&U(HXj|M;0ap1 z)LC{Xak!4YhA#-#rf{lQ#cz0P7&Tv_X$W`zP0OR7*D8OFX5)pu2aYmxfkhGN+MrYLM;YqOQC%?ky?Yisj- zG!3jxxRyQEsL@V5B!2*p%k%9tD(8SZX)1?8Ylp%U5oBlF9W_`Md7V3eUha89W@F%| z*MC3&^-v@Sh>-#PgrxZ)LFxwtw9w1c54kCrhI_(WggCm{3iSe$)NG;Ri3MokmHFmD zE1$(`vEhOTv-_3-5f;-3%Rr;0{%1ELi}%?@p%aVuHWKge30Nu<@9jfFHy%8=kA!+Z zzomjR@b)zB>(S{q4E{EqL5w9rr;3$U)uu)pGn_r7t=8&@6kiDnM5K7Jna{{B4C}#t z3F>VYP)|$jRooQZI6aDh8#t>0sHw&X<#4Hwx`B1Ep@tilxxHHeua-p%@3}qcX&v`& z?{*e?vHWZ&`ME*>uuOg$=Cp{*R&FkBQ<)g$@<_AOyaG})R;5%koJGx++O@}3*O=lh zkh8mIYV=@Guk((|(KgQO=v)oOUt`DI7WqYb)wU=<*?@Kq zE7;Yp+Ux*Rj;mFjfJsA)f<7F8kyHP1%K`mgbQaO7jG{=2vRJDE|E{~ae;AYn!fLlH z7{imt#1EkC*IB~Cdj$op)^~V_>|MBbvp~%T2upeN^nlK9Yw^gI`9#p+X40-NE8KJI zPn@jkG8x7)nFFTP7j9DSOkiW}SKvE9C7IL!4l}kiOVBlMBdaa!VnI_cxVf8fTp;M9 zEy(fQG~C}TR3aQf`Jre{S{tHlz5?YF4tN*r8P&@KuxM0Q37UGS?jck!5%lSS>LQ>@ zN*cj+M-*4{6}UbGJrjJrSpbbj_C`Td581th>^4E49>^|J#pQfE6i9Rz9ATAlo=(E{Lo`%1mVU_D*yD-mW^aT3ZJb zH-)T^kE1udqNQ%bjMb2<&oxmvyr#F=s=Q65HB!Uc(LxnvTj(Ytt}oKONjRh8D?`64 zpsaR7U(8J*1j$mkb_q}Y0@kTsf#smGRB<9Of|%j7*v|=(d%FN~Epis}OAyn_r?SIG z*4|>-TW&m|-cLgP0s#VAsGY2lhm*Scdv@RhK=P0Pi9(^~U4T&A&&q1d#OLR^f)cr`F4AAzV7y9vQ9uGMeQG8#g%1#gKO-1Ei^AD6Wm*t+G>kKv zcBzAc$I2DXJ7^$RHrJze1q*0UzhJ?FtJtGHf&MAvQU5mx=OUrIZ;N}>q5E**t$e3q zjGw#clyKfaF_h5I% zB_?q&Wlx7WUfr4Gh&t6xbSD|9Q_*M)Hn4E@y#z~M*qmoG(&dNE@k7E&9mIHff~2j~ zE!-3<*oB#Q*&>l=L1W0K8arG``wB@P7T}{-PBmw?Elg~+?jjx9Ef`+w&`oIS>`ZE1 zTaObLE(X~1d4l~jQ>ERN(N;6+&p(Z(NDIU1(V>kztVm6p5Q%3CaMU943~pM~ZBo5L zX2X$B;)-EUvfmOgzCr+_X0w`2%;v`uo1Y>WUdCqJ3Ea1BN21oFsfxa@(!vP@e%B!t z@(gQJD1?r(g4M=YTYpyTi2A0hLh4`WoosHZK6_s)xWCX}_t=vJU>e2Ae8F9Q>2owJNBHh#o=tD4gg54hx z@I#B_2aHHASEuCW>i=dpWHq$y#(f)XnuBPEDYk`v=RK~s+y zqeP6e1$}xDVv4n@uZYsZd<88|Ne+`B!)pX^YBIc1 z(9|QtVIsrJ1bupt0r6Yse?-v#P!xUh73eQE-4kekTmY9w`y+y;9@-Ox_6G!gdY}#N zXZTrx!DQp&&zUtixvEa;(FD7540F z01L{$&_9KuW2f039P4OEVjXvUj<2>Kq#9sU)?U5yx~JLUjQE2SwYIKjf$B`95mZDu zT4~{CI})sPS@lL0XUqFlRT7+APu4o>J_vHNRJq#{6&a%nDs*a%HKIl}QaTeT?})qL zsEmR=P^*nGwpGXZ71|mi#A=AiDw>Vy`MK=M7@m7asdm(h!iaRQ9<`3S#xAB9>& z2aI%cbru0Wx_>`Wq2emI9*^QJ&7-)e-_k&}QI_{8VmPhI<`i;%cyQei#Zx9RHtxsU z*=8v=GKsN9W|3FIVB)r;N=Ijq8>mL+ zE25)v9%Q;^dXVS3d2lMi{mUcfG$Iomf;-1i z9BKcS*fm)H8v&U-(%wU){hXjrK-%n;G;^E5YpU{KvU__wn@b5D&;1Wq*Q?Aik$sNp zAUwp-<3=IC%Gem5L4vD|LjiJtV@KVa`WuS*m+&I{xv4E6y*?fIDK~}4kmn=8HsLIZ zx<*jlUV6_OJV8Nw*8Ci4+AQYmS+5?x z$|x=Ntn`;tzBQX!`G)8pPiV7K4j*YdIPAK;Hief4umPkeDMqTJ6}qf}vYJ%e^C-#*H~29y z{X1Rw)*WIBQ-AQLk15&8$n=IU%M)~Q9O46~tsu5=^Y%z?3T38rd?`G# zRV=a3d?G3H!v$p0%6xSozDN|vmiSC%<~fZXq?I|SU9a>mFWH8)C|8*`8KGfi-sJdE zpCP0M>urmhG}&g__F!dxN?e%}$u_r``*s|Af=^+>B_;oYn~I9yQxmU*9Bm=|flF5| z`a+kX5AG}B=pf@v8x>#mEy9>iiSGP$fn6^KlPKw>>e<{B+7kX(dLO>~e8SwPV4DrsjWf*{fY>fw=F{S7q!Iznb- zB6z}YwD%{0 zs;r9Obg9~E!AU_}yDggB2cUO>L*qR+ZjQ zwSAP-h9VD-KY&}e35unj9JVpCG2l8Tq+{^mVncf-H-+TJ46XXHH+MWo{@EltD|x_t zLkqN}++lqh!7(RzE+$89uW%de1jKD$;DQ#W<%xzWYLN$bs(JG%L|Xf?C8nPCq&p;a6Nm5fHs<~YBsR7lwxZFe~+vA zZNVTlvY4q|V(PsDzyqdc51+Xjv1TjVmEBvs8eQg{7Sds)Sp(o1ao|Ng#X|w5XlnC& zfG|6j;r$!&8RPo}1bZ61HqiFH+!UNHboWd33X_E|)sm@Z z?#&|4U_X!K=l>B5pK>yEY$^0I5GM&MIg*t)Lj8QfcfPD%sm_NLZa4ML7#wH z+04jXW0);U*t2{0SYxs~WlqVl4--{NhsJ_8sVFo?f$!eWI#Nt3H#Byo;U$O0u5^N5 zA5$zEp??a+xewVM92$GEC^UwOr z8EgRc?`GpR95E;}1Wr1?MR1+tap)l}`b_6tN;wF=D?N(lzI8h$MC zzPizP5q_=!F1-j_xO%+S7=sGNlT3J&+6KZiGg>5|eN7+G4j4DAJ?ut9VMdS7hML)` zM*8U)kC&41XbXVR#$y^ymEcDm3{)4;2PZ~ok?)7soZFnlrf)Nq8qLuPUK?ny8K7;+ zNR{q{^X=Tx=2#Wa*o@#Db8;FvfFrd=tuvbz-|n%SCvl>Qyg7@IVeumU#W8^e@Y4b+ zY8T{BxG5B4r&5ghAd+21=5tU8hk{isP`^t8^)Ue{WCC@O4cjODR1;W?Za}_6Qku4I zqA36O1+Z&2{)=H_q0NWt723N(!PDa&k#B*urBic>nfG#H-nRt=kTGwwzm24L*(6?g zr6g8YIYb$Tc4Z1_3Y3Pc5?P~p3fJ^K8Y^x>vBjIwiv-lx@^C&kg<7vum#oF;I!jW# zD>$a+6?6F&#N~4YXk~FZd!|fBj@KFE1En3g-~~Byt(F z3yq)z9)frxcXMc)55W8|3qZK>7Px=Y+^zSnPpgBP0Z<(89dXs4sscB9`e1X4@;h*Vht7N&%@9!u zPPYnph=0l5vw2HWq;*Hll%YEsj6io*q|h}=vn(KkV-Rc0Hw7SRZLuIZ&9KZ4wMDfQ zYs(u+TmD1mqiLWmp|MRCo!V3Fv}cenqMrs28Gpicj`4}Yln%MX4}f+7x+Mi+ zDei`ZQ-OVp&8Gz2m+}B2QBZSQ)g$kR!dT- zI)de9Sb&IDnIUcpn&XLuB&?45(O*F^)mu#EHxrc~DgZ8v%GonzT6oqIV;s{K-hVKJ zEj-or>g_|3Y0b6pei^T;gEC%a;14o9mi{T^L)~e6u!Vn{$iiRg8TX((2*(yi8@16R zw71YjP_&2Dju`v9Y4-H)uz(@I2O|h$U~O&+sigM`ypuGFd}PAxOiz(sV1=43TecE@ z$~#Dkn*wCC6gP-+%;{+K2ginX`AuU>%MiybX*G@+k0E*Ym^CTDzgG%S)>h?ZhJP32 zVC0#Y+@}9ub7vkNMU{5(u!Y4WKm->MCoB>KS!73)F%Xsva8VR@zb5H)=roNn~r-#MpxPj|W@{xLp}KTfKv zZ&kf@Z`FHG-@1jUTjgearq=LGEy`fGQ=O^QTS|GoQSAsf)%w?)*qOL>z2Sm}uQzPy zX|Ff2lfVs+dqdc3tbQ2X#ea_Idb2t54P9>@On$wIPb1Fi-Fq~D;pTLeR(F2-bd0X9 zE-0FXM|%02XhG<6W|p&KUa3;%pOLJ3pV^oKQ&jlK9_n*kWm<-oL~EncypJ-dIiU)_ zPphIRnD)r2W4dmUB{&DxTJa`Ur_=!o@7{6ABbcza-)FG5p`6XxlX;9;thX_=i8j%N(V(b>jZ-11PjO7&&e~qa_3j_6cV}c!e5l?H zV-!-~q&p?Vw73)lJn$1u@=19UJ5$lMtt%2@as-hsPZDW#n-U5|nXST$5~5s{K^Q{U zF>6~HNBMC^d3pxLr;2jwEv0PTIb7%zuukbuWs1L#=y#Myru=KPD&jlrXb&fHMvlG+oJMOuQrF9b``c4&0jn}N%uowh$q1*u&ct^HO7P|h zj5SYqXD~ZKuoIGX(q3oj_0QiCB>6isIF!(}V!Kww8N<6z)9h*V)TCb*@w7_L_#8aV zbMRUQJD%A&7#x>!PA;v+IFW+cj2JQrd3LqC27|)%P(iZPbG6+KG?0p|Td%f@m=Zuaq+O`9ke+OsA+ET`6^BJDaZ!IG;l(`dJtg*swqgBZe`xD}HX1SpsPUg8x~KGxd_(t?=aS!3 z;yY~^D;23=eA^x#pYhu<{gZV&v8sKfzI%0Rao5b4LEk9m?vkttjQvGQZe*hvhmd4= z6B?~maY;Ml=;IL6Od3-P&c3xbsjG9st!M)q&ZrCyHq>xN##NQ0dkRCIG)+p*YXhzGmD+HnEA^kU=OyP2@VpJ$1G=vUhJ} z#27`&9K5)ux)84d3J+4i#CLXQffrNkVJ^KHoK2+4@Ag$47I;Qvdu+XRf^AXJU>{+lQ@`wvr@-Yns9T? zjawcqU#+%jQTi)$$hWn&iv4bSTCBs&zf$ZIX4Q>uJ6vnSyVWl7ql7){*w{UDbwCLz z_AEbc&s6=x`;`~7U-%$luL_TJuQINwudt?mr!(8IB^kQT9I`5bJ$5RD5shp6adu2# z_|X=oNb=Frc8MiKgPG(r9R65EH~uFIoT|j@SL9U1e-JHQRoi5Ks;uo|kDK$-7%eCC zcf)&TH96}V8nfIHO zdeUd5PvJzlezu=5=MEF|blE=B?6lc_>{yCnabqc#AkGN)V*YbP-Q-1)Zz$V;J$bet z-%Z9)ib%E%j}p&f#MnZdSXs$mjo$KDjyIs&vBunFz2bO-DZ_%SCVkY-(Ao@YWa#F< zMysMJo|^GdMqAgBdUUyOD3G((hoU&yT%%oieV{;sXFq%p_0L4YaCinS z-I-trqLnYutg<}j=OYfw2($`Cp&VuPx;%*Msk4o?>8;wD zKzvf5u|n}c6As)AUO#|eCDZFrsyZ`Ad9QDkRpN$6QP zuZ`2l+wAUAFP@U)7DHc%EXeUVYHK_`o7*wV;SNr08ffDzbw~be5oqt2Q;Aq%)_uP> zyi$umi*g5sp`g4x%-3IySYZuJ=Tn6xt@-A62M;P(7s%5q%WMuz=UH zeZ7^?C&hng)9(W|>nAu5;>=yO`+|YCHGUsnd=^tm3zZTKbV>Lmp$OOT(M_@fc~-g6 zeaN=go<4BMKKT3*83=hf{%-214hD|J9SrXS zu$4P7eh2Ryu;c9k2t+ofGN{0DA|#dNHoO_VqH<2qnH|V0#XJYL=%PT=O4O>{a=bgu z7O8oNtQKfyrs`5R3v8<;2yZn9DO5!l)p{NN@*3NmD%PoXjybh8UWYCAo2n*upKVs9 zx6-PkZEfY1UXC)tfrR$5Ww=E+`vh`uFkZ9)y(j^N=7v_Yak?jO5Y0WW)=_K2F*(qd z>^j~YF5yr8HdgMy2~MA{)_X?({#fkoSF2Yt^sDjA=pPJp3eq_ILWK+}K!aq_$`U{NY)xOd>HfQAw zryKvHrZ#uiu#)F^F*B&oc7;mQ`^=`wESWLzI@}f31#EsG$0|X^d-3gN zj_O%KRldO zjM6G1f8^8*8af0c;OsMTOeo5=YF<`WsW*_#HdU@-T5@GeV@eP-dskcHZ%wnZTz>_e zWlo!GCf-HjauOT3{GY^k#35p73t%zPJ{!m*wzmSd606z(D~XSCfDedQa)Hf+GY@bO zZ?pwoCr)V(bR$m72Tmnk;h&p{75wuK;^48sm&E1{z((TSj({O5j{_=*F~G!4e%(DJq2h+oOdp84srJRz*$7rG~g$yl@|ba5{HO`#9fyF%L(VDfP?sw z_>8#zGT>TbmkoG}_`l16Z-`yfxs3R<4ETunA3Ja<;VlPhi4&c`am1<$U?maYpYw@l zX977)4ah0V;^S#BO5RTwp5UzY_2eU;PgF7jg4dz>UP~zXx6=R{sH5 zMNF6nj3quK-Y0ewJBjUA16zqpt^qD2&LD;nA6*N4K-63ZxQTxg-x9s+fI{Mv>w*2m z#2bJK#0$i8Qe5RZqGUcWj=20r;1XiX&A=vN+fBf0#PC~yAw(CV6LE+*NIbOwc!HRH zE8ruF76PM)+8|IxOj-n#5O>`MEGJ(13$U43w-|VgxR|(rC|&{-5qA?Si2IiU_YwBn zf$7A_%Ye?rmv;c45uYpv_7iWf0Ny0}-vyjTEV~C-O5Ddk?y68fq0g9ipahnXhwWQd_Wv}5I9IoSqn@eu6hW#l9>A#FpGHL5nwfO^P|9x#M8uj z;sEglQNWeE5L1aMM4!ijUPRj`fE;2b;UosE2l^7P6R#2jp9K073yD7wfv14^M4M-T zmc*uKfftEE&jAC7Cy0L#Mb87Hh)ElO65^Z}fXT!u8-Z@bEiVB#5xa?xsvS zjr)KN#DEWgzJ&Wjppy7E@hx%He&9;tAH*ZXc^?7i5X*^WMAMIf!}@?~GI9Q=z`4Xl zp8?Z|O`iiV61~3w3W>GE{Y37UKpUc(m`Us*b`i4<0AAu1Vl&a>AkdX~>?`15V$IjU z--#u}Ux@yPfYXR=#A`&sH$WGn$q&HK-vc|Tb`XpH1KdiC_z4(F+(2AMRQ(LNh>eGV z4Mc}#$j90fPZH~hO)Y>IiDubA7I7|Nh&zbei7$!Ih>+lk+t0E{P!PXvmHmx-5%2Ri|4h+|F$ zS`j;m9mJ{vU?uT2ae(O79rzXTGw~x)c?wWLJlPXiM>OvRG$C#zZXizR19T*I6FZ5a zeSty5t;7Q2&;5W~h~52xoy5cezy#twVh^$Kbl^`!$v|KnaW}Do=rI`RO8l0XLu?oV z{FC_4P~dxFC|;=O8bq`o0pt-qFa@%!D^W$bh|4hBi0fiv5+3Vyl@P0mRm4T3fN8`= zVgu0~1L|A_#I3{vqVQ~>2T@B@5x2seb1fj=A>JmMvd?iC${%RW4vBAWEqYS$h}0!9 z>W&y^S)FHF`)Z;MfZ5Z`5jCvVHJq)AXg;CD}pSI7+s#A}` zs5fEMlQ8N<81*2GdJjfD2cuqtQIEl>w_wy$FzO{3^$?7D2Sz;uY^xwE%cw_S)EhAB z2^jSPjCue@*}qZdZP`Tq3h{qYT|BJ2%SA>y(unW#mTLxKSo=ci0ku|F2; z_$?-;MoFnrLTZ$Z)+rG+Ni=$%$(2!JWt3Fm==O36lPRM_$|#94 zN}zDO$eWB3C)6C|ONb#dB%@>rtql2)QIceoAmQkc7a1i+MoAH(fm{ej_XWvB$S4Ui zN`Q=#AGBp;I;bZi6CSh|!xZ2|$jyj3EHsUYx=8c+< zJ2kFXB5&9@FCuT$*awj}Xk0x+-k6PU%BWYkAsfH5fVW^8g3cVv4Lr?hb6)H!ZUSTQ zEXxrrgLW-y3jBsj-r#!vxs|w+kW2U_RZHIIcTmYM%xVTDzi?R#DEWmQvZ3S`?q~%i zzi@RMDEWn-=0M3W+?op|zi?(Al>EZC+Cs@M?1ekK37 zzwng~Q1T1U?+7Ko(0v?~{K9d^L&-1Pe*%>J!e5;TCBJYTmHfh8ouK3wUf&r?e&Mi_ zpyU_M=>jFcu;+VqU3zzhOl3%!?5K4YwelIBbg?=je zg&$MNFPzl}N`B$zr$Nat%<2avztBr1zp!h6DEWn#4SEZKAqTSj!jqg(@(UMG z$uE3D%pe=&4rRpIOj?z*@WNx4oWuRpRR(EP58#|p~lVw z9{2DNHXCcK80316a;O*jb|nq?DCzY$6{;ij9QWD~x2Gn8z?4!1zbCLBp6 zoA5g-*@Vw7fRask<*iV%35yp($tLs$p=1+ISp+4U@SfYCWD{;hR%h9S=PZVjP5300 zY{KzNpkx!?OC_6d?NTV&gcY|#$tLW&3~K*!;NTsAY{Jj^r)p10|dA)O(?16WZ>Bny?yJLnWKg@K4!<&r``JY<)kJY{E~eWD|aeOwqClr>=#P zO*ro%DA|N7AAyohc-^B=vI!rhl1=y#m2AS}AA^!jSVAS6@OMA*f~TNnJdImlYm6Vz`weZOH~mD%G_=6rKMb&s zANA6|M88iKVAfm=c5vhELHL=oFMp=T15O-hfS=f(}%c9arC8u7LhRz&Dl{823lTNG}V-t@%$l|LqR4F zX&FC!#5E7)V`$9;d>=!CSd8mJViR#SJ`4>BNgBR>q3|JK_?bB4=pE_T;)Az5AtK=s zHsM&r1aDcwsyeFr!FwLZT0eNMrTBI@ZX;5}Z4JJPxUmG+I^xA=f!t?+-xBE}c*GTn zb-3{r@X3V0G!Vme39IV3>c`NJqfHaTq7*Tlgs&ooEWtICkk7w`ft1fb^f@T`{7+HI z=P!O9N)EB zN;xi50rfV+3!Nh=U+?J_B|kfFOdB{(2;*WPL)H*=YN_? zKL6%@Q1bZ)eE=n&zve?I`TRdp$>*Q9A4)#|6IAl~FF=>p^7-$glF#4bV<`Fj=TXV$ zzwlEi`TUoD1|^?=%jZz?`TKqWC7=HhD*62FzJ!v`e+89%{`aWl^Upm1C7*vQm3;of zgHZDM*L?*gpa0KaL&@iVkV-!Pz(Y{-`QN0H&)@wUDEa)&e}IzDzne-v|Kk5Z$>%@w zCn)*+H&V&xul*THKL6&!Q1bbYM;F@i`JbVZ&%Xs-Y0Kx&M(5e``Ol}4&%c67KL0@~ z`TV13`^)D)fyTak{;5>*`Ts^GpZ{M}^7;4D_Lt8;3SDi>=f9RpKK~vn`TW~y`^)Da zj1IWv^S@0cpMN~M%GAme1cD zU3AOmpGqa4eilc<@1k6$KCSzU!{`I|1i4omd~GuPQ2yw@1~N^zZ#u+%jf@= zND30OY=Bp3pg&wnqKeEve%1D4PKdn)<-8)^H? z=RZ6YN)<}u6X=LATW z&(FzHET5l`xLZCypV_s1evaq2e0~mcmd~$2w*EkF?0_d| z!s}TBqGFd=>tUD_hLu&7)wm;L)U;}cgoTl{TgR2yI=oeVDL<}!C2Jfr+A*=L&?i}e zHW-v>ukrI`kioz)cnHdE4FJQ))RtpH%NOG34A(f^ZBQGrW*J9)}Ct|6@T-BA>Z#)jhp<)I6-Q3-8tIAZXA2e4h zd@o7J3Zo&D6BiS;!VID|DBZz#^VeduG&?Mzq36-S4NLc31TOL0Nn&?unt;S)+&$B* zD)TXI?D~YOTW(D3=vc;#kNlEkVwO#otIRg`8`nX;M3 zs$ER1=;X%4s$B-LI(}L;##!U?sL7%*=-ay5M=n??KacO7+0qyz2%NYKj(Fr~Kkf%UbpG++3p)9D7hkByUs_OxVevEZ zNws5Sfj=4;e>KJdBQ%kyG^&jF$o)1=IAS68bF-KL#)Pff3L6~< z7kkbwcKy;`)f*LoP;a(TWyDAEwltxMiQ>XEt2P|P(J6Yf2G)QDGa`*swLCru_1?txM)%>y&2IhHKmS z#)j>`s\n