【selenium】WebElement、WebDriver、三种等待方式

news/发布时间2024/6/7 21:30:29

目录

一、WebElement

1、click()——触发当前元素的点击事件

2、clear()——清空内容

3、sendKeys(...)

4、按键操作,回车 解决button不好定位和点击的情况,用回车去解决

5、getTagName()——获取元素的的标签名

6、getAttribute(当前标签具有的属性名称)——获取属性值()

根据属性名获取元素属性值 常用于断言

7、getText()——获取当前元素的文本值

常用于断言

二、WebDriver

1、get(String url)

2、getCurrentUrl()

3、getTitle()

4、getPageSource()

5、quit()

6、close()

7、navigate对象--导航栏

8、window基本操作

三、三种等待方式

1、硬性等待

2、隐式等待

思考场景:

3、显式等待

 几种方法:

四、【元素是否可见】和【元素是否可点击】和【元素存在】


说明:总结内容均以java演示

一、WebElement

WebElement 常用API:

click、sendKeys、clear、getAttribute、getText、Keys.ENTER(回车)、isDisplayed(是否显示)、isSelected(是否被选中)、isenabled(是否可用)

1、click()——触发当前元素的点击事件

2、clear()——清空内容

3、sendKeys(...)

往文本框一类元素中写入内容 一般获取元素后不要直接sendkeys,先用一个变量接收它

4、按键操作,回车 解决button不好定位和点击的情况,用回车去解决

element.sendKeys(Keys.CONTROL,"a");//ctrl+a 全选
​
element.sendKeys(Keys.CONTROL,"x");//ctrl+x 剪切
​
element.sendKeys(Keys.CONTROL,"c");//ctrl+c 复制
​
element.sendKeys(Keys.CONTROL,"v");//ctrl+v 粘贴
​
element.sendKeys(Keys.ENTER);//回车
​
element.sendKeys(Keys.BACK_SPACE);//删除
​
element.sendKeys(Keys.SPACE);//空格键 

5、getTagName()——获取元素的的标签名

6、getAttribute(当前标签具有的属性名称)——获取属性值()

根据属性名获取元素属性值 常用于断言

7、getText()——获取当前元素的文本值

常用于断言

二、WebDriver

WebDriver 常用API:

getCurrentUrl、getTitle、getPageSource、maximizequit()

1、get(String url)

访问指定url页面

2、getCurrentUrl()

获取当前页面的url地址, 断言常用,比如登录之后判断url

3、getTitle()

获取当前页面的标题,获取网页的标题,原码中title标签的内容

4、getPageSource()

获取当前页面源代码,html

5、quit()

关闭驱动对象以及所有相关的窗口,浏览器关闭了,quit所有网页都关了 driver不能再操作,只能重新创建一个driver

6、close()

关闭当前窗口,闭当前窗口 tab,其他tab和浏览器还在

在原有window窗口基础上,打开一个新的window窗口,需要切换之后,才能关闭新打开的window;不然直接关闭的是最先访问的window

7、navigate对象--导航栏

关于浏览器的基本功能操作,大部分都是由navigate对象提供的,如完成浏览器回退或者导航到指定url页面等操作

8、window基本操作

关于窗口的设置,基本都是由window对象提供的

//窗口最大化  最大化和全屏不一样,实际测试一般在窗口最大化的时候进行
window.maximize();//浏览器全屏
window.fullscreen();//窗口位置
window.getPosition();//窗口大小
window.getSize();

三、三种等待方式

问题:当网速或机器不够顶的时候,操作一个元素时候可能页面还没渲染完,可能会出现如下报错:ElementNotInteractableException: element not interactable((可)交互的)——元素不可交互,原因页面渲染未完毕

解决办法:这时候就需要等待,当有元素不等待会报错、找不到等情况,就需要加等待

1、硬性等待

Thread.sleep(long millis); 硬性等待(强行等待,等待时间过长)sleep(毫秒)

  • 优点:使用简单

  • 缺点:容易造成时间浪费

  • 使用场景:有的浏览器只能用硬性等待,或者有点场景显示/隐式等待都不行

2、隐式等待

