首页 > 其他分享 >Selenium里的三种等待方式

Selenium里的三种等待方式

时间:2024-11-04 23:41:23浏览次数:1  
标签:Selenium self driver ID 三种 等待 find wait

在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,由于网络延迟、浏览器卡顿或者异步加载等原因,会出现元素加载超时的情况,如果超出时间仍然定位不到元素,就会抛出异常,中止脚本执行。因此,Selenium提供了三种等待的方式来避免这种偶然失败。下面介绍这三种等待方式。

一、time.sleep(固定等待)

可以通过该方法自定义等待时间,依照该设定的时间进行等待

1、导入该模块
from time import sleep
2、代码示例

下方示例在在百度页面输入关键词并点击搜索,每次加载时间,在输入之后和搜索之后分别等待2s查看效果。

self.driver.get("https://www.baidu.com")#加载百度页面
input=self.driver.find_element(By.ID,"kw")#定位输入框元素
input.send_keys("selenium")#输入搜索关键词
sleep(2)#自定义等待时间为2s
button=self.driver.find_element(By.ID,"su")#定位到按钮
button.click()#点击查找
sleep(2)#强制等待2s
self.driver.quit()

二、implicitly_wait(隐式等待)

隐式等待实际是设置了一个最长等待时间a,如果在规定时间b内页面加载完成,则执行下一步,否则一直等待该最长时间a结束,然后执行下一步。
注:隐式等待是全局等待,对整个driver周期都起作用,在最开始设置一次就可以。
代码示例

self.driver.implicitly_wait(10)#设置最长等待时长为10s
self.driver.get("https://www.baidu.com")#加载百度页面
self.driver.find_element(By.ID, "kw").send_keys("python")#输入关键词
self.driver.find_element(By.ID,"su").click()#点击查找

三、WebDriverWait(显式等待)

显式等待是一种动态的等待方式,每隔一段时间检查一下页面是否达到等待条件,条件成立则执行下一步,若到达设置的最长等待时间条件仍未满足,则抛出异常。
Selenium提供了WebDriverWait类,用于针对指定的元素设置等待。

1、导入WebDriverWait类的路径
from selenium.webdriver.support.wait import WebDriverWait
2、WebDriverWait类参数
参数 参数说明
1 driver 传入WebDriver实例
2 timeout 超时时间,等待的最长时间
3 poll_frequency 调用until或until_not中的方法的时间间隔,默认是0.5s
4 ignored_expections 忽略的异常,可以设置该异常是否要忽略

常用的是前两个参数,后两个参数一般是默认的设置。
实例化WebDriver对象示例:

wait=EC(self.driver,2)#实例化WebDriverWait类对象,在2s内每隔0.5s检查一次
3、WebDriver模块的两个方法

(1)until(self,method,message:str=""):返回true则判断成功
(2)until_not(self,method,message:str=""):返回false则判断成功
这两个方法用于设置等待条件来判断是否执行下一步。

参数 参数说明
1 method 等待条件,在一定等待时间内,每隔一段时间调用这个传入的方法,直到该方法返回值不是False(until)/True(until_not)
2 message 如果超时,抛出TimeoutExpection,将message传入异常

until中的等待条件通常与expected_conditions连用,该模块内部封装了多个判断方法,比如tite_is():精准匹配页面标题,匹配成功返回true,失败返回false

4、代码示例
self.driver.get("https://www.baidu.com")  # 加载百度页面
wait=WebDriverWait(self.driver,2)#实例化WebDriverWait类对象,每隔0.5s检查一次
wait.until(EC.title_is('百度一下,你就知道'))#每隔一段时间调用title_is(),直到该标题为’百度一下,你就知道‘
self.driver.find_element(By.ID, "kw").send_keys("python")
self.driver.find_element(By.ID, "su").click()

四、总代码

点击查看代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep

class TestCase():
    def __init__(self):
        self.driver=webdriver.Edge()#驱动浏览器
    
    #测试固定等待sleep()
    def test_sleep(self):
        self.driver.get("https://www.baidu.com")  # 加载百度页面
        input=self.driver.find_element(By.ID,"kw")#定位输入框元素
        input.send_keys("selenium")#输入搜索关键词
        sleep(2)#自定义等待时间为2s
        button=self.driver.find_element(By.ID,"su")#定位到按钮
        button.click()#点击查找
        sleep(2)#强制等待2s
        self.driver.quit()
    
    #测试显式等待
    def test_implicity(self):
        self.driver.implicitly_wait(10)#设置最长等待时长为10s
        self.driver.get("https://www.baidu.com")#加载百度页面
        self.driver.find_element(By.ID, "kw").send_keys("python")
        self.driver.find_element(By.ID,"su").click()

    #测试隐式等待
    def test_wait(self):
        self.driver.get("https://www.baidu.com")  # 加载百度页面
        wait=WebDriverWait(self.driver,2)#实例化WebDriverWait类对象,每隔0.5s检查一次
        wait.until(EC.title_is('百度一下,你就知道'))#每隔一段时间调用title_is(),直到该标题为’百度一下,你就知道‘
        self.driver.find_element(By.ID, "kw").send_keys("python")
        self.driver.find_element(By.ID, "su").click()

