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

时间:2015-07-10 15:36:26

标签: java selenium selenium-webdriver wait reload

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

步骤:

  • 使用selenium webdriver(java)打开firefox浏览器.Implicit wait设置为30秒。
  • 导航到网页。验证元素是否为id="elementid" 存在。
  • 现在重新加载页面。验证元素是否为id="elementid" 存在。

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

**

  • 如果重新加载不正确并且显示的页面是,则包含 旧页面而不是重新加载的页面,selenium会返回true 当我验证id="elementid"偶数元素的存在时 虽然页面实例是旧的?或者它会抛出异常吗?

**

3 个答案:

答案 0 :(得分:1)

有三种选择:

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

根据Selenium是否在重新加载页面之后分配内部元素ID,您可以使用StaleElementReferenceException。

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

  • 为您交互的每个页面对象创建waitForPageToLoad()方法,并在此页面上的任何其他方法之前调用它;此方法应该等到某个(此页面是唯一的)元素存在(或显示)
  • 在触发页面重新加载和另一个元素查找之间调用此方法
  • 为典型的元素抽取创建包装器方法(click,sendKeys等),在该级别处理StaleElementReferenceException(通常通过显式等待并重新执行相同的交互,没有其他方法来处理此类异常)

检查它是如何进行的,如果可能的话,添加唯一页面元素的验证(如果在页面重新加载之后存在任何唯一的页面元素,而不是之前),在必要时在第二个元素查找之前添加显式等待。

答案 1 :(得分:0)

如果页面是旧页面或新页面或部分加载,则无关紧要。如果页面的DOM中不存在该元素,则只会抛出异常。那么这是怎么回事Selenium工作

如果验证元素是否存在于DOM中,它将返回true

  

FindElement
  这种方法受到隐含等待'时间有效   执行时间。 findElement(..)调用将返回一个   匹配行,或重复尝试直到配置的超时为止   达到。

答案 2 :(得分:0)

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

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

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