WebDriverWait类提供了显式等待和隐式等待,显式等待的等待时间是固定的,固定了10s就必须等待10s,隐式等待的等待时间是个范围,例如最大10s,那么如果在3s的时候程序达到预期的结果,那么就不在继续后面的7秒,直接进入下一步操作,而如果超出10s还没有相应,程序就会报出相应的错误。
一、显式等待和隐式等待
WebDriverWait()是显式等待,等待的时间是固定的
implicitly_wait()方法是隐式等待,用来设置超时,一般把implicitly_wait()方法调用在加载测试地址后,等待所测试的应用程序加载。
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://baidu.com')
driver.implicitly_wait(30)
二、介绍显式等待的几种常用的方法
1、element_to_be_clickable(locator)等待元素可见且可点击后,再进行操作,元素在指定时间内不可见就引发异常TimeoutException,源码截图如下:
返回的是元素element本身
2、text_to_be_present_in_element(locator,text)验证相应位置的文本信息,返回布尔。源码截图如下:
3、visibility_of_element_located(locator)指定位置元素可见后再执行其他操作,返回元素本身,源码截图如下:
二、以百度为例,编写代码验证以上三个方法。
webdriver提供WebDriverWait类和expected_conditions模块来执行一个显式的等待
#coding=utf-8
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://baidu.com')
driver.implicitly_wait(30)
#1.............................
#元素是否出现可点 ,参数是locator
# xinwei=WebDriverWait(driver,5).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'.mnav')))
# xinwei.click()
# driver.quit()
#2.............................
#验证相应位置元素的文本信息,返回值是布尔 俩参数locator text
# #以验证登录的错误信息为例
# driver.find_element_by_xpath(".//*[@id='u1']/a[7]").click()
# driver.find_element_by_id('TANGRAM__PSP_10__userName').send_keys('123')
# driver.find_element_by_id('TANGRAM__PSP_10__submit').click()
# bo=WebDriverWait(driver,5).until(expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,'#TANGRAM__PSP_10__error'),U'请您输入密码'))
# print bo# 打印结果:True
# driver.quit()
#3...............................
# 元素是否可见,可见后操作 参数是locator
# sou=WebDriverWait(driver,5).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,'#kw')))
# sou.send_keys('java')
# time.sleep(2)
# driver.quit()
三、解析代码中的WebDriverWait(driver,5).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,'#kw')))
WebDriverWait(driver,5)是实例化WebDriverWait类,等待是显示等待,时间是5秒
.until是实例化的类调用类的方法
expected_conditions是个模块.py,后面的.visibility_of_element_located是模块调用他的各个方法