我正在与Java上的Selenium一起从事Robot Framework项目.
我正在测试的网站有一个语言下拉菜单来切换页面语言.每当选择一种新语言时,html标记中的“ lang”属性都会更改.例如,它来自< html lang =“ zh-CN”>如果从列表中选择了西班牙语.
这就是我用来测试语言切换的内容:
Select From List By Value ${DROPDOWN} ?hl=es
${language} Get Element Attribute html@lang
Wait For Condition ${language}==es timeout=15s
即使我可以看到页面切换语言,也可以在测试运行时检查DOM,并且看到lang属性切换到新语言,但我仍然在15秒钟内不断获取Condition’en == es’的信息. .我尝试添加引号对字符串进行比较,但无济于事.我还尝试增加超时时间.
我无法理解为什么在实时(测试执行期间)看到语言确实已更改时条件始终返回false:
解决方法:
检查不会成功,因为您一次获得了属性的值,然后等待该一次性值更改.而且当您获得它的那一刻,DOM仍然没有更新.
另外,关键字Wait For Condition旨在执行用户的javascript次数,并在其值为True时停止.您的条件不是js :),还有语法错误(您必须将变量和值放在引号中,因为当前它们是对未定义变量的引用).
您至少有3个选项:
>使用关键字Wait Until Page Contains Element并将具有所需属性值的html的定位符传递给它-类似于/ html [@ lang = es“];这将为您处理DOM状态轮询.
>实现自定义池-在迭代绑定循环中,获取属性,检查其是否具有所需的值,如果是,则中断循环;如果不是,请休眠100-200ms,然后检查下一次迭代.如果循环未达到上限,则该值为预期值-失败.
>通过编写javascript方法或表达式中的值(并在其中找到元素及其属性值)来使用“等待条件” kw.
如果要这样做,则我的偏好将是上述顺序-考虑到易于实现和大多数RF本地方法.