使用机器人框架条件语句和关键字时出现语法错误

时间:2017-08-31 12:56:32

标签: python robotframework

我试图找到问题的解决方案,我创建了一个代码,该代码登录到站点并检查站点的状态,但收集元素属性的状态并将其存储到名为$ {class}的变量中。现在这里的问题是该网站只有四种状态,用颜色代码绿色,黄色,红色和灰色表示。我试过3个解决方案

1要将每个状态放入标量变量,例如$ {GREEN} = status_indicator green等,那么下面的代码如下,但它确实有效

Run Keyword If  ${GREEN} == ${class}  Keyword green
...  ELSE IF  ${YELLOW} == ${class}  Keyword yellow
...  ELSE IF  ${RED} == ${class}  Keyword red
...  ELSE  Keyword gray

2我将它们放入列表中,例如@ {COLOR} = status_indicator green等等 然后尝试了这个

list should contain value  @{COLOR}  ${class}

在我看来最有效的是有条件的陈述,因为它带有我创建的关键词的话请告诉我应该做什么,谢谢。

2 个答案:

答案 0 :(得分:1)

要记住的重要一点是条件被评估为python表达式。替换变量后,Robot会将条件直接传递给python。

来自documentation

  

当使用普通的$ {variable}语法在表达式中使用变量时,在计算表达式之前将替换其值。这意味着表达式中使用的值将是变量值的字符串表示形式,而不是变量值本身。对于具有可以直接求值的字符串表示的数字和其他对象,这不是问题,但对于其他对象,行为取决于字符串表示。最重要的是,必须始终引用字符串,如果它们可以包含换行符,则必须使用三重引号。

假设${GREEN}包含green${class}包含red,这意味着当您执行此操作时:

Run Keyword If  ${GREEN} == ${class}

Python看到了这个:

if green == red

请注意,greenred都没有引号,因为数据本身没有引号。

最简单的解决方案是添加自己的引号。 (注意:如果值可以有换行符或引号,最安全的选择是使用三引号)

Run Keyword If  '${green}' == '${class}'

答案 1 :(得分:0)

为什么不直接与字符串进行比较。为什么要再次将这些颜色存储在列表中?

${class}=  Get Element Attribute
Log To Console    ${class}
#I hope you are able to get the exact attribute of that tag(color).


Run Keyword If  '${class}'=='Green'  Keyword green
...  ELSE IF  '${class}'=='Yellow'  Keyword yellow
...  ELSE IF  '${class}'=='Red'  Keyword red
...  ELSE  Keyword gray