一些类似的硒等待有啥区别?
Posted
技术标签:
【中文标题】一些类似的硒等待有啥区别?【英文标题】:What is the difference between some similar selenium waits?一些类似的硒等待有什么区别? 【发布时间】:2021-09-12 14:07:44 【问题描述】:简单的问题:
这两种说法的确切区别是什么:
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
但是,即使微调器不可见,selenium 也会等待(比预期多 8 秒)。有什么问题?
【问题讨论】:
那么invisibility
(你的意思是visibility_of_element_located
)和presence
有什么区别?
确实,没发现有什么区别
忘记 Selenium,阅读英文的函数名称。您的应用程序可能没有区别,但做不同的事情。
ut,即使微调器不可见,selenium 也会等待(比预期多 8 秒)。有什么问题? - 你的代码中是否也有隐式等待?
是的,我已将隐式等待设置为 10 秒。我应该删除它还是更改它?
【参考方案1】:
顶部语句等待(ec.invisibility_of_element_located(element))
发生,底部语句等待(ec.presence_of_element_located(element))
不发生。
从功能上讲,我知道这没有意义,但这就是要问的:)
【讨论】:
据我了解,您的意思是等待隐形需要元素首先可见? 我的理解是第一个会等到找到元素,第二个会等到找不到元素 我编辑了问题以突出问题【参考方案2】:ec.invisibility_of_element_located
等待元素不可见。
元素可以存在于页面上但不可见。
对于此类元素 ec.invisibility_of_element_located
将成功返回 True
并且您的场景流程将继续,而 until_not(ec.presence_of_element_located(element))
将抛出超时异常,因为该元素仍然存在于页面上。
【讨论】:
好的,所以存在寻找元素仅在 DOM 中? “仅”是什么意思?是的,它从字面上寻找元素的存在。大多数页面上都有很多不可见的元素。【参考方案3】:我从 Selenium 官方文档中得到了一些东西:here
警告:
不要混合隐式和显式等待。这样做会导致 不可预知的等待时间。例如,将隐式等待设置为 10 秒和 15 秒的显式等待可能会导致超时 20 秒后发生。
所以对于你的这个问题:
但是,即使微调器不可见,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()
。
【讨论】:
【参考方案4】:问题第二部分(添加)的答案:
selenium 脚本在页面完成加载之前检查是否不可见是可能的(并且很可能)。 Selenium 无法知道元素之前是否可见,现在是否不存在于 DOM 中,这就是为什么它会先等待可见性,然后再等待不可见性。
【讨论】:
以上是关于一些类似的硒等待有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章