Robot Framework无法正确识别属性值

时间:2018-01-22 02:34:03

标签: java robotframework

我正在使用Selenium on Java开发Robot Framework项目。

我测试的网站有一个语言下拉元素来切换页面语言。每当选择一种新语言时,&#34; lang&#34; html标记中的属性发生了变化。例如,如果从列表中选择西班牙语,则从<html lang="en">开始。

这就是我用来测试语言切换的原因:

Select From List By Value       ${DROPDOWN}  ?hl=es
${language}                     Get Element Attribute  html@lang
Wait For Condition              ${language}==es  timeout=15s

即使我可以看到页面切换语言,并且我可以在测试运行时检查DOM,并且我看到lang属性切换到新语言,我仍然得到Condition 'en == es' did not become true in 15 seconds。我尝试添加引号来对字符串进行比较,但无济于事。我也试过增加超时。

我无法理解为什么当我看到现场(测试执行时)语言确实发生了变化时,条件仍然会返回错误:

enter image description here

1 个答案:

答案 0 :(得分:3)

检查不成功,因为您获取属性的值一次,然后等待该一次性值进行更改。你得到它的那一刻,DOM仍然没有更新。

此外,关键字Wait For Condition旨在执行用户的javascript次数,并在评估为True时停止。你的条件不是js :),加上它是一个语法错误(你必须把变量和值放在引号中,因为它们是对未定义变量的引用)。

您有(至少)3个选项:

  • 使用关键字Wait Until Page Contains Element并向其传递具有所需属性值的html的定位器 - 类似于/html[@lang=es"];这将为您处理DOM状态轮询。
  • 实现自定义池 - 在迭代绑定循环中,获取属性,检查它是否具有所需值,如果是,则中断循环;如果不是 - Sleep 100-200ms并检查下一次迭代。如果循环达到上限w / o值是预期的值 - 表示失败。
  • 使用Wait For Condition kw,通过制作javascript方法或表达式(以及查找元素及其属性值)。

如果我这样做,我的偏好将按照上面的顺序 - 考虑到易于实施,以及大多数RF原生方法。

相关问题