隐式等待和显示等待
一、背景
在打开应用程序的页面时,总会有加载的时间,有时候在获取页面元素时,页面还没有加载完毕,导致无法定位某些想要获取的元素,此时就需要利用等待方法。
二、隐式等待
-
方法:driver.implicitly_wait(时间)
driver.implicitly_wait(5)
-
作用:设置隐式等待后,后续所有的定位元素的方法,都会在这个时间内等待元素的出现,如果出现进行下一步操作,若没有出现则报错。
-
注意:隐式等待的作用是全局的,是作用于整个 session 的生命周期,也就是说只要设置一次隐式等待,后面就不需要设置。如果再次设置隐式等待,那么后一次的会覆盖前一次的效果。当在 DOM 结构中查找元素,且元素处于不能立即交互的状态时,将会触发隐式等待。
三、显示等待
-
方法:WebDriverWait(driver,时间,频率).until(方法)
from selenium.webdriver.support.wait import WebDriverWait WebDriverWait(driver,5).until(XXX)
-
作用:设置显示等待后,会在设定的时间范围内按照一定的频率查找该元素是否出现(默认查找频率时0.5s,可以在方法中进行修改),若元素出现,则进行下一步操作,若没有出现,则报NoSuchElementException错误。
四、显示等待
强制等待是使线程休眠一定时间。强制等待一般在隐式等待和显式等待都不起作用时使用。
time.sleep(5)
五、使用场景
- 作用域:显示等待对单个元素有效,方法灵活,扩展性强,但是代码量复杂,后续可以通过封装减少使用的复杂度;隐式等待对全局有效,方法不灵活,代码效率不高,但是使用简单。
- 方法:显示等待 WebDriverWait 对象的 until 方法,隐式等待 driver 的 implicitly_wait 方法。