在自动化过程当中,元素出现受网络环境,设备性能等多种因素影响。所以元素加载的时间可能不一致,从而会致使元素没法定位超时报错,可是实际上元素是正常加载了的,只是出现时间晚一点而已。那么如何解决这个问题呢?web
设置元素等待能够更加灵活的制定等待定位元素的时间,从而加强脚本的健壮性,提升执行效率。网络
设置固定的等待时间,使用sleep()方法便可实现app
from time import sleep函数
#强制等待5秒性能
sleep(5)ui
隐式等待是针对所有元素设置的等待时间spa
driver.implicitly_wait(20)code
显式等待是针对某个元素来设置的等待时间。blog
方法WebDriverWait格式参数以下:ci
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver : WebDriver
timeout : 最长超时时间,默认以秒为单位
poll_frequency : 休眠时间的间隔时间,默认为0.5秒
ignored_exceptions : 超时后的异常信息,默认状况下抛NoSuchElementException异常。
WebDriverWait()通常和until()或until_not()方法配合使用,另外,lambda提供了一个运行时动态建立函数的方法。
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("elementID"))
1 from app.find_element.capability import driver 2 from time import sleep 3 from selenium.webdriver.support.ui import WebDriverWait 4 5 # 等待元素方法汇总 6 7 # 隐式等待(等待全部元素) 8 driver.implicitly_wait(3) 9 10 # 显示等待(等待特定元素出现) 11 WebDriverWait(driver, 3).until(lambda x: x.find_element_by_id('com.tal.kaoyan:id/login_register_text')) 12 driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click() 13 14 # 强制等待(秒) 15 sleep(3) 16 17 driver.close_app()