web-dev-qa-db-ja.com

変数割り当てのあるロボットフレームワークのIF ELSE

ロボットフレームワークでいくつかのキーワードを条件付きで実行する必要がありますが、実行方法がわかりません。動作しません。多くのオプションを試しましたが、「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でも試しました

しかし、実際には何も機能せず、それでも同じエラー:(

助けてくれてありがとう!

14
neliCZka

各ブロックに複数のステートメントを含む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}   

お役に立てれば。

10

以下の構文に基づいて、コードを更新してチェックします。

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構文で説明されている「キーワードの実行」キーワードを使用します。

9
Rakesh

ローラン、ありがとうございました、あなたの解決策は正しいです!私はそれを機能させるためにいくつかの小さな変更をする必要がありました:

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}
1
neliCZka
${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.

単一のスペースが実行フローを台無しにするインデントに注意してください

0
MD5