Hello to all RobotFramework users
Problem
We have many keywords at different levels of abstraction and are looking for a simple way to import them while maintaining support for autocompletion etc. in IDEs.
The inheritance could look as follows:
/---------------------> basic_keywords.robot <---\
/ ^ \
/ | |
| advanced_keywords_1.robot --/ advanced_keywords_2.robot
| ^
| |
more_advanced_keywords_1.robot
Proposal 1: Import all keywords in all_keywords.robot
all_keywords.robot:
*** Settings ***
Library SomeLibrary.py
Resource basic_keywords.robot
Resource advanced_keywords_1.robot
Resource more_advanced_keywords_1.robot
Resource advanced_keywords_2.robot
more_advanced_keywords_1.robot:
# No Import of basic_keywords.robot here!!!
*** Keywords ***
My More Advanced Keyword
Advanced Keyword # from advanced_keywords.robot
Basic Keyword # from basic_keywords.robot
Import in test suites:
*** Settings ***
Resource all_keywords.robot
Benefits:
- This works at execution.
- With the same line in any of the test suites, we have access to all keywords.
- We do not need to import the necessary keywords in each of the advanced keywords files, which would lead to double imports.
Drawbacks:
- Autocompletion etc. is not supported because
advanced_keywords.robotdoes not know aboutbasic_keywords.robot. - Imports many (often not used) keywords in test suites, slows down performance (?)
Proposal 2: Reference basic_keywords... in advanced_keywords
Proposed by @Todor
advanced_keywords.robot:
*** Settings ***
Resource basic_keywords.robot
*** Keywords ***
Advanced Keyword
Basic Keyword # from basic_keywords.robot
more_advanced_keywords_1.robot:
Resource advanced_keywords.robot
# basic_keywords is imported here by advanced_keywords.robot
*** Keywords ***
My More Advanced Keyword
Advanced Keyword # from advanced_keywords.robot
Basic Keyword # from basic_keywords.robot
Double imports are handled by Robot Framework.
Import in test suites:
*** Settings ***
Resource more_advanced_keywords_1.robot
Resource advanced_keywords_2.robot
Benefits:
- This works at execution
- Auto completion etc. is supported as the IDE knows where the
Advaned Keywordis defined - Better control on which keywords are available, faster
Drawbacks:
- You have to explicitly decide / import which
advanced_keywordsyou use in a test suite.
Double instantiations of the library can be prevented by ROBOT_LIBRARY_SCOPE = 'GLOBAL' in SomeLibrary.py, see Robot Framework makes two instances from the class instead of one and the Robot Framework User Guide
Other Proposals?
There are benefits and drawbacks to both proposals. Any recommendations? What structure would you propose?