【问题标题】:Selenium - How to verify loader that appears on a page refreshSelenium - 如何验证页面刷新时出现的加载器
【发布时间】:2019-06-16 15:55:59
【问题描述】:

我有这个测试用例:

  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() 执行时,页面刷新得太快以至于后续行永远找不到元素。我正在考虑编写一些冗长的循环,在后台线程中不断刷新页面,而前台线程检查加载程序的存在。一旦找到loader,它就会停止后台线程。

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

非常感谢

【问题讨论】:

  • 您不需要验证 loader 的存在,因为它不是您的用例的一部分 .

标签: selenium


【解决方案1】:

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

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

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

【讨论】:

  • 是的。我想过这样做,但为此我需要使用不同的线程。我确实在后台线程的循环中刷新,而主线程将轮询加载器元素的存在。一旦找到一个元素,它就会停止后台线程。
【解决方案2】:

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

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

【讨论】:

  • 我喜欢你的想法,这对我的测试很有用。
  • 我很高兴听到这个消息。
猜你喜欢
  • 2011-09-04
  • 2013-09-09
  • 1970-01-01
  • 2018-11-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多