由于现在部分web应用加载方式的选择,页面会需要一定时间逐渐加载完毕,也就是说有的页面元素先加载出来,有的元素后加载出来。如果直接定位所查找的元素的话,可能会由于此元素尚未加载完毕找不到元素从而报错,由于网络不稳定这种情况出现的几率会大很多,一般解决方法的话,time.sleep()函数可以避免一些这种状况,但是缺少了灵活性。在selenium中有关于等待的方法可以比较灵活的解决这个问题,这次主要讲解selenium中元素等待WebDriverWait的使用,以及全局的设置。
一、关于全局设置超时时间
三个全局设置时间的方法中,设置的时间单位为秒,例如implicitly_wait(30),意思是超过30秒没有定位到一个元素,程序就会报错抛出异常,期间会一直轮询查找定位元素。
设置全局元素查找的超时时间
implicitly_wait(time_to_wait)
- time_to_wait:超时时间(秒)
设置全局js异步脚本超时时间
set_script_timeout(time_to_wait)
- time_to_wait:超时时间(秒)
设置全局页面载入超时时间
set_page_load_timeout(time_to_wait)
- time_to_wait:超时时间(秒)
二、关于WebDriverWait的使用以及方法介绍(显示等待)
个人理解:WebDriverWait可以当做元素等待,灵活的设置查找元素时的判断条件,同时由于方法中包含了大量webdriver自带的判断方法,只返回True和False,所以个人认为也可以灵活的当做断言来使用。
2.1基础格式(webDriverWait+until+(判断条件)):
这个格式的结构有点像语言中主谓宾的结构,实例的意思是,程序每0.5秒检查,是否满足:标题包含“百度一下”这个条件,检查是否满足条件的最长时间为:15秒,超过15秒仍未满足条件则抛出异常
WebDriverWait(driver, 15, 0.5).until(expected_conditions.title_contains("百度一下"))
2.2导入库
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdr