隐式等待和显示等待

一、背景

在打开应用程序的页面时,总会有加载的时间,有时候在获取页面元素时,页面还没有加载完毕,导致无法定位某些想要获取的元素,此时就需要利用等待方法。

二、隐式等待

  • 方法: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 方法。
posted @ 2020-02-25 20:35  xyztank  阅读(796)  评论(0编辑  收藏  举报