您的位置:

显示等待和隐式等待的区别

在Selenium自动化测试中,等待元素加载是非常重要的一个环节。为了更好的控制页面元素的等待时间,Selenium提供了两种等待方式:显示等待和隐式等待。本文将从多个方面分析显示等待和隐式等待的区别。

一、显示等待 vs. 隐式等待

显示等待和隐式等待是Selenium中两种控制等待时间的方式。其中,显示等待是针对某一个具体元素的等待操作,而隐式等待则是对整个页面的等待操作。

二、代码示例1:显示等待


# 导入必要的模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 设置等待时间
wait = WebDriverWait(driver, 10)

# 使用显式等待等待元素加载完成
element = wait.until(EC.presence_of_element_located((By.ID,'element_id')))

上述代码的意思是在10秒内,等待id='element_id'的元素出现,如果10秒钟后还没有出现,则会抛出异常TimeoutException。

三、代码示例2:隐式等待


# 导入必要的模块
from selenium import webdriver

# 设置等待时间
driver.implicitly_wait(10)

# 访问网页
driver.get('https://www.example.com')

# 查找元素
element = driver.find_element_by_id('element_id')

上述代码的意思是在整个页面中等待10秒钟,如果10秒钟内还没有把需要的元素渲染出来,则会抛出异常NoSuchElementException。

四、等待时间的控制

显示等待和隐式等待的一个明显的区别就是等待时间的控制方式不同,一个是通过等待元素的出现与否,一个是通过等待整个页面的加载。

另外,隐式等待是默认存在的,如果我们不手动设置,就会默认等待0秒钟。而显示等待需要通过代码来进行手动设置等待时间。

五、不同的预期条件

隐式等待设置等待时间后会在整个页面中进行监测,如果10秒钟内没有加载完毕,则会返回NoSuchElement错误。

相较而言,显示等待根据不同的预期条件来进行判断等待是否完成。可以选择不同的判断条件,比如判断元素是否出现,或者判断元素是否可见等。这也是显示等待和隐式等待的一个明显的区别。

六、代码示例3:不同的预期条件


# 导入必要的模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 等待元素出现
element = wait.until(EC.presence_of_element_located((By.ID,'element_id')))

# 等待元素可见
element = wait.until(EC.visibility_of_element_located((By.ID,'element_id')))

上面的示例代码中,使用ExpectedConditions类来判断元素是否出现或者是否可见,具体使用哪种判断条件可以根据实际需求调整。

七、总结

在Selenium自动化测试中,等待元素的加载是非常重要且必不可少的一个环节。通过本文的分析,我们可以看到显示等待和隐式等待的区别,以及它们各自的优劣势,并且了解了预期条件的不同。

对于一些需要控制某个元素等待时间的场景,我们可能需要使用到显示等待来实现,而对于整个页面进行等待的场景,则可以考虑使用隐式等待。