Code Monkey home page Code Monkey logo

robocorp / rpaframework Goto Github PK

View Code? Open in Web Editor NEW
1.0K 48.0 202.0 150.82 MB

Collection of open-source libraries and tools for Robotic Process Automation (RPA), designed to be used with both Robot Framework and Python

Home Page: https://www.rpaframework.org/

License: Apache License 2.0

Python 93.02% RobotFramework 6.40% Dockerfile 0.03% HTML 0.13% CSS 0.19% Shell 0.03% Java 0.20% Batchfile 0.01%
rpa rpa-robots robotframework automation robocorp python robot ai documentai nlp

rpaframework's Introduction

RPA Framework

REQUEST for user input!

We are looking at improving our keyword usage to cover situations where developer might be struggling to smoothly write task for a Robot. Describe the situation where your implementation speed slows due to the lack of easier syntax.

Comment HERE

Table of Contents

Introduction

RPA Framework is a collection of open-source libraries and tools for Robotic Process Automation (RPA), and it is designed to be used with both Robot Framework and Python. The goal is to offer well-documented and actively maintained core libraries for Software Robot Developers.

Learn more about RPA at Robocorp Documentation.

The project is:


rpaframework

License


Packages

rpaframework latest version

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

rpaframework-pdf latest version

rpaframework-recognition latest version

rpaframework-windows latest version


From the above packages, rpaframework-core and rpaframework-recognition are support packages, which alone do not contain any libraries.

Libraries

The RPA Framework project currently includes the following libraries:

The x in the PACKAGE column means that library is included in the rpaframework package and for example. x,dialogs means that RPA.Dialogs library is provided in both the rpaframework and rpaframework-dialogs packages.

LIBRARY NAME DESCRIPTION PACKAGE
Archive Archiving TAR and ZIP files x
Assistant Display information to a user and request input. assistant
Browser.Selenium Control browsers and automate the web x
Browser.Playwright Newer way to control browsers special (more below)
Calendar For date and time manipulations x
Cloud.AWS Use Amazon AWS services x,aws
Cloud.Azure Use Microsoft Azure services x
Cloud.Google Use Google Cloud services google
Crypto Common hashing and encryption operations x
Database Interact with databases x
Desktop Cross-platform desktop automation x
Desktop.Clipboard Interact with the system clipboard x
Desktop.OperatingSystem Read OS information and manipulate processes x
DocumentAI Intelligent Document Processing wrapper x
DocumentAI.Base64AI Intelligent Document Processing service x
DocumentAI.Nanonets Intelligent Document Processing service x
Email.Exchange E-Mail operations (Exchange protocol) x
Email.ImapSmtp E-Mail operations (IMAP & SMTP) x
Excel.Application Control the Excel desktop application x
Excel.Files Manipulate Excel files directly x
FileSystem Read and manipulate files and paths x
FTP Interact with FTP servers x
HTTP Interact directly with web APIs x
Hubspot Access HubSpot CRM data objects hubspot
Images Manipulate images x
JavaAccessBridge Control Java applications x
JSON Manipulate JSON objects x
MFA Authenticate using one-time passwords (OTP) & OAuth2 x
Notifier Notify messages using different services x
OpenAI Artificial Intelligence service openai
Outlook.Application Control the Outlook desktop application x
PDF Read and create PDF documents x,pdf
Robocorp.Process Use the Robocorp Process API x
Robocorp.WorkItems Use the Robocorp Work Items API x
Robocorp.Vault Use the Robocorp Secrets API x
Robocorp.Storage Use the Robocorp Asset Storage API x
Salesforce Salesforce operations x
SAP Control SAP GUI desktop client x
Smartsheet Access Smartsheet sheets x
Tables Manipulate, sort, and filter tabular data x
Tasks Control task execution x
Twitter Twitter API interface x
Windows Alternative library for Windows automation x,windows
Word.Application Control the Word desktop application x

Installation of RPA.Browser.Playwright

The RPA.Browser.Playwright at the moment requires special installation, because of the package size and the post install step it needs to be fully installed.

Minimum required conda.yaml to install Playwright:

channels:
  - conda-forge
