硒-如何验证页面刷新中显示的加载器

时间:2019-01-23 05:56:46

标签: selenium

我有这个测试用例:

  1. 刷新页面
  2. 加载程序出现一会儿。这实际上只是

    的DIV

    aria-label ='正在加载'

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

  4. 验证页面加载完成后页面上是否看不到loader元素。

这是我写的代码:

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

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

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

非常感谢

2 个答案:

答案 0 :(得分:1)

因此您可以在.Refresh()之后添加2或3秒的等待时间,然后再继续操作。  因此,您已经创建了循环,并且循环将迭代直到到达元素为止,因此这就是循环如此快结束的原因,您可以创建循环一段时间,例如在i=0处启动循环,然后迭代直到{ {1}}到达i,在此之间您可以找到元素或检查元素的可用性。  我还与您共享了使用各种类型的100命令检查Web元素可见性的链接

很高兴能帮助我们知道是否可行

https://www.softwaretestinghelp.com/webdriver-commands-selenium-tutorial-14/

答案 1 :(得分:1)

这是个主意。我没有亲自测试过,但尝试根据您的情况进行调整,看看是否可行。

如果您尝试单击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
}