Search code examples
testingautomated-testsrelative-pathfilepathrobotframework

Robot Framework - using relative paths to run tests from different directory variations


I am running into an issue with my Robot Framework test suites. I have a simple test structure like this:

robotframework
|_foo
 |_tests folder
 |_pages folder
 |_firefoxTestProfile folder
 |_...

I have set a bare bones Firefox Profile path to run my tests and have set the variable like so:

*** Variables ***
${FF_PROFILE}    foo\firefoxTestProfile
*** Keywords ***
Open browser window
    Open Browser    ${test_url}    ${browser}   
... ff_profile_dir=${FF_PROFILE}

When I run my tests from the top directory, it runs fine:

C:/robotframework$  pybot foo/tests/test.txt

However, if I try to run it from the foo directory, like this:

C:/robotframework/foo$  pybot tests/test.txt

The tests throw fails, stating

"The system cannot find the path specified: foo/firefoxTestProfile/*.*"

I tried various things, such as putting the path as

../foo/firefoxTestProfile
/foo/firefoxTestProfile
firefoxTestProfile

as well as moving the firefoxTestProfile folder to a different path within the file structure and updating to that new path, but none of this worked and displayed the same error message as before.

It's also important because I want a default firefox profile to run with the tests, and these tests are passed between different people for running them locally on their machines. Any help would be greatly appreciated.


Solution

  • There are several built-in variables that can help you define the path correctly.

    The one that is most interesting here is ${CURDIR}

    From the documentation:

    ${CURDIR}   An absolute path to the directory where the test data file is located.  This variable is case-sensitive.
    

    I usually define a master suite setup file (in your case, in the root tests folder) and in there, I would define the following 3 global level variables

    Create a file __init.robot at the root tests folder.

    In it create a suite setup section (which will run before any test - but only once!)

    Set Global Variable  ${testsRootFolder}  ${CURDIR}
    Set Global Variable  ${pagesRootFolder}  %{CURDIR}${/}..${/}_pages
    Set Global Variable  ${firefoxProfileFolder}  %{CURDIR}${/}..${/}firefoxTestProfile