📜  如果同时使用隐式和显式等待会发生什么 (1)

📅  最后修改于: 2023-12-03 15:09:19.205000             🧑  作者: Mango

同时使用隐式和显式等待会发生什么

介绍

隐式等待和显式等待都是用来处理页面加载缓慢导致的问题。两种等待方式一个是全局生效,一个是局部生效。但是如果同时使用这两种等待方式,会引发一些问题。

隐式等待和显式等待
  • 隐式等待:全局生效,设置好等待时间后,无论元素是否存在,都会进行等待。等待时间超过设置时间则会抛出异常。可以在程序的任何地方设置。
  • 显式等待:局部生效,可以针对特定元素设置等待时间,等待时间内找到了该元素就立刻执行下一步,等待时间结束后还没有找到该元素则会抛出异常。
同时使用隐式和显式等待

在同一个测试用例中同时使用隐式和显式等待会导致等待时间叠加。例如,如果设置了隐式等待时间为10秒,又手动通过 WebDriverWait 函数设置了等待某个元素出现时间为5秒,那么实际上会等待15秒才会执行下一步操作。这种情况下,会导致代码执行变慢,如果设置的等待时间过长,会严重影响代码的性能。

解决方案

通常情况下,使用显式等待就可以解决问题了。如果需要在某些情况下使用隐式等待,可以在显式等待之前先取消隐式等待,等显式等待结束后再重新启用隐式等待。

driver.implicitly_wait(0)

# 显式等待
wait = WebDriverWait(driver, 5)
element = wait.until(EC.element_to_be_clickable((By.ID, "someid")))

driver.implicitly_wait(10)

这样就可以避免等待时间叠加的问题了。

结论

同时使用隐式和显式等待是一个不好的做法,会导致代码执行变慢,影响性能。推荐使用显式等待来解决页面加载缓慢导致的问题。如果需要使用隐式等待,可以取消隐式等待,在显式等待结束后重新启用隐式等待。