Nemelis
Nemelis

Reputation: 5480

RobotFramework: empty variable check suddenly not working anymore

I'm playing around with command-line arguments and had something working both with / without giving a command-line argument, but suddenly it starts failing if I don't give a command-line argument.

On https://groups.google.com/g/robotframework-users/c/_5Usp-K4Dlw?pli=1 I read that adding a space before the variable and comparing it to a value like this '${ VAR}'==<value> should work to check if a variable is existing or not.

The code-snippet that was working before is:

*** Test Cases ***
My test
    [Documentation]    test to check if the SUT reacts as expected
    ${is_test}=        Evaluate    '${ VAR}'=='test'
    Log To Console     ${is_test}
    Run Keyword If     ${is_test}    Log To Console    VAR == test

After changing the code to (Removed '[Documentation]' since it was copied from another test):

*** Test Cases ***
My test
    ${is_test}=        Evaluate    '${ VAR}'=='test'
    Log To Console     ${is_test}
    Run Keyword If     ${is_test}
    ...    Log To Console    VAR == test

it suddenly started failing with: Variable '${ VAR}' not found. errors. And after changing it back to the original it still fails.

I can't figure what I did wrong in the change.

Note: The company I'm working for uses RobotFramework version 3.0.4 (yes I know ancient)

Upvotes: 2

Views: 1850

Answers (2)

Bob Meliev
Bob Meliev

Reputation: 1198

Here is how your test should look like if you want to check if variable is empty and do something based on that.

*** Variables ***
${VAR}=    test

*** Test Cases ***
My test
    Run Keyword If    '${VAR}'=='${EMPTY}'    Log To Console    Variable is empty
    ...    ELSE    Log To Console    Variable is not empty                                                         

If you want variable default value to be empty and execute some keyword only if it comes from command line set variable as empty, for example:

*** Variables ***
${VAR}=    ${EMPTY}

*** Test Cases ***
My test
    Run Keyword If    '${VAR}'=='${EMPTY}'    Log To Console    Variable is not set
    ...    ELSE    Log To Console    Variable is ${VAR}                                                         

Run your test from command-line without passing variable

$ robot sample.robot 
==============================================================================
Sample                                                                        
==============================================================================
My test                                                               Variable is not set
My test                                                               | PASS |
------------------------------------------------------------------------------
Sample                                                                | PASS |
1 test, 1 passed, 0 failed
==============================================================================

Now, run with passing variable

$ robot -v VAR:test sample.robot 
==============================================================================
Sample                                                                        
==============================================================================
My test                                                               Variable is test
My test                                                               | PASS |
------------------------------------------------------------------------------
Sample                                                                | PASS |
1 test, 1 passed, 0 failed
==============================================================================

P.S. About space inside variable, I think it's just typo in Google Groups. If it was working then variable might be globally accessible or defined somewhere else.

Upvotes: 1

Nemelis
Nemelis

Reputation: 5480

Managed to solve it by adding ${VAR} with some default value to a *** Variables *** list. But still I don't understand why it was originally working without that list.

Upvotes: 1

Related Questions