So I'm currently learning Robot Framework and instead of using repeating code, I'm trying to utilize loops to make my code easier to maintain. Unfortunately, I do not know how to solve this one where I want to put this into a loop. This is a series of questions with drop-down answers, and I want to choose a different answer every time my test runs. I have tried a couple of foor loop options but none of them work. Essentially each loop should click on the drop-down and choose one random answer until all the questions are answered.
Check if User can change "Company" information
Scroll Element Into View ${USER_MENU_SCROLL_TO_COMPANY_MENU}
sleep 1s
click element ${USER_MENU_CLICK_COMPANY_EDIT_BUTTON}
${random_description1} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION1})
click element ${random_description1}
sleep 1s
click element ${USER_MENU_CLICK_DROP_DOWN_2}
${random_description2} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION2})
click element ${random_description2}
sleep 1s
click element ${USER_MENU_CLICK_DROP_DOWN_3}
${random_description3} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION3})
click element ${random_description3}
sleep 1s
click element ${USER_MENU_CLICK_DROP_DOWN_4}
${random_description4} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION4})
click element ${random_description4}
sleep 1s
click element ${USER_MENU_CLICK_DROP_DOWN_5}
${random_description5} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION5})
click element ${random_description5}
I tried something like this but it wants to concatenate the values in my variables.
FOR ${i} IN RANGE 1 5
${random_description} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION} ${i})
click element ${USER_MENU_CLICK_DROP_DOWN_} ${i}
click element ${random_description}
sleep 1s
END
CodePudding user response:
After some tinkering, I have found a solution. Maybe there is a more efficient way of writing this and I would like to know what that is if anyone has any suggestions. My solution:
Check if User can change "Company" information
Scroll Element Into View ${USER_MENU_SCROLL_TO_COMPANY_MENU}
sleep 1s
click element ${USER_MENU_CLICK_COMPANY_EDIT_BUTTON}
${random_answer1} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION_0})
${random_answer2} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION_1})
${random_answer3} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION_2})
${random_answer4} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION_3})
${random_answer5} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION_4})
@{random_answers} = Create List ${random_answer1} ${random_answer2} ${random_answer3} ${random_answer3} ${random_answer4}
FOR ${question} IN @{random_answers}
click element ${USER_MENU_CLICK_NEXT_DROP_DOWN}
Click Element ${question}
Sleep 1s
END
CodePudding user response:
Your problem is building the name of the variables. You could have your variables as a list of lists.
Here is my view of the solution for your current code:
FOR ${i} IN RANGE 1 5
${random_description} = Evaluate random.choice(@{USER_MENU_DROP_DOWN_QUESTION${i}})
click element ${USER_MENU_CLICK_DROP_DOWN_${i}}
click element ${random_description}
sleep 1s
END
EDIT -- That was the initial answer. Below is a proven solution.
*** Test Cases ***
Loop in menus
@{USER_MENU_DROP_DOWN_QUESTION1}= Create List question11 question12 question13 question14 question15
@{USER_MENU_DROP_DOWN_QUESTION2}= Create List question21 question22 question23 question24 question25
@{USER_MENU_DROP_DOWN_QUESTION3}= Create List question31 question32 question33 question34 question35
@{USER_MENU_DROP_DOWN_QUESTION4}= Create List question41 question42 question43 question44 question45
@{USER_MENU_DROP_DOWN_QUESTION5}= Create List question51 question52 question53 question54 question55
@{USER_MENU_CLICK_DROP_DOWN_1}= Create List item11 item12 item13 item14 item15
@{USER_MENU_CLICK_DROP_DOWN_2}= Create List item21 item22 item23 item24 item25
@{USER_MENU_CLICK_DROP_DOWN_3}= Create List item31 item32 item33 item34 item35
@{USER_MENU_CLICK_DROP_DOWN_4}= Create List item41 item42 item43 item44 item45
@{USER_MENU_CLICK_DROP_DOWN_5}= Create List item51 item52 item53 item54 item55
FOR ${i} IN RANGE 0 5
${random_description}= Evaluate random.choice(${USER_MENU_DROP_DOWN_QUESTION${i 1}})
Log To Console \nclick element ${USER_MENU_CLICK_DROP_DOWN_${i 1}}[${i}]
Log To Console click element ${random_description}\n
sleep 1s
END