Selenium(10):等待操作&练习selenium相关的html链接&EC模块断言
等待操作
为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,selenium提供三种等待时间设置方式。
练习selenium相关的html链接地址:
链接:https://pan.baidu.com/s/1K6eddRm7zdCIrRJjLR33Og
提取码:s4e8
EC模块断言
https://www.cnblogs.com/dream66/p/12665563.html
三种等待时间设置方式
1、固定等待
sleep():固定休眠时间设置,python的time包里提供了休眠方法sleep,导入包后就能使用;sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数
导入包:import time
time.sleep(2) 固定等待2秒
time.sleep(0.5) 固定等待0.5秒
代码如下:
import os import time from selenium import webdriver from selenium.webdriver.common.by import By current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径 driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径 pages_path = os.path.join(current_path,'../pages/wait.html') # 本地网页路径 driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等 driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http:// driver.find_element(By.XPATH,'//button').click() time.sleep(5) # 固定等待 优点:简单易用 缺点:不适合网页中元素加载时间不定的情况 value = driver.find_element(By.XPATH,'//div').get_attribute('class') print( value )
2、隐式等待
implicitlyWait():implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待
隐式等待语法:driver.implicitly_wait(30) 全局设置隐式等待30秒
import os from selenium import webdriver from selenium.webdriver.common.by import By current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径 driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径 pages_path = os.path.join(current_path,'../pages/wait.html') # 本地网页路径 driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等 # 隐式等待,全局设置(它之后的所有find_element都会生效) # 运行机制:每隔0.5秒检查页面是否出现元素,如果出现,则识别成功进行后续操作 # 如果设置时间都没找到元素,则报错 driver.implicitly_wait(30) driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http:// driver.find_element(By.XPATH,'//button').click() value = driver.find_element(By.XPATH,'//div').get_attribute('class') # 获取class的属性值 print( value )
3、显示等待
WebDriverWait(): 显示等待,针对单个元素生效
前置条件:导入显示等待包 from selenium.webdriver.support.ui import WebDriverWait
语法格式如下:WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exceptions=None)
driver:WebDriver的驱动程序(IE,火狐,谷歌或远程)
timeout:最长超时时间,默认以秒为单位
poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)
ignore_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
引入WebDriverWait类
element_obj = WebDriverWait(driver,30,0.5).until(lambda dr:dr.find_element(By.XPATH,'//div'))
代码如下:
import os from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait # 显示等待类 current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径 driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径 pages_path = os.path.join(current_path,'../pages/wait.html') # 本地网页路径 driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等 driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http:// driver.find_element(By.XPATH,'//button').click() # 显示等待:1、单个元素设置生效 2、页面扫描时间可以自定义配置 element_obj = WebDriverWait(driver,30,0.5).until(lambda dr:dr.find_element(By.XPATH,'//div')) print( element_obj.get_attribute('class') ) # 获取class属性值