selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

目录

强制等待:sleep()

隐式等待:implicitly_wait()

显示等待:WebDriverWait()

与until()或者until_not()方法结合使用

WebDriverWait与expected_conditions结合使用

显示等待,自定义等待条件


强制等待:sleep()

import time
sleep(5)  #等待5秒

设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。
缺点:不智能,使用太多的sleep会影响脚本运行速度。

隐式等待:implicitly_wait()

driver.implicitly_wait(10) #隐式等待10秒

由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

显示等待:WebDriverWait()

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块
  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔步长,默认为0.5s
  • ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

与until()或者until_not()方法结合使用

WebDriverWait(driver,10).until(method,message="")
#调用该方法提供的驱动程序作为参数,直到返回值为TrueWebDriverWait(driver,10).until_not(method,message="")
#调用该方法提供的驱动程序作为参数,直到返回值为False

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False.

WebDriverWait与expected_conditions结合使用

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Bywait = WebDriverWait(driver,10,0.5)
element =waite.until(EC.presence_of_element_located((By.ID,"kw"),message="")
# 此处注意,如果省略message=“”,则By.ID外面是两层()

expected_conditions类提供的预期条件判断的方法

方法

说明

title_is

判断当前页面的 title 是否完全等于(==)预期字符串,返回布尔值

title_contains

判断当前页面的 title 是否包含预期字符串,返回布尔值

presence_of_element_located

判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见

visibility_of_element_located

判断元素是否可见(可见代表元素非隐藏,并且元素宽和高都不等于 0)

visibility_of

同上一方法,只是上一方法参数为locator,这个方法参数是 定位后的元素

presence_of_all_elements_located

判断是否至少有 1 个元素存在于 dom 树中。举例:如果页面上有 n 个元素的 class 都是’wp’,那么只要有 1 个元素存在,这个方法就返回 True

text_to_be_present_in_element

判断某个元素中的 text 是否 包含 了预期的字符串

text_to_be_present_in_element_value

判断某个元素中的 value 属性是否包含 了预期的字符串

frame_to_be_available_and_switch_to_it

判断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False

invisibility_of_element_located

判断某个元素中是否不存在于dom树或不可见

element_to_be_clickable

判断某个元素中是否可见并且可点击

staleness_of

等某个元素从 dom 树中移除,注意,这个方法也是返回 True或 False

element_to_be_selected

判断某个元素是否被选中了,一般用在下拉列表

element_selection_state_to_be

判断某个元素的选中状态是否符合预期

element_located_selection_state_to_be

跟上面的方法作用一样,只是上面的方法传入定位到的 element,而这个方法传入 locator

alert_is_present

判断页面上是否存在 alert

显示等待,自定义等待条件

#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14matlab数理统计 多项式的求根和根据根求多项式(matlab程序)

1.简述 分享一下通过多种不同的方法计算多项式的根。 数值根 使用代换法求根 特定区间内的根 符号根 数值根 roots 函数用于计算系数向量表示的单变量多项式的根。 例如,创建一个向量以表示多项式 x2−x−6,然后计算多项式的根。 p [1 -1 -6]; r …

Prometheus节点监控及hadoop集群监控

背景:我司长期苦于CM6.3后收费问题,这次领导痛下决心,决定要自己开发一套大数据管理平台,监控就是其中一部分,本文主要阐述,话不多说,先看效果。 1.监控组件Prometheus 1.1上传Prometheus包 [root@bigdb01 ~]# rsync root@172.16.1.247/data/fan/install/native/09.…

uni.app如何检测小程序版本更新以及上线后如何关闭全局打印

uni.app如何检测小程序版本更新以及上线后如何关闭全局打印 检测小程序版本更新关闭全局打印 检测小程序版本更新 App.vue 入口文件中 添加如下代码 //检测小程序版本是否更新const updateManager wx.getUpdateManager()updateManager.onCheckForUpdate(function(res) {// 请求…

DuiLib中的list控件以及ListContainerElement控件

文章目录 前言1、创建list控件2、创建 ListContainerElement 元素,并添加到 List 控件中,这里的ListContainerElement用xml来表示3、在 ListContainerElement 元素中添加子控件 1、List控件2、ListContainerElement控件 前言 在 Duilib 中,List 控件用于…

【批量将视频转为图像序列】

批量将视频转为图像序列 代码如下,代码中带有解释: # 导入所需要的库 import cv2 import os import numpy as np# 多个视频所在的路径 datasets_path ["/home/y/Code/数据集/1/007f.mp4","/home/y/Code/数据集/1/05f.mp4","/…

UI界面中的图标设计趋势与最佳实践

作为UI设计师,在日常的工作中,避免不了做图标规范。今天跟大家聊一聊,UI设计中的图标设计。 规范的重要性不用多说了,没有规范多个设计师绘制的图标会有很多差异,描边粗细、角度、圆角度等等。今天的文章和大家聊一下…

Stable Diffusion - 编辑生成 (OpenPose Editor) 相同人物姿势的图像

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131818943 OpenPose Editor 是 Stable Diffusion 的扩展插件,可以自定义人物的姿势和表情,以及生成深度、法线和边缘图等信…

vue 集成tinymce2实现图片,视频以及文件的上传

vue 集成tinymce2实现图片,视频以及文件的上传 1. 安装插件 (1)安装tinymce npm install tinymce -S (2)安装tinymce-vue npm install tinymce/tinymce-vue3.0.1 -S 2. 复制静态文件到public目录 资源下载路径&…

Django入门

前言 早就想入门后端了,自己倒是用过Flask,对于常规网站来说Django更完善一些。稍微学习下,能够做一些简单业务处理就好啦。 跟着官方文档学习的,这里做一下记录。纯纯拿来用,不去研究原理与架构,无脑跟着…

17 | 从后端到前端:微服务后,前端如何设计?

微服务架构通常采用前后端分离的设计方式。作为企业级的中台,在完成单体应用拆分和微服务建设后,前端项目团队会同时面对多个中台微服务项目团队,这时候的前端人员就犹如维修电工一样了。 面对如此多的微服务暴露出来的 API 服务&#xff0c…

记一次从溯源分析到云服务器接管

起因是我这个臭运维的在给客户做常态化的溯源分析,好巧不巧发现了一个IP扔到奇安信威胁情报平台看一下,发现部署了大量的服务,且为阿里云服务器。 看到这里,我大胆的推测,云上的信息中心,客户花点钱&#x…

【产品设计】通用后台管理系统需求及原型设计

后台管理系统,会根据不同公司、不同业务的要求做出改变。 网上很多系统的参考多数为业务中台,过于带有业务色彩。做过三四个后台管理系统,从中总结了一个通用的功能和需求设计模版,供大家参考。本文适用于0-2岁的产品经理做基础功…

JVM中类加载的过程

文章目录 一、类加载是什么二、类加载过程1.加载2.验证3.准备4.解析5.初始化 三、什么时候进行类加载四、双亲委派模型1.三大类加载器2.加载过程 总 一、类加载是什么 把.class文件加载到内存中,得到类对象的过程。 二、类加载过程 1.加载 找到.class文件&#xff…

【问题解决】VSCode 远程安装插件特别慢

【问题描述】 我要配置 VSCode WSL 的开发环境,需要在 WSL 里也装上 C、CMake 系列的插件,如下图的直接下载方式特别慢: 【解决方法】 先去网站下载插件:https://marketplace.visualstudio.com/,后缀名:…

算法训练营第四十一天||● 343. 整数拆分 96.不同的二叉搜索树

● 343. 整数拆分 这道有难度,不看题解肯定 想不到用动态规划,看了题解后能大概明白,但还不是很清晰,不太明白递推公式中强调的与dp[i]还要比较一次,也不明白第一次去最大最的那个比较 需要后面继续看 动规五部曲&a…

无涯教程-Javascript - Switch语句

从JavaScript 1.2开始,您可以使用 switch 语句来处理这种情况,它比重复的 if ... else if 语句更有效。 流程图 以下流程图说明了switch-case语句的工作原理。 switch 语句的目的是给出一个要求值的表达式,并根据表达式的值执行多个不同的语…

酷开科技大屏营销,撬动营销新增量

5G、人工智能、元宇宙等技术的发展促使数字营销的内容、渠道、传播方式发生了一系列变化;存量竞争下,增长成为企业更加迫切、更具挑战的课题,品牌营销活动越来越围绕“生意增长”和“提效转化”的目标展开。 如今的市场环境下,产…

PID算法

PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。 需要将一个物理量保持在稳定状态(比如维持平衡,温度、转速的…

C#图片处理

查找图片所在位置 原理:使用OpenCvSharp对比查找小图片在大图片上的位置 private static System.Drawing.Point Find(Mat BackGround, Mat Identify, double threshold 0.8) {using (Mat res new Mat(BackGround.Rows - Identify.Rows 1, BackGround.Cols - Iden…

为什么项目可见性难以实现?该如何提高?

在项目和专业服务管理中,失败有时难以避免。沟通不足和需求定义不明确被认为是造成失败的最大原因,这意味着项目可见性和信息流动至关重要。 什么是项目可见性? 项目可见性是组织项目相关信息的方式,以便所有团队成员、项目经理…