我有这个测试用例:
>
加载器会出现一段时间。这实际上只是一个DIV
aria-label='加载'
验证页面刷新时加载器元素在页面上是否可见
这是我写的代码:
_driver.Navigate().Refresh();
IList<IWebElement> loaders = _driver.FindElements(By.XPath("//*[@aria-label='Loading']"));
loaders.Count.Should().Be(1);
我的问题是,当刷新()执行时,页面刷新得如此之快,以至于后续行永远找不到元素。我在想写一些冗长的循环,在后台线程中不断刷新页面,而前台线程检查loader的存在。一旦找到loader,它将停止后台线程。
这是一个好的方法吗?有什么替代方案?或者,这个测试用例不适合自动化。
很多谢谢
所以你可以在之后添加2或3秒的等待。刷新()
,之后你可以继续你的操作。所以你已经创建了循环,循环将被迭代,直到它到达元素,这就是为什么你的循环结束得如此之快,你可以创建一段时间的循环,比如在i=0
开始循环,然后迭代,直到i
到达100
,在这两者之间,你可以找到元素或检查元素的可用性。我还与您分享了使用各种类型WebDriver
命令检查Web元素可见性的链接
很高兴能帮上忙让我们知道如果成功了
https://www.softwaretestinghelp.com/webdriver-commands-selenium-tutorial-14/
这里有一个想法。我自己没有测试过它,但是试着根据你的情况调整它,看看它是否有效。
如果尝试单击不再存在于DOM中的元素,可能会出现陈旧元素引用异常。
因此,您可以使用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
}