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

目录

一、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.mzph.cn/news/698149.shtml

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

相关文章

SpringBoot对于SpringMVC的支持

创建项目 版本说明这里使用的 SpringBoot 2.0.0.Release SpringBoot对于SpringMVC的支持 在之前的开发中很多场景下使用的是基于xml配置文件或者是Java配置类的方式来进行SpringMVC的配置。一般来讲,初始的步骤如下所示 1、初始化SpringMVC的DispatcherServlet2、…

设计模式-工厂方法模式(C++)

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的对象创建过程延迟到子类中。这种模式解耦了具体产品的创建过程,使得系统更加灵活和可扩展。 下面是一个使用 C…

pytest结合Allure生成测试报告

文章目录 1.Allure配置安装2.使用基本命令报告美化1.**前置条件**2.**用例步骤****3.标题和描述****4.用例优先级**3.进阶用法allure+parametrize参数化parametrize+idsparametrize+@allure.title()4.动态化参数5.环境信息**方式一****方式二**6.用例失败截图1.Allure配置安装 …

Jmeter基础(2) 目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前,需要先对工具的目录有些了解,也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

代码随想录 | 216.组合总和III● 17.电话号码的字母组合

216.组合总和III 思路: 和77. 组合思路一致,只不过多了一个cursum用来记录总和。 代码: class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:path []result []def backtracking( k, n, start, cursum):i…

web安全学习笔记【15】——信息打点(5)

信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件 #知识点: 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指…

基于springboot财务管理系统源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

【C语言必知必会 | 第一篇】C语言入门,这一篇就够了

引言 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第一篇,带你初步了解C语言,为之后的学习打下基础 文章目录 1️⃣发展历史2️⃣语言特点3️⃣语…

论文精读--GPT2

被BERT敲打了,但是仍然坚持解码器架构 Abstract Natural language processing tasks, such as question answering, machine translation, reading comprehension, and summarization, are typically approached with supervised learning on taskspecific dataset…

使用代理IP技术实现爬虫同步获取和保存

概述 在网络爬虫中,使用代理IP技术可以有效地提高爬取数据的效率和稳定性。本文将介绍如何在爬虫中同步获取和保存数据,并结合代理IP技术,以提高爬取效率。 正文 代理IP技术是一种常用的网络爬虫技术,通过代理服务器转发请求&a…

idea和jdk之间对应的版本(idea支持的jdk版本)

idea如果和jdk版本不对应,就会出现无法运行的情况,如下: 翻译:无法确定17的“tools.jar”库的路径(C:\Program Files\Java\jdk-17) 原因:idea版本是2020.2,而jdk版本是17&#xff0…

动态规划-

关键词: 重叠子问题;每一个状态一定是由上一个状态推导出来(类似数列a^n f(a^n-1,a^n-2)) 步骤: 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目&#…

01_02_mysql06_(视图-存储过程-函数(变量、流程控制与游标)-触发器)

视图 使用 视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格&#xff0…

多微服务合并为一个服务

公司微服务细分太多,最近跟我提说需要将几个微服务合为单体,经过几天的查阅,决定用二次打包的方式进行合并,然后部署的时候在nginx改下合并的微服务转发路劲即可,不需要前端修改路劲了。 方案 采用二次打包的方式进行…

【2024软件测试面试必会技能】Unittest(6):unittest_构建测试套件

构建测试套件 在实际项目中,随着项目进度的开展,测试类会越来越多,可是直到现在我 们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的,在 unittest中可以通过测试套件来解决该问题。 测试套件&…

目标检测-Transformer-ViT和DETR

文章目录 前言一、ViT应用和结论结构及创新点 二、DETR应用和结论结构及创新点 总结 前言 随着Transformer爆火以来,NLP领域迎来了大模型时代,成为AI目前最先进和火爆的领域,介于Transformer的先进性,基于Transformer架构的CV模型…

代购系统上下架商品|商品采集|1688淘宝商品关键词搜索

- item_get 获得淘宝商品详情 [获取API测试权限,进入测试页] - item_get_pro 获得淘宝商品详情高级版 - item_review 获得淘宝商品评论 - item_fee 获得淘宝商品快递费用 - item_password 获得淘口令真实url - item_list_updown 批量获得淘宝商品…

Redis之在Windows安装及高版本编译安装方法

Redis之在Windows安装及高版本编译安装方法 文章目录 Redis之在Windows安装及高版本编译安装方法1. Redis-x64-3.2.100.zip版本安装1. 下载与安装2. 将Redis注册为Windows的服务运行3.远程连接设置 2. Windows中高版本编译安装 Redis官方并未提供Windows版本的Redis数据库&…

C语言深入剖析——函数栈帧的创建与销毁

目录 0.前言 1.什么是函数栈帧 1.1栈帧的组成 1.2栈帧的作用 1.3栈帧的管理 2.理解函数栈帧的作用 3.解析函数栈帧的创建与销毁 3.1栈的介绍 3.2寄存器简介 3.3汇编指令简介 3.4具体过程解析 3.4.1预备知识 3.4.2函数的调用堆栈 3.4.3转到反汇编 3.4.4函数栈帧的…

【Python_Zebra斑马打印机编程学习笔记(一)】实现标贴预览的两种方式

实现标贴预览的两种方式 实现标贴预览的两种方式前言一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能1、Labelary Online ZPL Viewer API 案例介绍2、生成 PNG 格式3、Parameters 二、通过 zpl 的 label.preview() 方法实现标贴预览功能1、实现步骤2、代码示例 …