2017-01-04 10 views
7

ロボットフレームワークで条件付きでいくつかのキーワードを実行する必要がありますが、それを行う方法はわかりません。私は多くのオプションを試してみましたが、私は完全に間違って「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. しかし、私はそれを実行する場合にはそれも$ので、ELSEブランチに行くべきではありません{bool}はTrueです... 私のカスタム関数is filter openedは、フィルタがすでに開いているかどうかをチェックします。もしそうなら、Trueを返します。 私のカスタム機能uncheck all in filterは "すべてチェックを外す"ボタンのXPATHを返すだけです。 私のカスタム関数find particular filterは "フィルタドロップダウン"ボタンのXPATHを返します。 このキーワード全体で、フィルタのドロップダウンが既に開いているかどうかを確認する必要があります。その場合は、直接${uncheck_all_button}をクリックする必要があります。フィルタのドロップダウンがまだ開いていない場合は、まずフィルタ自体をクリックしてください。${particular_filter}私も012でそれを試してみました

run keyword if "${bool}" == "True" ${uncheck_all_button}= uncheck all in filter ${AVAILABLE FILTERS} ${FILTER} 

${uncheck_all_button}= run keyword if "${bool}" == "True" Set Variable uncheck all in filter ${AVAILABLE FILTERS} ${FILTER} 

またはこの:その後、私はまた、次のように持っている「ランキーワード」ラインを試してみました${uncheck_all_button}

をクリックすることができますと${bool} == True

しかし、何が本当に機能していない、まだ同じエラー:(

は、任意の助けをありがとうございました!

+0

流れ: は、私はちょうどそれが作業するためにいくつかの小さな変更をしなければなりませんでしたTo Console $ {bool} "を実行して、保持している値を確認し、条件を追加します。 – Waman

+0

確かに、それは私がやった最初のことでした - 私が書いたように、値はTrueです。だからなぜそれが他のブランチに行くのか分かりません。 – neliCZka

答えて

9

IF/THEN/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 
    ...    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} 

希望します。

4

以下の構文に基づいて、コードを更新して確認します。

構文IF-ELSE用:条件に基づいて、 "変数セット" の

Run Keyword If '${Condition}'== 'True' Run Keywords <Keyword 1>  <Keyword 2> 
    ... ELSE <Keyword 1> 

構文:IF部には、コードを1として

${Status}= Run Keyword If '${Condition}'== 'True' Set Variable <Yes> <No> 

であれば「BOOL = true "を選択すると、カスタムキーワード" filter in all "は選択解除されますが、" click element "キーワードは実行されません。条件に基づいて両方のキーワードを実行する場合は、IF-ELSE構文で説明したように、「Run Keywords」キーワードを使用します。

0

ありがとう、ローラン、あなたの解決策は正しいです!

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} 
+0

ようこそ!ちなみに、あなたはLaurentの答えをあなたが行った変更で実際に編集することができます。 – bman

0
${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. 

はインデントにご注意ください単一のスペース意志台無しあなたの実行が、私はあなたが「ログを使用することをお勧めします

関連する問題