我正在使用 Robot Framework 和 Selenium 来测试具有语言选择器的网站。我需要能够选择一种语言,然后验证页面实际上已更改为该语言。
由于在选择新语言后 lang
中的值<html>
的属性标签更改,我决定用它来验证语言是否已成功更改。但是我得到了不稳定的结果,因为我的测试有时通过有时不通过。
这是我使用的关键字的定义:
CHANGE LANGUAGE
[Arguments] ${lang}
Select From List By Value ${LANGUAGE SWITCH} ?hl=${lang}
Wait Until Page Contains Element css=html
${doc lang} Get Element Attribute css=html@lang
Should Be True '${doc lang}'=='${lang}' timeout=15s
由于我必须多次执行此关键字(每种可用语言执行一次),因此我经常收到可怕的“陈旧元素”错误:
| FAIL | stale element reference: element is not attached to the page document
.我通读了 this article以及此处的其他一些问题,并了解如果在获取元素引用后更新元素引用,则可能会发生这种情况。但是,我不确定应该如何修改关键字以避免出现此错误。
最佳答案
使用每个人都非常友好地提供的信息,我可能已经找到了一个潜在的修复方法(不确定它是否足够健壮,不再抛出异常,但经过几次测试运行后,它们都通过了):我添加了一个“等待关键字”成功”并将语言验证移至新关键字:
VALIDATE PAGE LANGUAGE
[Arguments] ${lang}
${doc lang} Get Element Attribute css=html@lang
Should Be True '${doc lang}'=='${lang}'
CHANGE LANGUAGE
[Arguments] ${lang}
Select From List By Value ${LANGUAGE SWITCH} ?hl=${lang}
Wait For Condition return document.readyState=="complete"
Wait Until Keyword Succeeds 5 5s VALIDATE PAGE LANGUAGE ${lang}
然后,我将这个“CHANGE LANGUAGE”关键字调用的次数与我需要测试的语言一样多。
我将此添加为答案而不是评论,以便我可以以更易读的方式显示代码。
关于selenium - 机器人框架+Selenium : how to avoid "stale element" error (flaky test)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449240/