【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定位不到

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

相关推荐
测试人社区—03923 小时前
UI测试在DevOps流水线中的卡点设计:质量保障的智能防线
运维·驱动开发·测试工具·ui·ar·vr·devops
实时数据5 小时前
Selenium常用于网页爬取 为了提高爬取效率,可以采取以下优化措施:合理使用无头模式
selenium·测试工具·数据挖掘
zhaoyin19945 小时前
fiddler抓包工具使用
前端·测试工具·fiddler
实时数据5 小时前
网络爬虫已成为获取互联网数据的重要手段。Selenium 作为一种强大的自动化测试工具,
爬虫·selenium·测试工具
佟以冬6 小时前
Wireshark抓包基础
网络·测试工具·安全·网络安全·wireshark
实时数据7 小时前
优化 Selenium 使用文本挖掘在分析留言数据中提供了多种应用 如情感分析、主题建模、关键词提取和文本分类
selenium·测试工具
灵翼飞航科技有限公司7 小时前
无人机动力测试系统光电传感器原理及操作说明(二)
测试工具·无人机
灵翼飞航科技有限公司7 小时前
要完成无人机动力测试需要都需要准备什么?
测试工具·无人机
Wpa.wk8 小时前
curl-发送请求 和 tcpdump与wireshark的介绍
测试工具·wireshark·tcpdump·curl
霍格沃兹测试学院-小舟畅学1 天前
Playwright企业级测试架构设计:模块化与可扩展性
人工智能·测试工具