如何解决一些类似的硒等待有什么区别?
简单的问题:
这两个陈述之间的确切区别是什么:
webdriverwait(self._driver,WEB_WAIT_TIMEOUT).until(ec.invisibility_of_element_located(element))
和
webdriverwait(self._driver,WEB_WAIT_TIMEOUT).until_not(ec.presence_of_element_located(element))
在这两种情况下,硒的行为在我的情况下是相同的。 提前致谢
感谢回复 好的,但仍有一些我不明白的事情: 我有检查微调器是否不可见的基本功能。
`def wait_until_request_api_process_finished(self):
try:
webdriverwait(self._driver,1).until(ec.visibility_of_element_located(BaseLoc.spinner))
webdriverwait(self._driver,10).until(ec.invisibility_of_element_located(BaseLoc.spinner))
except TimeoutException:
pass
但是,即使 Spinner 不可见,selenium 也会等待(比预期多大约 8 秒)。有什么问题?
解决方法
ec.invisibility_of_element_located
等待元素不可见。
元素可以存在于页面上但不可见。
对于此类元素,ec.invisibility_of_element_located
将成功返回 True
,您的场景流将继续,而 until_not(ec.presence_of_element_located(element))
将抛出超时异常,因为该元素仍存在于页面上。
我从 Selenium 官方文档中得到了一些东西:here
警告:
不要混合隐式和显式等待。这样做会导致 不可预测的等待时间。例如,将隐式等待设置为 10 秒和 15 秒的显式等待可能导致超时 20 秒后发生。
所以对于你的这个问题:
但是,即使 Spinner 不可见,selenium 也会等待(比预期多大约 8 秒)。有什么问题?
- 是的,因为你把它们都混合了。在删除隐式等待之前(认为 8 秒真的很重要,或者您的测试套件的可靠性更重要)
现在这个问题:
invisibility_of_element_located
基本上看到这个内部实现:
private static boolean isInvisible(final WebElement element) {
try {
return !element.isDisplayed();
} catch (StaleElementReferenceException ignored) {
// We can assume a stale element isn't displayed.
return true;
}
}
所以它只是在内部检查 isDisplayed()
。
顶部语句会等到 (ec.invisibility_of_element_located(element))
发生,就像底部语句会等到 (ec.presence_of_element_located(element))
不发生一样。
旁注功能上我知道这没有意义,但这就是被问到的:)
,问题的第二(添加)部分的答案:
selenium 脚本有可能(也很可能)在页面加载完成之前检查不可见性。 Selenium 无法知道元素之前是否可见,现在是否不存在于 DOM 中,这就是为什么它会首先等待可见性,然后是不可见性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。