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

目录

一、WebElement

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

2、clear()------清空内容

3、sendKeys(...)

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

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

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

[根据属性名获取元素属性值 常用于断言](#根据属性名获取元素属性值 常用于断言)

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

常用于断言

二、WebDriver

[1、get(String url)](#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不好定位和点击的情况,用回车去解决

java 复制代码
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对象提供的

java 复制代码
//窗口最大化  最大化和全屏不一样,实际测试一般在窗口最大化的时候进行
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:等待时长单位

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

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

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

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

思考场景:

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

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

3、显式等待

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

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

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

  • 使用方式:

java 复制代码
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类型
java 复制代码
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定位不到

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

相关推荐
小码哥说测试21 分钟前
接口测试用例设计的关键步骤与技巧解析!
自动化测试·测试工具·jmeter·职场和发展·测试用例·接口测试·postman
小白学大数据7 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
awonw16 小时前
[java][框架]springMVC(1/2)
测试工具·postman
迃幵chen20 小时前
wireshark-网络分析工具
网络·测试工具·wireshark
孤蓬&听雨1 天前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
土小帽软件测试1 天前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习
qq_433716951 天前
测试分层:减少对全链路回归依赖的探索!
自动化测试·软件测试·功能测试·测试工具·回归·pytest·postman
qq_433716951 天前
Postman断言与依赖接口测试详解!
自动化测试·软件测试·功能测试·测试工具·mysql·接口测试·postman
如光照1 天前
Linux与Windows中的流量抓取工具:wireshark与tcpdump
linux·windows·测试工具·网络安全
土小帽软件测试1 天前
jmeter基础03_汉化jmeter界面
测试工具·jmeter·软件测试学习