我正在使用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
。我尝试添加引号来对字符串进行比较,但无济于事。我也试过增加超时。
我无法理解为什么当我看到现场(测试执行时)语言确实发生了变化时,条件仍然会返回错误:
答案 0 :(得分:3)
检查不成功,因为您获取属性的值一次,然后等待该一次性值进行更改。你得到它的那一刻,DOM仍然没有更新。
此外,关键字Wait For Condition旨在执行用户的javascript次数,并在评估为True
时停止。你的条件不是js :),加上它是一个语法错误(你必须把变量和值放在引号中,因为它们是对未定义变量的引用)。
您有(至少)3个选项:
html
的定位器 - 类似于/html[@lang=es"]
;这将为您处理DOM状态轮询。Sleep
100-200ms并检查下一次迭代。如果循环达到上限w / o值是预期的值 - 表示失败。Wait For Condition
kw,通过制作javascript方法或表达式(以及查找元素及其属性值)。如果我这样做,我的偏好将按照上面的顺序 - 考虑到易于实施,以及大多数RF原生方法。