ロボットフレームワークでいくつかのキーワードを条件付きで実行する必要がありますが、実行方法がわかりません。動作しません。多くのオプションを試しましたが、「IF-ELSE」ステートメントが完全に間違っていると思います。
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}
Variable '${particular_filter}' not found.
で失敗しますが、実行する場合は、$ {bool}がTrueであるため、ELSEブランチに移動するべきではありません...カスタム関数is filter opened
は、フィルタが既に開いているかどうかをチェックします-ifそのため、Trueを返します。カスタム関数uncheck all in filter
は、「すべてのチェックを外す」ボタンのXPATHを返すだけです。カスタム関数find particular filter
は、「フィルタードロップダウン」ボタンのXPATHを返します。このキーワード全体で、フィルタードロップダウンが既に開いているかどうかを確認する必要があります-開いている場合は、${uncheck_all_button}
を直接クリックする必要があります。そうでない場合は、フィルタードロップダウンがまだ開いていない場合、最初にフィルターをクリックする必要がありますそれ自体${particular_filter}
とその後[${uncheck_all_button}
をクリックできます
また、次のように「キーワードを実行」行を試しました。
${uncheck_all_button}= run keyword if "${bool}" == "True" Set Variable uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
またはこれ:
run keyword if "${bool}" == "True" ${uncheck_all_button}= uncheck all in filter ${AVAILABLE FILTERS} ${FILTER}
${bool} == "True"
と${bool} == True
でも試しました
しかし、実際には何も機能せず、それでも同じエラー:(
助けてくれてありがとう!
各ブロックに複数のステートメントを含むIF/THEN/ELSEを使用しても、Robotでは機能しません(または、「キーワードを実行」を使用する必要がありますが、それは読みにくくなります)。だから私はこのようにあなたのコードをリファクタリングします:
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}
お役に立てれば。
以下の構文に基づいて、コードを更新してチェックします。
IF-ELSEの構文:
Run Keyword If '${Condition}'== 'True' Run Keywords <Keyword 1> <Keyword 2>
... ELSE <Keyword 1>
条件に基づいた「変数の設定」の構文:
${Status}= Run Keyword If '${Condition}'== 'True' Set Variable <Yes> <No>
IF部分のコードに従って、
「bool = true」の場合、「キーワードのすべてのチェックを外す」カスタムキーワードのみが実行され、「クリック要素」キーワードは実行されません。条件に基づいて両方のキーワードを実行する場合は、IF-ELSE構文で説明されている「キーワードの実行」キーワードを使用します。
ローラン、ありがとうございました、あなたの解決策は正しいです!私はそれを機能させるためにいくつかの小さな変更をする必要がありました:
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.
単一のスペースが実行フローを台無しにするインデントに注意してください