如何告诉硒化物在重试之间重新刷新页面而不引发错误



我想测试一个需要更新页面加载的功能。由于硒化物只检查元素是否出现,而不重新加载页面,因此它不会了解更新后的状态。

我现在是这样做的:

element(byAttribute("type", "submit")).click()
try {
element(byText("some specific text")).shouldBe(visible)
} catch (e: com.codeborne.selenide.ex.ElementNotFound){
refresh()
element(byText("some specific text")).shouldBe(visible)
}

这在很多方面都很糟糕:

  • 它捕获了一个错误,而这个错误不是要捕获的(否则它将是一个异常(
  • 它会引发副作用,比如创建错误屏幕截图
  • 它只重试一次
  • 它等待完整的第一次超时,这可能根本不需要。例如,也许它可以立即刷新,然后成功

如果您想知道:有问题的功能与缓存是热的还是冷的有关。在测试开始时强制缓存为冷缓存可能是可能的,但这也会增加很多复杂性(例如,直接与数据库交互(,我希望避免这种情况。

我不熟悉硒化物,但我认为通过以下更改,您至少可以解决列出的几个问题:

  1. try-catch块放入while true循环中,以便应用发现可见的元素break,否则继续循环
    如果您想避免无限循环,请在那里添加一些计数器,以便在X次迭代后找不到元素时,将其保留
  2. 减少等待预期条件的超时时间。你没有在这里分享你定义如果的地方,所以我不知道如何改变
    第一段的更改可能如下所示:
element(byAttribute("type", "submit")).click()
for(int i=0;i<100;i++){
try {
element(byText("some specific text")).shouldBe(visible)
break
} catch (e: com.codeborne.selenide.ex.ElementNotFound){
refresh()
element(byText("some specific text")).shouldBe(visible)
}
}

最新更新