📜  我们可以同时使用隐式等待和显式等待吗?无论(1)

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

我们可以同时使用隐式等待和显式等待吗?

当涉及到WebDriver中等待问题时,隐式等待和显式等待是两个最常用的方法。

隐式等待

隐式等待是定一个全局等待时间,WebDriver会在该时间范围内等待元素出现,如果超时则抛出异常。

driver.implicitly_wait(10)

需要注意的是隐式等待只能设置一次,且作用于整个会话。 具体实现为设置一个等待时间,之后在网页加载或其他操作中,如果没有找到元素,将会以固定的时间间隔不断的重新查找元素,直到找到为止或者超时抛出异常。

显式等待

显式等待是要求WebDriver等待一定时间,直到条件满足,如果在规定时间内条件未满足则抛出异常。该方法需要使用ExpectedConditions类,它表示了条件触发器。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
同时使用隐式等待和显式等待

在实际情况中,我们可以同时使用隐式和显式等待来更好地管理等待时间和元素查找,但需要注意两者可能会产生冲突。

在这种情况下,WebDriver将使用最长的等待时间,因此如果设置了60秒的隐式等待时间并且显式等待的条件最多需要30秒,WebDriver将在60秒后抛出超时异常,即WebDriver头脑中将等待60秒,而不仅仅是显式等待的30秒。 因此,如果时间设置得很长,可能会导致脚本执行失败。

因此,如果同时使用隐式和显式等待,应该尽可能设置相同的时间,或者将隐式等待时间缩短到最低限度。

总之,各位程序员在使用等待时需要秉持着目的性原则,根据浏览器和待测试网页情况,巧妙地选用相应的等待方法,从而达到事半功倍的效果。

此文转自博客园-人民公社