我有这个测试用例:
加载程序出现一会儿。这实际上只是
的DIVaria-label ='正在加载'
验证刷新页面时页面上是否可见加载程序元素
这是我写的代码:
_driver.Navigate().Refresh();
IList<IWebElement> loaders = _driver.FindElements(By.XPath("//*[@aria-label='Loading']"));
loaders.Count.Should().Be(1);
我的问题是,当执行Refresh()时,页面刷新得如此之快,以至于后续的行再也找不到该元素。我正在考虑编写一些冗长的循环,以不断刷新后台线程中的页面,而前台线程检查加载程序的存在。并且一旦找到加载程序,它将停止后台线程。
这是一个好方法吗?有哪些选择?或者,此测试用例不适用于自动化。
非常感谢
答案 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
}