dependencies:
  - python=3.9.16
  - nodejs=16.14.2
  - pip=22.1.2
  - pip:
    - robotframework-browser==17.2.0
    - rpaframework==24.1.2
rccPostInstall:
  - rfbrowser init

Installation

Learn about installing Python packages at Installing Python Packages.

Default installation method with Robocorp Developer Tools using `conda.yaml`:

channels:
  - conda-forge
dependencies:
  - python=3.9.16
  - pip=22.1.2
  - pip:
    - rpaframework==24.1.2

To install all extra packages (including Playwright dependencies), you can use:

channels:
  - conda-forge
dependencies:
  - python=3.9.16
  - tesseract=4.1.1
  - nodejs=16.14.2
  - pip=22.1.2
  - pip:
    - robotframework-browser==17.2.0
    - rpaframework==24.1.2
    - rpaframework-aws==5.2.8
    - rpaframework-google==7.0.3
    - rpaframework-recognition==5.1.2
rccPostInstall:
  - rfbrowser init

Separate installation of AWS, Dialogs, PDF and Windows libraries without the main rpaframework:

channels:
  - conda-forge
dependencies:
  - python=3.9.16
  - pip=22.1.2
  - pip:
    - rpaframework-aws==5.2.8  # included in the rpaframework as an extra
    - rpaframework-dialogs==4.0.4  # included in the rpaframework by default
    - rpaframework-pdf==7.1.5  # included in the rpaframework by default
    - rpaframework-windows==7.3.2  # included in the rpaframework by default

Installation method with pip using Python venv:

python -m venv .venv
source .venv/bin/activate
pip install rpaframework

Note

Python 3.8 or higher is required

Example

After installation the libraries can be directly imported inside Robot Framework:

*** Settings ***
Library    RPA.Browser.Selenium

*** Tasks ***
Login as user
    Open available browser    https://example.com
    Input text    id:user-name    ${USERNAME}
    Input text    id:password     ${PASSWORD}

The libraries are also available inside Python:

from RPA.Browser.Selenium import Selenium

lib = Selenium()

lib.open_available_browser("https://example.com")
lib.input_text("id:user-name", username)
lib.input_text("id:password", password)

Support and contact

Contributing

Found a bug? Missing a critical feature? Interested in contributing? Head over to the Contribution guide to see where to get started.

Development

Repository development is Python based and requires at minimum Python version 3.8+ installed on the development machine. The default Python version used in the Robocorp Robot template is 3.9.16 so it is a good choice for the version to install. Not recommended versions are 3.7.6 and 3.8.1, because they have issues with some of the dependencies related to rpaframework. At the time the newer Python versions starting from 3.11 are also not recommended, because some of the dependencies might cause issues.

Repository development tooling is based on poetry and invoke. Poetry is the underlying tool used for compiling, building and running the package. Invoke is used for scripting purposes, for example for linting, testing and publishing tasks.

Before writing any code, please read and acknowledge our extensive Dev Guide.

First steps to start developing:

  1. initial poetry configuration
