首页 > 解决方案 > Selenium - 如何验证页面刷新时出现的加载器

问题描述

我有这个测试用例:

  1. 刷新页面
  2. 加载器出现一小会儿。这实际上只是一个 DIV

    aria-label = '加载中'

  3. 验证页面刷新时加载器元素在页面上是否可见

  4. 验证页面加载完成时加载器元素在页面上不可见。

这是我写的代码:

   _driver.Navigate().Refresh();
    IList<IWebElement> loaders = _driver.FindElements(By.XPath("//*[@aria-label='Loading']"));
    loaders.Count.Should().Be(1);

我的问题是,当 Refresh() 执行时,页面刷新得如此之快,以至于后续行永远找不到该元素。我正在考虑编写一些冗长的循环,在后台线程中不断刷新页面,而前台线程检查加载程序的存在。一旦找到加载器,它将停止后台线程。

这是一个好方法吗?有哪些选择?或者,这个测试用例不适合自动化。

非常感谢

标签: selenium

解决方案


这是一个想法。我自己没有测试过,但试着根据你的情况调整它,看看它是否有效。

如果您尝试单击 DOM 中不再存在的元素,您可能会收到Stale Element Reference Exception

因此,您可以使用 try-catch 块来捕获该异常:

try {
    _driver.Navigate().Refresh();
    IList<IWebElement> loaders = _driver.FindElements(By.XPath("//*[@aria-label='Loading']"));
    loaders.Count.Should().Be(1);
} catch (StaleElementReferenceException) {
    //do something with this
}

推荐阅读