页面重新加载时的 Selenium 隐式等待功能

Selenium implicit wait functionality on page reload

我正在编写一个测试,我在其中查找页面上的元素,然后重新加载页面。

步骤:

我想知道以下用例中的行为。

**

**

无论页面是旧页面还是新页面还是已加载都没有关系 partially.It 仅当元素不在 DOM 或 [=16] 中时才会抛出异常=] 这就是 Selenium 的工作原理

如果您验证元素是否存在,它会 return 为真 DOM

FindElement
This method is affected by the 'implicit wait' times in force at the time of execution. The findElement(..) invocation will return a matching row, or try again repeatedly until the configured timeout is reached.

共有三个选项:

  • 在您触发重新加载和再次查找元素之间没有发生页面重新加载
  • 在您触发重新加载和再次查找元素之间发生(并完成)页面重新加载
  • 在您触发重新加载和再次查找元素之间发生了页面重新加载(但未完成)

取决于 Selenium 是否在页面重新加载后分配了内部元素 ID,您可以有或没有 StaleElementReferenceException。

这就是我在我的框架中处理它的方式:

  • 为您与之交互的每个页面对象创建 waitForPageToLoad() 方法,并在该页面上的任何其他方法之前调用它;此方法应等到某些(此页面唯一的)元素出现(或显示)
  • 在触发页面重新加载和另一个元素查找之间调用此方法
  • 为典型的元素交互(点击、发送键等)创建包装方法,在该级别处理 StaleElementReferenceException(通常通过显式等待并重新进行相同的交互,没有其他方法可以处理这个 class例外)

检查进展情况,如果可能添加唯一页面元素的验证(如果有任何唯一页面元素在页面重新加载后存在,但之前不存在),如有必要,在第二次元素查找之前添加显式等待。

无论如何它都会尝试搜索元素。

万一它突然消失了 - 你得到 StaleElementReferenceException 如果它不存在 - NoSuchElementException

如果您认为(不)重新加载页面这一事实对您的测试很重要,并且您真的想知道(或采取适当的措施),请使用 document.readyState 将其检查为 complete(加载时)或不 complete(仍在加载时)