poetry config virtualenvs.path null
poetry config virtualenvs.in-project true
poetry config repositories.devpi "https://devpi.robocorp.cloud/ci/test"
  1. git clone the repository
  2. create a new Git branch or switch to correct branch or stay in master branch
    • some branch naming conventions feature/name-of-feature, hotfix/name-of-the-issue, release/number-of-release
  3. poetry install which install package with its dependencies into the .venv directory of the package, for example packages/main/.venv
  4. if testing against Robocorp Robot which is using devdata/env.json
    • set environment variables
    • or poetry build and use resulting .whl file (in the dist/ directory) in the Robot conda.yaml
    • or poetry build and push resulting .whl file (in the dist/ directory) into a repository and use raw url to include it in the Robot conda.yaml
    • another possibility for Robocorp internal development is to use Robocorp devpi instance, by poetry publish --ci and point conda.yaml to use rpaframework version in devpi
  5. poetry run python -m robot <ROBOT_ARGS> <TARGET_ROBOT_FILE>
    • common ROBOT_ARGS from Robocorp Robot template: --report NONE --outputdir output --logtitle "Task log"
  6. poetry run python <TARGET_PYTHON_FILE>
  7. invoke lint to make sure that code formatting is according to rpaframework repository guidelines. It is possible and likely that Github action will fail the if developer has not linted the code changes. Code formatting is based on black and flake8 and those are run with the invoke lint.
  8. the library documentation can be created in the repository root (so called "meta" package level). The documentation is built by the docgen tools using the locally installed version of the project, local changes for the main package will be reflected each time you generate the docs, but if you want to see local changes for optional packages, you must utilize invoke install-local --package <package_name> using the appropriate package name (e.g., rpaframework-aws). This will reinstall that package as a local editable version instead of from PyPI. Multiple such packages can be added by repeating the use of the --package option. In order to reset this, use invoke install --reset.

    • poetry update and/or invoke install-local --package <package name>
    • make docs
    • open docs/build/html/index.html with the browser to view the changes or execute make local and navigate to localhost:8000 to view docs as a live local webpage.
    # Before
    [tool.poetry.dependencies]
    python = "^3.8"
    rpaframework = { path = "packages/main", extras = ["cv", "playwright", "aws"] }
    rpaframework-google = "^4.0.0"
    rpaframework-windows = "^4.0.0"
    
    # After
    [tool.poetry.dependencies]
    python = "^3.8"
    rpaframework = { path = "packages/main", extras = ["cv", "playwright"] }
    rpaframework-aws = { path = "packages/aws" }
    rpaframework-google = "^4.0.0"
    rpaframework-windows = "^4.0.0"
  9. invoke test (this will run both Python unittests and robotframework tests defined in the packages tests/ directory)
    • to run specific Python test: poetry run pytest path/to/test.py::test_function
    • to run specific Robotframework test: inv testrobot -r <robot_name> -t <task_name>
  10. git commit changes
  11. git push changes to remote
  12. create pull request from the branch describing changes included in the description
  13. update docs/source/releasenotes.rst with changes (commit and push)

Packaging and publishing are done after changes have been merged into master branch. All the following steps should be done within master branch.

  1. git pull latest changes into master branch
  2. in the package directory containing changes execute invoke lint and invoke test
  3. update pyproject.toml with new version according to semantic versioning
  4. update docs/source/releasenotes.rst with changes
  5. in the repository root (so called "meta" package level) run command poetry update
  6. git commit changed poetry.lock files (on meta and target package level), releasenotes.rst and pyproject.toml with message "PACKAGE. version x.y.z"
  7. git push
  8. invoke publish after Github action on master branch is all green

Some recommended tools for development

License

This project is open-source and licensed under the terms of the Apache License 2.0.

rpaframework's People

Contributors

aabashkin avatar adstefnum avatar antusystem avatar avaissi avatar bogdancondurache avatar cmin764 avatar dependabot[bot] avatar janipalsamaki avatar jooooooooco avatar kensoh avatar kkotenko avatar kylie-bee avatar lugi0 avatar mchece avatar mdp avatar mikahanninen avatar mkorpela avatar mmokko avatar monicabarna avatar noordsestern avatar orlof avatar osrjv avatar pasikokko avatar sherifnasrat avatar thomasmellema avatar timothylopas avatar tonnitommi avatar tuomasnylund avatar velkrissz avatar xylix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rpaframework's Issues

example code in Word.Application failure

When I run the code in the example, I get the following error:

AttributeError: wdStory

May I know how to fix this?
Also, it would be nice if error messages would be more informative.

Thanks in advance!

Dependency float problems

  • Our CI should test against pip install rpaframework probably nightly and against some of the biggest versions to catch problems where floating subdependencies break user setup
  • Do scripted analysis to figure out which of our dependencies lack pinnings for their dependencies major dependencies and figure out if fixing this case by case is a good solution

'RPA.FileSystem.Move File' : Permission denied on network drive

Hello,

this might be related to #23

Running rpaframework 5.3.3

I want to move a file on a network share:

Example not working
    RPA.FileSystem.MoveFile    ${source}    ${destionation}    overwrite=${True}

Example working
    OperatingSystem.Move File    ${source}    ${destination}

