Warm tip: This article is reproduced from serverfault.com, please click

How to verify words one by one on a locator in Robot Framework?

发布于 2020-11-28 15:11:00

I am still a bit new to the robot framework but please rest assured I am constantly reading its User Guide. I am a bit stuck now with one test case.

I do have a list of individual words, that I need to verify on a page, mostly German translations of field labels if they appear correctly or are found in an element at all.

I have created a list variable as follows:

@{GERMAN_WORDS} | Benutzer | Passwort | Sendung | Transaktionen | Notiz

I have the following locator that contains the text labels on the webpage, and the one I need to verify:

${GENERAL_GERMAN_BOARD} | xpath=//*[@id="generalAndIncidents:generalAndIncidentsPanel"]

I would like to check every single word one by one from the list variable, whether they are present in the locator above.

I did create the following keyword for this purpose, however I might be missing something because it calls the entire content of my list variable, instead of checking the words from it one by one:

Block Text Verification
    [Arguments]    ${text_list_variable}    ${locator_to_check}

    Wait Until Element is Visible    ${locator_to_check}

    FOR    ${label}    IN    ${text_list_variable}
        ${labelTostring}    Convert to String    ${label}
        ${isMatching} =    Run Keyword and Return Status    Element Should Contain    ${locator_to_check}    ${labelTostring}
        Log    ${label}
        Log    ${isMatching}
        Exit For Loop If    '${isMatching}' == 'False'
    END 

I am getting the following output for this:

Element 'xpath=//*[@id="generalAndIncidents:generalAndIncidentsPanel"]' should have contained text '['Benutzer', 'Passwort', 'Sendung', 'Transaktionen', 'Notiz']' but its text was.... (and it lists all the text from my locator)

So, it is basically not checking the words one by one.

Am I doing something wrong here? Is this a bad approach I am trying to do here?

I would be grateful if anyone could provide me some hint on what I should do here instead!

Thank you very much!

Questioner
oli129
Viewed
11
Todor Minakov 2020-11-29 00:11:16

You've made one small but crucial mistake - the variable in this line here:

FOR    ${label}    IN    ${text_list_variable}

, should be accessed with @:

FOR    ${label}    IN    @{text_list_variable}

The for-in loops in RF expect 1 or more arguments of the looped over values, and the @ expands a list variable to its members.