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秒

备注:设置等待时间30s,页面上的元素5s后出现,只等待5s。不会等待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属性值

 

 

 
 
posted @ 2021-11-26 11:56  奔跑在路上you  阅读(105)  评论(0编辑  收藏  举报