It works with OperatingSystem library, but not with RPA.FileSystem due to Permission constraints.

Regards,
Markus

Add support for scraping

Initial version should be able to do web scraping for elements on the page, especially tables using BeautifulSoup package.

Could be added as a new separate library or feature included into current libraries like RPA.Browser and RPA.Desktop

For future versions add support for scraping tables from images

Chromedriver does not always stop properly when browser is closed

Sometimes when an RF script fails, or teardowns are not executed for some other reason, a chromedriver process stays running in the background. This creates various issues because it prevents cleaning up folders and pollutes the user's machine with stray processes.

It would be possible to have some hooks on exit and make sure the created webdriver process is killed, but sometimes it's wanted that the browser should stay running after a script exists. Need to figure out some way to fulfill both requirements.

`Normalize Path` fails due to Permissions

I dropped OperatingSystem Library and used RPA.FileSystem instead. Now I run in to an odd permission error when calling Normalize Path:

grafik

I have no idea, why permission rights are required or what OperatingSystem does differently.

Support multiple monitors for screenshots and template matching

Currently PIL / pyscreenshot only captures the active monitor, which limits the usability of template matching in multi-monitor environments. RPA.Images should be improved to capture images from all available display devices, and the resulting coordinates should map correctly with RPA.Desktop.Windows.

[Excel.Files] Headers ignored during 'Create Worksheet'

Hello,

following example: I have a dictionary mapping worksheet names and tables. Those tables include headers. When running this keyword, headers are missing in the final worksheet.

Save values in '${ausgabedatei}'
    create workbook    ${OUTPUT_DIR}/${ausgabedatei}
    FOR    ${name}    ${tabelle}     IN    &{PRODUKTWERTE}
        create worksheet    ${name}    ${tabelle}
    END
    save workbook
    [teardown]    close workbook

Regards,
Markus

when library FileSystem on mac, it has a error and never import sucess

20200813 20:31:01.984 [WARN]: Importing test library "RPA.FileSystem" failed

Traceback (most recent call last):
list index out of range
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/robotide/spec/librarymanager.py", line 82, in _fetch_keywords
return get_import_result(path, library_args)
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/robotide/spec/libraryfetcher.py", line 29, in get_import_result
) for kw in lib.handlers]
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/robotide/spec/libraryfetcher.py", line 29, in
) for kw in lib.handlers]
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/robotide/spec/libraryfetcher.py", line 40, in _parse_args
parsed[index] = parsed[index] + '=' + str(args.defaults[value]) # DEBUG str(value)

macos Catalina 10.15.5
RIDE v2.0b1 running on Python 3.7.7.
robotframework==3.2.1

RPA.Browser library is lacking support for multiple browser instances

There is need to provide alias parameter to Open Available Browser keyword.

User comments about the problem https://robocorp-developers.slack.com/archives/CH1GSKJ3U/p1596380462275000 onwards

workaround for the problem was to create custom keyword

