selenium - 机器人框架+Selenium : how to avoid "stale element" error (flaky test)?

标签 selenium robotframework

我正在使用 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/

相关文章:

python - 将一个关键字作为参数发送给另一个关键字

python - 在机器人框架中开始执行测试用例之前如何最初存储函数的返回值

javascript - 如何在现有浏览器中使用 Katalon 脚本

service - 如何通过 chromedriver selenium 禁用定位服务?

selenium - 如何通过 Java 中的 Selenium/Webdriver 单击复选框列表中的复选框?

robotframework - 如何通过excel文件只在特定时间生成随机字符串?

robotframework - 在 Robot Framework 中定义字典列表

java - 调用具有 javascript 函数的方法时的强制转换问题

ruby-on-rails - 如何在带有 Selenium 的 Capybara 中使用 ruby​​-debug

python - 如何在 python 和 Robot-framework 中对字典进行切片?