if __name__=="__main__":
    case=TestCase()#实例化TestCase对象
    #case.test_sleep()#调用方法
    #case.test_implicity()
    case.test_wait()

标签:Selenium,self,driver,ID,三种,等待,find,wait
From: https://www.cnblogs.com/jongjongjong/p/18521854

相关文章

  • 1097. 游戏玩法分析 V#三种方法 推荐方法3 次方法1最短
    目录题目和要求1.题目代码2.解题分析图览方法1:avg条件无join代码最短的方法方法2:joinavg条件(joinonand效率很高)方法3:与方法1一样灵活,但是效率更高3.难点分析4.答案代码以及pretty表格解释5.关键总结题目和要求表:Activity+--------------+......
  • Springboot+MyBatis批量插入数据的三种方式
    1.背景介绍在开发过程中,我们经常会遇到往数据库表中插入大量数据的场景,比如excel批量导入数据。那么该如何快速地插入数据呢?我们可以考虑使用批量插入来实现,实测100000条数据添加,后附具体实现代码。2.方案介绍2.1第一种方案,用for语句循环插入(不推荐)用一个for循环,把数据......
  • redis的三种特殊数据类型
    Bitmap作用?Bitmap位图,都是操作二进制位来进行记录,就只有0和1两个状态。当一个事务只有两种状态的时候可以使用bitmap。使用场景?签到打卡,将签到设置为1,未签到设置为0。可以消耗极小的内存记录下打卡的天数,和快速统计。HyperLogLog作用?用于统计基数。那么......
  • 【Orange Pi 5 Linux 5.x 内核编程】-等待队列(WaitQueue)
    等待队列(WaitQueue)文章目录等待队列(WaitQueue)1、等待队列介绍2、等待队列初始化2.1静态初始化2.2动态初始化3、队列任务排队3.1wait_event3.2wait_event_timeout3.3wait_event_cmd3.4wait_event_interruptible3.5wait_event_interruptible_ti......
  • 手撕快排的三种方法:让面试官对你刮目相看
    快来参与讨论......
  • Hadoop-MapReduce任务三种运行开发模式
    1、local模式数据在本地,代码也在本地,使用本机的电脑的资源运行我们的MR输入和输出路径指的都是本地路径,运行时耗费的资源也是本地资源。2、local模式2数据在hdfs上,代码在本地,使用本机的电脑的资源运行我们的MRSystem.setProperty("HADOOP_USER_NAME","root");......
  • 使用Python和Selenium获取BOOS直聘职位信息
    文章目录引言环境准备网页分析代码解析1.导入必要的库2.定义爬虫类3.启动浏览器4.主要爬取逻辑5.提取职位信息6.保存数据到CSV7.初始化CSV文件8.清理和整理CSV数据9.全部代码结语引言在当今就业比较困难,很多人对于要投递的岗位相关行业信息不了解,如果有招......
  • 告别龟速加载:三种压缩算法让你的网站瞬间提速!
    三种压缩算法,让你的网站飞起来!!!2万字深度长文,让你一次看个爽!!!欢迎订阅专栏,永不收费,hacker精神,更快获得第一手优质博文!!!前言在当今快节奏的互联网世界,用户对网站加载速度的要求越来越高。一个加载缓慢的网站不仅会损害用户体验,还会影响搜索引擎排名,最终导致流量和转......
  • 615. 平均工资:部门与公司比较#三种方法
    目录题目和要求1.题目代码2.解题分析图览方法1:方法2:方法3:3.难点分析4.答案代码以及pretty表格解释5.关键总结题目和要求表:Salary+-------------+------+|列名|类型|+-------------+------+|id|int||employee_id|int||a......
  • python selenium 操作唯品会
    fromseleniumimportwebdriverimporttimefromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.common.byimportByservice=Service(executable_path="D:\\chromedriver.exe")chrome_options=webdriver.ChromeOptions()......