我不明白新版 Selenium 的 WebDriverWait
发生了什么,但据我所知,它的行为与我预期的不一样。
我已经尝试了 4.0.0-beta-1
- 4.0.0-beta-4
的所有版本,我刚刚更新到 4.0.0-beta-4
作为我的首选版本。
我在自己的函数中使用这些方法:
isPresent
isVisible
isClickable
他们每个人都有他们各自调用的构造函数:
WebDriverWait Presence = new WebDriverWait(webDriver, Duration.ofSeconds(1L));
WebDriverWait Visible = new WebDriverWait(webDriver, Duration.ofMillis(1L));
WebDriverWait Clickable = new WebDriverWait(webDriver, Duration.ofMillis(1L));
我发现的一些事情:
Long
类型和以秒为单位提供的持续时间Duration
类型提供的持续时间Duration
有自己的方法,接受类型 Long
以前,你可以这样写:
WebDriverWait Presence = new WebDriverWait(webDriver, 1L);
现在看起来像这样(如上所示):
WebDriverWait Presence = new WebDriverWait(webDriver, Duration.ofSeconds(1L));
唯一的区别在于您如何定义等待。
使用Duration
,您可以指定“类型”:
Duration.ofDays(1L)
Duration.ofHours(1L)
Duration.ofMinutes(1L)
Duration.ofSeconds(1L)
Duration.ofMillis(1L)
Duration.ofNanos(1L)
在我上面的代码示例中,我使用 WebDriverWait
定义了 Duration.ofSeconds(1L)
,这意味着它应该只等待 1 秒,但是,它会等待 10 秒。
事实上,无论它是否设置为 Duration.ofMillis
或 Duration.ofNanos
,它都会等待 10 秒。
所以,要么我真的没有正确理解实现,要么我遗漏了什么,或者实际的 WebDriverWait
类存在问题。
还值得一提的是,无论 WebElement
是否存在,它都不会等待 10 秒,如果 WebElement
不存在,它只会等待整个持续时间。
希望有人能提供帮助。