Robotframework:Selenium2Lib:等到(...)关键字

Posted

技术标签:

【中文标题】Robotframework:Selenium2Lib:等到(...)关键字【英文标题】:Robotframework: Selenium2Lib: Wait Until (...) Keywords 【发布时间】:2018-08-03 13:45:51 【问题描述】:

我正在使用 Selenium2 w RF 来测试相当复杂的 Web 应用程序的 GUI。由于我确实在加载元素时遇到了一些失败,所以想知道关键字之间有什么区别:

等到元素启用 定位器 等到元素可见 定位器 等到页面包含元素 定位器

当我想检查页面元素是否已完全加载并准备好使用时,每个关键字的范围是什么?哪个关键字最可靠? 是否有一个关键字可以检查是否加载了整页?

【问题讨论】:

User Guide 对您没有帮助吗? 提问时请注意,如果没有解释,人们会假设最简单的答案适用。在您的情况下,您没有指定任何先前的经验或研究,所以有人提到文档我并不感到惊讶。在这种情况下,您评论的最后一句话使您收到的答案完全不同。 @A.Kootstra 你说得对。我认为 OP 应该使用来自 cmets 的相关字节更新主要问题,以使其成为一个更好的问题。 【参考方案1】:

我不知道您所说的“范围”是什么意思。它们都在同一个范围内工作。

Wait Until Element Is Enabled 假定该元素存在于页面上,并将等待该元素启用(不是只读的,也不是禁用的)。如果元素不存在,它将立即失败(或者如果您有隐式等待,则在超时后)

Wait Until Element is Visible 假定该元素存在于页面上,并将等待该元素可见。如果元素不存在,它将立即失败(或者如果您有隐式等待,则在超时后)

Wait Until Page Contains Element 不对元素做任何假设。它一直等到元素实际出现在页面上,无论它是可见的、不可见的、启用的还是禁用的。它不需要隐式等待,因为此关键字是显式等待。

当我想检查页面元素是否已完全加载并准备好使用时,哪个关键字最可靠?

最完整的解决方案是等待它出现在页面上,等待它可见,然后等待它启用。

如果元素始终在页面上,您可以跳过第一次检查(即:如果没有 javascript 可以创建或删除元素)。

如果元素将始终启用,则无需等待它启用(即:如果没有 javascript 来禁用或启用该元素)

对于简单的静态页面,您实际上只需要检查一个元素是否可见。即使这样通常也不是必需的,因为 selenium 在页面加载之前不会从打开页面返回。当页面是动态的时,问题就来了。也就是说,当有 javascript 可以更改页面上的内容以及它是否可见或启用时,在 html 加载之后。

是否有一个关键字可以检查是否加载了整页?

不,因为“已加载”在不同的应用程序中可能意味着不同的东西。浏览器在加载完 html 后会将变量 document.readyState 设置为“完成”。你可以用Wait for condition return window.document.readyState === 'complete'之类的东西在机器人中检查。同样,如果您有在页面上运行的 javascript,这可能还不够,因为在加载初始 HTML 后页面可能会发生变化。

没有适用于所有应用的单一解决方案。由您来了解应用程序在启动时正在做什么,并进行适当的检查。

有关如何使用原始 python 和 selenium 了解页面何时完全加载的精彩讨论,请参阅博客文章 How to get Selenium to wait for page load after a click

【讨论】:

【参考方案2】:

等到元素启用

Wait Until Element Is Enabled :这是用于检查元素是否在给定时间范围内启用的属性。

等到元素定位器启用时,启用意味着它既不是禁用的也不是只读的。 如果在启用元素之前超时过期,则会失败。

等到元素可见

Wait Until Element Is Visible :这是检查已知存在于页面 DOM 上的元素在给定时间范围内是否可见的期望。

等到元素定位器可见。 如果在元素可见之前超时过期,则会失败。

等到页面包含元素

Wait Until Page Contains Element :这是在给定时间范围内检查元素是否存在于页面的 DOM 上的期望。

等到元素定位器出现在当前页面上。 如果在元素出现之前超时过期,则会失败。

现在,每个keyword 都根据要求(用例)使用,并且如Selenium2Library 中列出的那样有效、经过验证且可靠

注意:Selenium2Library 自 3.0 版起已重命名为 SeleniumLibrary。目前 Selenium2Library 只是 SeleniumLibrary 的一个薄包装器,可以轻松过渡到新项目。在这里您可以找到SeleniumLibrarySelenium2Library 项目页面以获取更多文档。

最后,当您寻找 keyword 来检查 是否加载了整页 时,有一种做法是检查 document.readyState 以等于 complete 但值得一提的是,Web 客户端(即 Web 浏览器)将控制权返回给 WebDriver 实例仅在 'document.readyState' 等于 "complete" 时实现,但不能保证新 HTML DOM 上的所有 WebElements 都是可见 strong>、可交互可点击

在这里你可以找到detailed discussion

【讨论】:

以上是关于Robotframework:Selenium2Lib:等到(...)关键字的主要内容,如果未能解决你的问题,请参考以下文章

怎么打开robotframework

robotframework中怎么获取元组类型的数据

pycharm执行robotframework

怎样搭建python和robotframework环境

robotframework上传文件相对路径怎么写

本地搭建robotframework + allure 遇到的问题