Selenium自动化测试—设置元素等待

selenium中有三种时间等待:

  • 强制等待:sleep
  • 隐式等待:implicitly_wait
  • 显示等待:WebDriverWait

1. sleep【文末有配套视频教程和免费的测试资料】

让程序暂停运行一定时间,等待时间到达后继续运行。

使用sleep,需先导入time模块,import time, 然后使用time.sleep()来让程序等待多久。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 等待3s
time.sleep(3)
# 点击新闻链接
driver.find_element_by_link_text("新闻").click()

2. WebDriverWait

等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常TimeoutException。

WebDriverWait一般和until()和until_not()配合使用:

  • until() 当某元素出现或什么条件成立则继续执行
  • until_not 当某元素消失或什么条件不成立则继续执

WebDriverWait(driver, timeout, poll_frequency=0.5,

ignored_exceptions=None)

  • driver: 传入WebDriver实例;
  • timeout:指最大超时时间,默认单位为秒;
  • poll_frequency:调用until或until_not方法,每隔一定时间不断尝试是否能找到页面元素,默认间隔是0.5s,可自行调整间隔时间。
  • ignored_exceptions:超时后的异常信息,默认情况下NoSuchElementException 异常。

使用WebDriverWait,需要先导入WebDriverWait模块。

from selenium.webdriver.support.ui import WebDriverWait

我们使用WebDriverWait方式来定位百度页面的新闻链接,

代码如下:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 设置显式等待,超时时长最大为 5s,每隔0.5s查找元素一次
element = WebDriverWait(driver,5).until(
lambda x: x.find_element_by_link_text('新闻'))
element.click()

注意:until或until_not中的method参数一定要是可以调用的对象,即这个对象一定有 __call__方法,否则会抛出异常。

例如:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 设置显式超时时长最大为5s,每隔0.5s查到元素一次
element = WebDriverWait(driver,5).until(driver.find_element_by_link_text('新闻'))
element.click()

运行的结果是报错的:

Traceback (most recent call last):
File "C:/Users/96984/PycharmProjects/vivi_python/selenium_vivi/radio.py", line 7, in <module>
element = WebDriverWait(driver,5).until(driver.find_element_by_link_text('新闻'))
File "C:\Users\96984\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until
value = method(self._driver)
TypeError: 'WebElement' object is not callable

使用expected_conditions,需先导入。

from selenium.webdriver.support import expected_conditions as EC

以下是常用的expected_conditions方法:

我们以presence_of_element_located这个方法为例,看下WebDriverWait怎么和expected_conditions配合使用。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 设置显式等待,超时时长最大为5s,每隔0.5s查找元素一次
element = WebDriverWait(driver,5).until(EC.presence_of_element_located(('id','kw')))
element.send_keys('vivi')

最后总结下三种元素等待的优缺点:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处:

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

 

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

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

相关文章

SpringMVC文件上传(CommonsMultipartResolver)

以上传一个图片为例 添加依赖 <!--文件上传--> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version> </dependency> 配置文件上传解析器 <…

C++内存管理和简单模板

文章目录 目录 文章目录 前言 一.内存管理 1.new delete操作符 对内置类型 对自定义类型 2.operator new与operator delete函数 3.定位new 二.模板 1.函数模板 2.类模板 前言 C是一种通用编程语言&#xff0c;支持面向对象、过程性和泛型编程。在C中&#xff0c;内…

探索 hasOwnProperty:处理对象属性的关键(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

fo安方的个人、博客和专栏

&#x1f49d;&#x1f49d;各位领导好&#xff0c;欢迎光临&#x1f49d;&#x1f49d; ☁️☁️slogon&#xff1a;云想衣裳花想容&#xff0c;春风扶栏露华容☁️☁️ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;fo安方的博客&#x1f4a5;&#x1f4a5; &#x1f49e;…

GIS真的是天坑专业吗?

是&#xff0c;也不是。 首先说是&#xff0c;GIS到底坑在哪&#xff1f; 1、专业定位不清晰&#xff0c;具有很强的误导性 听过很多学生抱怨&#xff0c;关于GIS专业&#xff0c;大家觉得最坑的地方&#xff0c;在于一开始在选专业的时候&#xff0c;以为这个专业跟计算机专…

[Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

前面通过deployment结合service来部署无状态的应用,下面来讲解通过satefulSet结合service来部署有状态的应用 一.StatefulSet详解 1.有状态和无状态区别 无状态: 无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable) 有状态: 有状态(stateful)、宠物(pet)…

2024年免费服务器活动整理汇总

随着科技的发展&#xff0c;服务器在各行各业的应用越来越广泛&#xff0c;而免费服务器活动也成为了许多企业和个人关注的焦点。目前有许多免费服务器活动可供选择&#xff0c;本文将为大家整理汇总免费服务器活动&#xff0c;帮助大家更好地了解和参与。 一、腾讯云免费服务器…

使用主题模型和古老的人类推理进行无监督文本分类

一、说明 我在日常工作中不断遇到的一项挑战是在无法访问黄金标准标签的情况下标记文本数据。这绝不是一项微不足道的任务&#xff0c;在本文中&#xff0c;我将向您展示一种相对准确地完成此任务的方法&#xff0c;同时保持管道的可解释性和易于调整。 一些读者可能已经开始考…

(超详细)5-YOLOV5改进-添加A2Attention注意力机制

1、在yolov5/models下面新建一个A2Attention.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import numpy as np import torch from torch import nn from torch.nn import init from torch.nn import functional as Fclass DoubleAttention(nn.Module):def …

MySQL 8查询语句之查询所有字段、特定字段、去除重复字段、Where判断条件

《MySQL 8创建数据库、数据表、插入数据并且查询数据》里边有我使用到的数据。 再使用下方的语句补充一些数据&#xff1a; insert into Bookbought.bookuser(id,username,userphone,userage,sex,userpassword) values (11,Book Break,22245678911,18,male,good#111); insert…

啥,凭什么Python中函数的返回值可以有多个?

你好&#xff0c;我是安然无虞。 文章目录 函数函数定义格式函数调用默认参数和变长参数默认参数变长参数 变量的作用域 函数 编程语言中的函数&#xff0c;是一段可以被重复使用的代码片段&#xff0c;使用函数能够减少冗余的代码。 函数定义格式 def 函数名(形参列表):函数…

行为型设计模式——策略模式

策略模式 策略模式非常简单&#xff0c;只需要将策略或者某个算法定义成一个类&#xff0c;然后传给需要使用的对象即可。**定义&#xff1a;**该模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算…