selenium - webdriver 元素等待
页面加载元素,有时会有延时,造成自动化测试的不稳定。可以通过设置元素的等待延时来解决,一般有3种方法:
- 显示等待
- 隐式等待
- sleep()
下面分别介绍:
1. 显示等待
稍复杂,不常用,so~~
2. 隐式等待 implicitly_wait()
通过一定的时长,等待页面上的元素加载完成。driver.implicitly_wait(10)
特点:
- 设置的等待时长为10秒,并不是一个固定的等待时间
- 不会影响脚本的执行速度
- 不针对页面上的某一特定元素进行等待。
规则:
- 当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;
- 若定位不到,则以轮询的方式不断的判断元素是否被定位到。
例如:在第8秒定位到元素,则继续执行,若超出设置的时间10s还没有定位到,则抛出异常(本例中对异常进行了处理)
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.implicitly_wait(10) # 设置等待时长为10s try: print(time.ctime()) # 打印:Mon Mar 9 19:14:41 2020 driver.find_element_by_id('su1') except Exception as e: print(e) # 打印异常信息:Message: no such element finally: print(time.ctime()) # 打印:Mon Mar 9 19:14:51 2020(和前一个时间,间隔10s) driver.quit()
3. sleep()
可以设置固定时间的休眠等待
from selenium import webdriver import time # 导入time模块 driver = webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(0.5) # 休眠0.5秒 driver.find_element_by_id('kw').send_keys('fjdkasljf') time.sleep(2) # 默认以秒为单位,休眠2秒 driver.quit()