在设置的超时时间范围内不断查找元素,直到 找到元素(元素存在)或者超时为止

全局的,就是设置了隐式等待后,每一条查找语句都要去隐式等待

如:设置等待时间为5秒,在第3秒找到元素,不再继续等待

  • 特点:全局,去当前网页的源码html中找,找到了该元素就不等待,一般等待一些常见的元素

  • 设置方式:driver.manage.timeouts().implicitlyWait(long time, TimeUnit unit);

long time:等待时长数字, TimeUnit unit:等待时长单位

 //设置等待时间为5秒  
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  • 优点:相对灵活

  • 缺点:设置针对全局,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待

只能等待元素存在,不能适用条件更复杂的情况,如:元素可点击、元素可见才能操作,

需要注意⚠️隐式等待是查元素是否在html源码存在,存在不一定可点击

思考场景:

比如一个弹窗的关闭按钮❌,页面缩放的时候看不到❌也不能点击,但是这时候html源码中是存在的,如果用隐式等待 能找到,但是实际执行点击操作却不行;

因为从html找到该元素,并不一定能点击,能可见,这时候需要——显式等待

3、显式等待

显式等待通常是我们自定义的一段代码,用来等待某个条件发生后再继续执行后续代码

(如元素存在、元素可点击、元素可见等)

  • 特点:针对每一个元素可以设置不同的等待时间和等待条件,如果超时就报错

  • 使用方式:

WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectCondition.方法(元素路径));WebDriverWait(driver,5)------表示:等待5秒,还有第三个参数,
不传的话默认500毫秒,即:每0.5秒轮训查找一次
  • 优点: 

    该方式不是全局设置,因此特定需要等待的元素可以这样处理,推荐优先使用这一种方法。
 几种方法:
方法等待条件
presenceOfElementLocated==和隐式等待效果一样,是否在源码中存在页面元素在页面中存在
visibilityOfElementLocated页面元素在页面存在并且可见
elementToBeClickable页面元素是否在页面上可被单击
urlContains("url"))等待url是否包含,返回boolean类型
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='layui-layer-setwin']//a")));
element.click();

四、【元素是否可见】和【元素是否可点击】和【元素存在】

不可见一定不可点击,可见不一定可点击(比如有可能被弹窗盖住了...),可点击一定可见

存在不一定可见,可见一定存在

android的toast,就是存在但是不可见:

presenceOfElementLocated定位到,visibilityOfElementLocated定位不到

假设:要判断某个元素超过指定的个数,就可以执行下面的操作。

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

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

相关文章

STM32面试相关问题

总结以下之前面试时遇到的一些问题,以便回顾起来学习! 技术面试一般都是看项目提问的,可能会问: STM32的内核型号有哪些? 回答:ARM Cortex-M0,M0,M3, M4和M7内核&#xff0…

Java Swing游戏开发学习2

跟随大佬教程继续,图片资源,视频简介有下载链接。 这个文章是看视频教程写的,不算原创。有条件的可以去油管搜索RyiSnow,是一个游戏开发视频制作up主,讲解的非常基础,可以边看边实践,增加对Java…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中,实时通讯已经变得至关重要。无论是在线游戏的即时交流,还是团队协作中的实时消息传递,都需要强大的实时通讯功能来支持。而在前端开发中,利用Socket.io这一强大的工具库,实现实时通讯功…

统计图雷达图绘制方法

统计图雷达图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制,饼图环形图绘制较难。 还有一种雷达图的绘制也较难,今提供雷达图的绘制方法供参考。 本方法采用C语言的最基本功能: &am…

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过

一、什么是 点空格点 绕过 顾名思义,将 test.php 改为 test.php. . ,观察到后缀名php后多出了 点空格点。那么 点空格点 是如何进行绕过的,在什么情况下可以使用,让我们结合题目讲解。 二、代码审计 1、查看题目源代码上半部分&…

MySQL

