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

Robotframework: Selenium2Lib: Wait Until (...) Keywords

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

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

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

我不知道你所说的 "scope" 是什么意思。他们都在同一个范围内工作。

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

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

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

which keyword is most reliable in case, when I wanna check if element of the page is fully loaded and ready to use?

最完整的解决办法是等它出现在页面上,等它可见,再等它被启用。

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

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

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

Is there a keyword that checks if a full page is loaded?

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

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

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

等到元素被启用

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

  • 等到元素定位器被启用,启用意味着它没有被禁用,也没有 read-only。
  • 如果超时在启用元素之前到期,则失败。

等到元素可见

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

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

等到页面包含元素

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

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

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

中所列

Note : Selenium2Library has been renamed to SeleniumLibrary since version 3.0. Currently Selenium2Library is just a thin wrapper to SeleniumLibrary that eases with transitioning to the new project. Here you can find SeleniumLibrary and Selenium2Library project pages for more documentation.

最后,当您寻找 keyword 检查 是否加载整页时 ,有一种检查 document.readyState 等于 complete 但值得一提的是 Web Client (即 Web 浏览器)returns 仅当 'document.readyState' 等于 [=18 时才将控制权返回给 WebDriver 实例=] 已实现,但它不保证新 HTML DOM 上的所有 WebElements 都是 visible可交互可点击

在这里你可以找到一个