2017-01-04 2 views
7

Мне нужно выполнить некоторые ключевые слова условно в рамках робота, но я не знаю, как это сделать, это не работает. Я пробовал много вариантов, но я предполагаю, что у меня есть заявление «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. Но в случае, если я запускаю его он не должен даже пойти в ELSE отрасли, потому что $ {bool} is True ... Моя пользовательская функция is filter opened просто проверяет, открыт ли фильтр, если это так, возвращает значение True. Моя пользовательская функция uncheck all in filter просто возвращает XPATH кнопки «снимите флажок». Моя пользовательская функция find particular filter возвращает XPATH кнопки "dropdown". В этом ключевом слове мне нужно проверить, открыто ли раскрывающееся окно фильтра - если это так, то мне нужно нажать прямо на ${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

Но на самом деле ничего не работает, все та же ошибка :(

Большое спасибо за любую помощь!

+0

Я бы рекомендовал использовать «Вход To Console $ {bool} ", чтобы узнать, какое значение оно имеет, а затем добавьте условие. – Waman

+0

уверен, это было первое, что я сделал - как я писал, значение True..так, не понимаю, почему оно идет в другую ветку. – neliCZka

ответ

9

Имея 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} 

Надеюсь, что это поможет.

4

На основании приведенного ниже синтаксиса обновите свой код n, проверьте его.

Синтаксис IF-ELSE:

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

Синтаксис для "Set Variable" на основе состояния:

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

В соответствии с вашим кодом в IF части,

если «BOOL = true ", он выполнит только пользовательское ключевое слово" снять флажок в фильтре ", но не ключевое слово" Click element ". Если вы хотите, чтобы оба ключевых слова выполнялись на основе условия, используйте ключевое слово «Выполнить ключевые слова», как указано в синтаксисе IF-ELSE.

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

Добро пожаловать в SO! Кстати, вы можете фактически отредактировать ответ @ 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. 

Пожалуйста, будьте осторожны и отступов единое пространство испортит ваше исполнение потока

Смежные вопросы