1 数据库简介 1.1 简介 数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。 数据库管理系统(DataBase Management System&…

Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决

Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决 一、MySQL数据库主从集群概念 MySQL数据库主从集群是一种高可用性和读写分离的数据库架构,它基于MySQL的复制(Replication)技术来同步数据。在主…

三防平板丨平板终端丨加固平板丨户外勘测应用

随着科技的不断发展,现代勘测业也在不断升级。相较于传统的勘测设备,三防平板在户外勘测中有着广泛的应用。那么,三防平板在户外勘测中究竟有哪些优势呢? 首先,三防平板具备极强的防水、防尘、防摔能力。在野外勘测中&…

【JVM】打破双亲委派机制

📝个人主页:五敷有你 🔥系列专栏:JVM ⛺️稳中求进,晒太阳 打破双亲委派机制 打破双亲委派机制三种方法 自定义类加载器 ClassLoader包含了四个核心方法 //由类加载器子类实现,获取二进制数据调用…

MyBatis框架-缓存

MyBatis缓存 简介 什么是缓存 [ Cache ]? 存在内存中的临时数据。将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率&#…

超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)

超市售货管理小程序目录 目录 基于微信小程序的超市售货管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 (1)商品管理 (2)出入库管理 (3)公告管理 …

使用向量数据库pinecone构建应用04:混合搜索 Hybrid Search

Building Applications with Vector Databases 下面是这门课的学习笔记:https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

dell戴尔电脑灵越系列Inspiron 15 3520原厂Win11系统中文版/英文版

Dell戴尔笔记本灵越3520原装出厂Windows11系统包,恢复出厂开箱预装OEM系统 链接:https://pan.baidu.com/s/1mMOAnvXz5NCDO_KImHR5gQ?pwd3nvw 提取码:3nvw 原厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、Office办公软件、MyD…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活动文件‘ terminated with exit code -1

更改tasks.json文件里面的type为shell 选择g 选择g,然后点回到text.c,按下F5. 得到结果。 文中内容参考: 从零开始手把手教你配置属于你的VS Code_哔哩哔哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

制作商品说明书:如何突出产品特点和优势?

在当今高度竞争的市场环境下,一个优秀的商品说明书不仅是传递产品信息的桥梁,更是凸显产品特点和优势、吸引消费者注意力的关键。那么,如何在商品说明书中有效地突出产品的特点和优势呢?LookLook同学将从以下几个方面进行探讨。 |…

js设计模式:外观模式

作用: 将复杂的功能封装成可以简单调用的方法,无需知道内部的具体逻辑,只需要知道怎么去使用 类似于一把枪,你可以不知道内部的枪机,击发机,复进簧,枪管,导气装置,弹夹是怎么合作配合完成发射和自动填弹,你只需要知道你扣动扳机就能完成这一系列复杂的操作,而那个扳机就是外观…

【C++初阶】系统实现日期类

目录 一.运算符重载实现各个接口 1.小于 (d1)<> 2.等于 (d1d2) 3.小于等于&#xff08;d1<d2&#xff09; 4.大于&#xff08;d1>d2&#xff09; 5.大于等于&#xff08;d1>d2&#xff09; 6.不等于&#xff08;d1!d2&#xff09; 7.日期天数 (1) 算…

【机器学习的主要任务和应用领域】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱 简述概要 了解机器学习的主要任务和应用领域 知识图谱 机器学习的主要任务可以分为监督学习、无监督学习和半监督学习。 监督学习&#xff1a;这是机器学习中最为常见的一类任务&#xff0c;基于已知类…

数据安全治理实践路线(上)

基于以上数据安全治理实践理念&#xff0c;可以按照自顶向下和自底向上相结合的思路推进实践过程。一方面&#xff0c;组织自顶向下,以数据安全战略规划为指导,以规划、建设、运营、优化为主线&#xff0c;围绕构建数据安全治理体系这一核心&#xff0c;从组织架构、制度流程、…

Gitea提交代码自动触发Jenkins构建版本

提交代码自动触发Jenkins构建版本 1. 下载Generic Webhook Trigger 2. 配置Generic Webhook Trigger http://JENKINS_URL/generic-webhook-trigger/invoke?tokenruoyi-ui-8978456465 http://192.168.0.136:8090 为jenkisn地址&#xff0c;/generic-webhook-trigger/invoke?…
推荐文章