*** Keywords ***
My RPA Browser
    [Arguments]   ${alias} 
    ${chrome_options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys, selenium.webdriver
    Call Method    ${chrome_options}    add_argument    --disable-extensions
    Call Method    ${chrome_options}    add_argument    --headless
    Call Method    ${chrome_options}    add_argument    --disable-gpu
    Call Method    ${chrome_options}    add_argument    --no-sandbox
    Create Webdriver    Chrome    chrome_options=${chrome_options}  alias=${alias}

Playwright post install process with > 7.0.*

I'm following the docs with regards to RCC.

The following conda.yaml file is given as an example:

channels:
  - defaults
  - conda-forge
dependencies:
  - python=3.7.5
  - pip=20.1
  - nodejs=14.2.0
  - pip:
    - rpaframework==6.7.1
    - robotframework-browser==2.3.3
rccPostInstall:
  - rfbrowser init

However with v7.0 including Playwright, I had assumed the following would work:

channels:
  - defaults
  - conda-forge
dependencies:
  - python=3.7.5
  - pip=20.1
  - nodejs=14.2.0
  - pip:
    - rpaframework==7.0.*
rccPostInstall:
  - rfbrowser init

However this throws an error because it can't find 'rfbrowser`

===  new live  ---  post install phase ===
Running post install script 'rfbrowser init' ...
Script 'rfbrowser init' failure: Cannot find command: rfbrowser

I'm able to work around this by installing 'robotframework-browser' but then I'm still able to use RPA.Browser.Playwright.

channels:
  - defaults
  - conda-forge
dependencies:
  - python=3.7.5
  - pip=20.1
  - nodejs=14.2.0
  - pip:
    - rpaframework==7.0.*
    - robotframework-browser==2.3.*
rccPostInstall:
  - rfbrowser init

What's the preferred strategy to use v7 and the playwright post install process?

Thanks

Split rpaframework into multiple smaller packages

As the title suggests, RPA Framework is quite big because of its dependencies and it would be better if it was composed of multiple packages. That would give users the benefit of having more granular control of runtime dependencies. A top-level metapackage could still be maintained for easier development workflows.

RPA.Excel.Application find_first_available_row error

So I have an Excel file with some data in it and I am trying to know the first row.

from RPA.Excel.Application import Application
app = Application()
app.open_application(True)
app.open_workbook(r"C:\Users\User\Downloads\file.xlsx")
free_row = app.find_first_available_row("Sheet1")

And get this error:

Traceback (most recent call last):
File ".\rpa_test.py", line 12, in
tupla_libre = app.find_first_available_row("Sheet1")
File "C:\proyectos\rpa_pruebas.venv\lib\site-packages\RPA\Excel\Application.py", line 120, in find_first_available_row
cell_value = worksheet.Cells(row, column).Value
AttributeError: 'str' object has no attribute 'Cells'

I am using rpaframework==6.4.0
Windows 10 64bits

Add support for `Google Drive API`

to be included in the RPA.Cloud.Google library

this also "forces" to implement support of OAuth2 authentication using credentials.json

keywords

  • Init Drive Client
  • Drive Upload Files
  • Drive Download Files
  • Drive Update File (actions=trash, untrash, star, unstar)
  • Drive Delete File
  • Drive Get Folder Id
  • Drive Search Files
  • Drive Move File
  • Drive Create Directory

https://developers.google.com/drive

ImportError: cannot import name 'Browser' from partially initialized module 'RPA.Browser' (most likely due to a circular import)

Hello , can you help please with this errror ?

The code I'm running is this:

from RPA.Browser import Browser
nav = Browser()
nav.open_available_browser("www.google.com", headless=True)

but print this error:

Traceback (most recent call last):
  File "robot.py", line 1, in <module>
    from RPA.Browser import Browser
  File "/home/andres/.local/lib/python3.8/site-packages/RPA/Browser.py", line 14, in <module>
    from robot.libraries.BuiltIn import BuiltIn, RobotNotRunningError
  File "/home/andres/dev/robot/robot.py", line 1, in <module>
    from RPA.Browser import Browser
ImportError: cannot import name 'Browser' from partially initialized module 'RPA.Browser' (most likely due to a circular import) (/home/andres/.local/lib/python3.8/site-packages/RPA/Browser.py)

PDF library improvements

There are various issues with the current PDF library implementation, in particular with finding elements and scraping data reliably. This issue is used for gathering all improvements ideas and requests to the libary.

Support image-based automation in browsers

Template matching and OCR should also work with websites through the webdriver, instead of having to use desktop automation for it. Integration to rpaframework-recognition should be quite easy, but reliable full-page screenshotting in selenium will require some thinking.

Windows library quietly fails to attach to window

When automating applications with RPA.Desktop.Windows, it might give an errors such as: AttributeError: 'NoneType' object has no attribute 'wait'.

This seems to be a regression that happens when it fails to attach to a window. It should raise a proper error or fallback to a sane default (top window?) but instead continues normally. Other keywords do not check if the property is None and attempt to access the dialog, which results in the error message above.

Reported initially in Robocorp forum: https://forum.robocorp.com/t/windows-desktop-application-robot-tutorial/82/2

read_from_cells AttributeError: 'str' object has no attribute 'Cells'

General information:

Windows 10 64bits
Python 3.8.6
rpaframework==6.5.0

Steps to reproduce:

from RPA.Excel.Application import Application

app = Application()
app.open_application(visible=True)
app.open_workbook(r'C:\pry\rpaframework\challenge.xlsx')
app.set_active_worksheet(sheetname='Sheet1')
last_row = app.find_first_available_row()

for x in range(last_row[0]):
row = app.read_from_cells(worksheet="Sheet1", row=x, column=1)
print("A: " + row)

Error:

Traceback (most recent call last):
File ".\test_rpa.py", line 23, in
row = app.read_from_cells(worksheet="Sheet1", row=x, column=1)
File "C:\proyectos\rpaframework.venv\lib\site-packages\RPA\Excel\Application.py", line 222, in read_from_cells
cell_value = worksheet.Cells(row, column).Value
AttributeError: 'str' object has no attribute 'Cells'

challenge.xlsx

UnicodeEncodeError problem with RPA.Browser library

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 933-934: ordinal not in range(256).

Ran with latest Lab + RPAFW using work-item-to-pdf example.

two reports on this
(1) Win10 Finnish language, Chrome browser, Finnish language (above log is from this case)
(2) Chrome browser, Japanese language we are getting UnicodeDecodeError when trying to insert Japanese text into a web form using RPA.Browser. Is there any provisions for working around this error, or do we need to abandon Robocorp for another RPA tool?

More details about the (2) at https://robocorp-developers.slack.com/archives/CV9MR721E/p1595676282245500

No attribute list_worksheet() function on Excel Object

Using:
rpaframework==7.0.1
rpaframework-core==5.0.0

I would like use the list_worksheet() function, but the objects throws an error that it doesn't exist at all.

image

Upon checking the attributes of the object, it seems like the method list_worksheet() function doesn't exist at all on the Excel object.
image

`RPA.Browser.Selenium` type hinting/conversions

Some keywords in the RPA.Browser always expect to receive strings, which creates surprising errors. For instance Select From List By Value does not function as expected when given an integer.

The library should have type hints for automatic RF argument conversion and/or explicit casts where certain types are expected.

Pop Table Row: Unknown index name: Table(columns=['name', 'age'], rows=3)

I'm working with the following code:

@{lst_a}= Create List a b c
@{lst_b}= Create List 1 2 3
&{dct_t}= Create Dictionary name=${lst_a} age=${lst_b}
${table_t}= Create Table ${dct_t}
Log ${table_t.index[0]}
&{_}= Pop Table Row table=${table_t}

Which results on:
ValueError: Unknown index name: Table(columns=['name', 'age'], rows=3)

This is raised by Table._location on line 337:
raise ValueError(f"Unknown {name} name: {value}")

The cause is rooted on an extra parameter when invoking get_row, on line 1021:
values = table.get_row(table, index, as_list)

It should be:
values = table.get_row(index, as_list)

Replacing "Pop Table Row" with this:
Set Column As Index table=${table_t} column=name

I get this other error:
TypeError: Keyword requires Table object

This is raised by Tables. requires_table on line 868:
raise TypeError("Keyword requires Table object")

The cause is rooted on a missing table parameter when invoking Tables.pop_table_column on line 1055:
values = self.pop_table_column(column)

It should be:
values = self.pop_table_column(table, column)

Support image-based automation with PDFs (and others)

Currently, template matching and OCR are only supported in a desktop automation context, but a library (probably RPA.Images) should be made that supports the same functionality but with a user-given document instead.

Library Ideas

Mobile automation libraries:

  • Appium

Domain specific libraries:

  • Jira
  • Trello
  • Word

Utility libraries:

  • XML
  • SSH
  • LDAP, AD
  • Crypto

?? libraries (Need more details):

  • Java
  • XML-RPC
  • SOAP
  • REST
  • Network

Support for Robot Framework 4.0

WHY:

Robotframework-4.0a3 introduces support for IF/ELSE syntax which we see beneficial for
RPA and generic automation use case. Compared to test automation where Robot Framework has origins in,
RPA processes need to take various error scenarios into account and also the flow control in general may be complex. Branching operations with the current Robot Framework syntax make the code hard to read
and understand and for this IF / ELSE support is great improvement.

WHAT:

List of RF4 changes in 4.0b1
We probably need to support both RF 3 & 4..

  • Backwards incompatible changes
    • Output.xml differences caused by removal of criticality and addition of SKIP
      • Probably affects executors, including jupyterlab robot kernels
      • could affect log analyzer
    • Argument conversion changes, could affect RPA framework libraries
    • Libdoc spec changes, require / enable changes at documentation generation tooling
      • Argument name, type and default are stored separately. (#3578)
      • Spec files have new information such as Enum and TypedDict data types. (#3607)
      • Argument name, type and default are stored separately. (#3578)
  • Start the work with alpha / pre-release so that we are ready to go
  • Document Lab and VsCode restrictions.
  • Warn users about Robot features that might break

Work items:
[ ] RPA Framework supports for RF 4
[ ] Depended libraries support RF 4
[ ] Docs to support 3 & 4

RPA.Tasks applied to subtasks of a keyword

Improvement idea from support channel:

  1. For one side DataDriver applies a Keyword (called the "Test Template") to a collection of data, all running a test independently of each other. So if one fails, the rest are allowed to run and resolve on their own terms regardless.

  2. On the other hand, you have RPA.Tasks, that allows to define an execution flow via a JSON file, referred to as the "schema".

They're both are incompatible to each other, given that both take ownership of the flow of tasks... and here's the suggestion:

Wouldn't it be nice to have something like RPA.Tasks that instead of applying to the Tasks section it applied to the subtasks of a keyword? Like the Template Keyword used by DataDriver... this way you could have tests running independently of each other and at the same time, define the execution flow via a schema.

Invalid webdrivers sometimes fail to re-download

Sometimes webdriver (at least chromedriver) fails to work with the following error:
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/rx/hx27566s54n5ws8gvpn7fd840000gn/T/drivers/chromedriver'

Removing the entire folder manually resolves the issue. This seems to be an upstream issue with webdrivermanager. Figure out if a patch can be made upstream or worked around here.

We should maybe also figure out a better place to store downloaded webdrivers.

User understandable error in case optional dependencies for google-oauth not installed

bash-5.1$ rpa-google-oauth --help
Traceback (most recent call last):
  File "/Users/kerkko/.robocorp/live/2035990f5bebdaa9/bin/rpa-google-oauth", line 5, in <module>
    from RPA.scripts.google_authenticate import start
  File "/Users/kerkko/.robocorp/live/2035990f5bebdaa9/lib/python3.7/site-packages/RPA/scripts/google_authenticate.py", line 5, in <module>
    from google_auth_oauthlib.flow import InstalledAppFlow
ModuleNotFoundError: No module named 'google_auth_oauthlib'
bash-5.1$

Robocloud.Items: provide access to full work item payload

Currently the Robocloud.Items library is built around the convention of Robocloud work item payload being a JSON object with another variables object containing key/value pairs. This is a simple and sensible convention for many use cases.

However, especially with integrations to external systems, the payload format cannot always be controlled. One such example is launching a process on Typeform subscription, as discussed here: https://forum.robocorp.com/t/how-to-trigger-a-robot-from-typeform/100. Robocloud itself does not have constraints for the schema of the payload (apart from size limit).

In addition to the opinionated structure with variablesas key/value pairs, RPA framework could provide means to access the entire work item payload object.

Desktop OCR support

The RPA.Desktop library should have support for OCR in Desktop automation.

It should support the following core features:

  • The ability to locate text/numbers in screenshots, e.g. locate coordinates of a button based on text “Save”.
  • The ability to read text/numbers from screenshots, e.g. read address information from textbox.

Add `Click Element When Visible` to RPA.Browser library

We already have Input Text When Element Is Visible. Could we also have Click Element When Visible? Almost all web robots need that one since more and more content is loaded dynamically.

For example:

Accept cookie consent
    ${accept_cookies_button}=    Set Variable    css:.browser-consent button.accept
    Wait Until Element Is Visible    ${accept_cookies_button}
    Click Button    ${accept_cookies_button}
Accept cookie consent
    Click Element When Visible    css:.browser-consent button.accept

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.