J'ai besoin d'exécuter certains mots-clés de manière conditionnelle dans un framework de robot, mais je ne sais pas comment le faire, cela ne fonctionne pas. J'ai essayé de nombreuses options, mais je suppose que la déclaration "IF-ELSE" est complètement fausse.
Choose Particular Filter ${FILTER} And Uncheck All Values
${bool}= is filter opened ${AVAILABLE FILTERS} ${FILTER}
${uncheck_all_button}= run keyword if "${bool}" == "True" uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
... click element ${uncheck_all_button}
... ELSE
... Set variable ${particular_filter}: find particular filter ${AVAILABLE FILTERS} ${FILTER}
... click element ${particular_filter}
... Set variable ${uncheck_all_button}: uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
... click element ${uncheck_all_button}
Il échoue avec: Variable '${particular_filter}' not found.
Mais au cas où je le lancerais, il ne devrait même pas aller à la branche ELSE car $ {bool} est True ... Ma fonction personnalisée is filter opened
vérifie si le filtre est déjà ouvert - si tel est le cas, renvoie True. Ma fonction personnalisée uncheck all in filter
renvoie simplement XPATH du bouton "décocher tout". Ma fonction personnalisée find particular filter
renvoie XPATH du bouton "liste déroulante des filtres". Dans tout ce mot-clé, je dois vérifier si le menu déroulant du filtre est déjà ouvert. Si c'est le cas, je dois alors cliquer directement sur ${uncheck_all_button}
, sinon si le menu déroulant du filtre n’est pas encore ouvert, je dois d’abord cliquer sur le filtre lui-même ${particular_filter}
et ensuite je peux cliquer sur ${uncheck_all_button}
J'ai aussi essayé la ligne "lancer le mot clé" pour avoir comme ceci:
${uncheck_all_button}= run keyword if "${bool}" == "True" Set Variable uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
ou ca:
run keyword if "${bool}" == "True" ${uncheck_all_button}= uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
J'ai aussi essayé avec ${bool} == "True"
et ${bool} == True
Mais rien ne fonctionne vraiment, toujours la même erreur :(
Merci beaucoup pour toute aide!
Avoir IF/THEN/ELSE avec plusieurs instructions dans chaque bloc ne fonctionne pas dans Robot (sinon vous devrez utiliser "Mots clés", je suppose, mais cela deviendrait illisible). Donc, je refactoriser votre code de cette façon:
Choose Particular Filter ${FILTER} And Uncheck All Values
${is_filter_opened}= is filter opened ${AVAILABLE FILTERS} ${FILTER}
run keyword if ${is_filter_opened} actions_when_unchecked
... ELSE actions_when_checked
actions_when_unchecked
uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
click element ${uncheck_all_button}
actions_when_checked
${particular_filter}: find particular filter ${AVAILABLE FILTERS} ${FILTER}
click element ${particular_filter}
${uncheck_all_button}: uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
click element ${uncheck_all_button}
J'espère que cela t'aides.
Selon la syntaxe ci-dessous, mettez votre code à jour et vérifiez-le.
Syntaxe pour IF-ELSE:
Run Keyword If '${Condition}'== 'True' Run Keywords <Keyword 1> <Keyword 2>
... ELSE <Keyword 1>
Syntaxe pour "Définir la variable" en fonction de la condition:
${Status}= Run Keyword If '${Condition}'== 'True' Set Variable <Yes> <No>
Selon votre code dans la partie SI,
si "bool = true", il n'exécutera que le mot clé personnalisé "désélectionner tout le filtre", mais pas le mot clé "Elément de clic". Si vous voulez que les deux mots-clés soient exécutés en fonction de la condition, utilisez le mot-clé "Run Keywords" comme indiqué dans la syntaxe IF-ELSE.
Merci beaucoup, Laurent, ta solution est la bonne! Je devais juste faire quelques petits changements pour que cela fonctionne:
Choose Particular Filter ${FILTER} And Uncheck All Values
${is_filter_opened}= is filter opened ${AVAILABLE FILTERS} ${FILTER}
run keyword if ${is_filter_opened} actions_when_unchecked ${FILTER}
... ELSE actions_when_checked ${FILTER}
actions_when_unchecked ${FILTER}
${uncheck_all_button}= uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
click element ${uncheck_all_button}
actions_when_checked ${FILTER}
${particular_filter}= find particular filter ${AVAILABLE FILTERS} ${FILTER}
click element ${particular_filter}
${uncheck_all_button}= uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
click element ${uncheck_all_button}
${error_status} Set Variable False
log ${error_status}
Run Keyword If ${error_status} calltrue ELSE login_sucessful
calltrue and login_sucessful are keywords it can be any keyword of your choice. so in this case login_sucessful keyword is executed. if error_status is set to true then calltrue function will get executed.
Faites attention à l'indentation, un seul espace gâchera votre flux d'exécution