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 的一个薄包装器,可以轻松过渡到新项目。在这里您可以找到SeleniumLibrary 和Selenium2Library 项目页面以获取更多文档。
最后,当您寻找 keyword
来检查 是否加载了整页 时,有一种做法是检查 document.readyState
以等于 complete
但值得一提的是,Web 客户端(即 Web 浏览器)将控制权返回给 WebDriver 实例仅在 'document.readyState'
等于 "complete"
时实现,但不能保证新 HTML DOM 上的所有 WebElements 都是可见 strong>、可交互和可点击
在这里你可以找到detailed discussion
【讨论】:
以上是关于Robotframework:Selenium2Lib:等到(...)关键字的主要内容,如果未能解决你的问题,请参考以下文章