selenium 设置等待时间
有些网站打开地址或者进行操作后,页面需要加载几秒钟,或者等待某一元素加载完成后再继续下一步操作,这里就需要进行设置等待时间
导入time模块,time模块是python自带的,无需下载
一、设置等待时间有三种方法:
1、强制等待
time.sleep(time) # 强制等待3秒后,进行下一步操作,也可以是小数,单位为秒
缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间还没到,浪费时间),如果再用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率。
优点:使用简单,可以在调试时使用。
2、隐式等待
driver.implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作。
缺点:使用隐式等待,程序会一直等待页面加载完成,才会执行下一步操作
(有时候页面想要的元素早已加载完成了,但是页面上个别元素还没有加载完成,仍要等待页面全部完成才能执行下一步,使用 也不是很灵活)
优点:隐式等待对整个driver的周期都起作用,所以只要设置一次即可
3、显示等待
from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)
优点:使用相对比较复杂
缺点:等地啊判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率
示例:打开登录页面,以登录按钮为页面加载成功的标志,如果20秒内,定位到登录按钮,就进行登录操作,不再继续等待,如果20秒内还没定位到登录按钮,下一步操作就会报错,并抛出异常。
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expect_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.baidu.com/)
# 加载等等,等待加载页面,根据目标页面特征元素进行判断
locatorLogin = (By.TAG_NAME,"button")
try:
WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locatorLogin))
print("登录页面加载出来啦")
except:
print("页面加载失败")
# 页面加载完成后,进行用例的相应操作
ownerSite = driver.find_element_by_id("ownerSite")
ownerSite.clear()
ownerSite.click()
ownerSite.send_keys(u"今天星期几")
......
......
二、WebDriverWait类
1、until()
until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。
2、until_not()
until_not()方法:直到条件不成立返回为真,是当某元素消失或什么条件不成立则继续执行,等待结束。如果超时,抛出TimeoutException,将message传入异常。
3、excepted_conditions异常处理模块
expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件方法。
三、WebDriverWait自带的方法
is_displayed():判断元素是否被展示出来
is_enable():判断元素是否可操作
is_select():判断元素是否被选择