测试开发话题10---自动化测试常用函数(2)

🔥个人主页: 寻星探路

🎬作者简介:Java研发方向学习者

📖个人专栏:****、《《测试开发漫谈》 、**************************************************************《JavaEE 初阶启程记》**********************************************************************

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!



目录

一、等待

1、强制等待

2、隐式等待

3、显示等待

二、浏览器导航

三、弹窗

[1、警告弹窗 + 确认弹窗](#1、警告弹窗 + 确认弹窗)

2、提示弹窗

四、文件上传

五、浏览器参数设置


一、等待

通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法:

1、强制等待

Thread.sleep ()

优点:使用简单,调试的时候比较有效

缺点:影响运行效率,浪费大量的时间

2、隐式等待

隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。

implicitlyWait () 参数:Duration类中提供的毫秒、秒、分钟等方法

示例:

java 复制代码
 //隐式等待1000毫秒 
 driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
 //隐式等待5秒 
 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。

优点:智能等待,作用于全局

3、显示等待

显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码 new WebDriverWait(driver, Duration.ofSeconds(3)).until($express)

$press:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类

返回值:boolean

示例:

java 复制代码
 WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
 foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));

ExpectedConditions预定义方法的一些示例:

• elementToBeClickable(By locator)‒用于检查元素的期望是可见的并已启用,以便您可以单击它

• textToBe (Bylocator , String str)-检查元素。

• presenceOfElementLocated(Bylocator)‒检查页面的DOM上是否存在元素。

• urlToBe(java.lang.String url)‒检查当前页面的URL是一个特定的URL。

java 复制代码
 WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
 boolean ispass = wait.until(ExpectedConditions.textToBe(By.cssSelector("#s-topleft > a:nth-child(1)"), "新闻"));
 if(ispass){
     System.out.println("测试通过");
 }else {
     System.out.println("测试失败");
 }

优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活

缺点:写法复杂

隐式等待和显示等待一起使用效果如何呢?

测试⼀下:

java 复制代码
 //隐式等待设置为5s,显⽰等待设置为10s,那么结果会是5+10=15s吗? 
 SimpleDateFormat sim =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 System.out.println(sim.format(System.currentTimeMillis()));
 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
 driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth child(1) > a > span.title-content"));
 WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
 try{
     wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content")));
 }catch (Exception e){
     System.out.println("nosuelement!");
 }
 System.out.println(sim.format(System.currentTimeMillis()));

结果:重试多次,最终打印的等待时间有10s、11s....

结论:不要混合隐式和显式等待,可能会导致不可预测的等待时间。

二、浏览器导航

常见操作:

1)打开网站

java 复制代码
// 更⻓的⽅法 
driver.navigate().to("https://selenium.dev");
// 简洁的⽅法
driver.get("https://selenium.dev");

2)浏览器的前进、后退、刷新

java 复制代码
 driver.navigate().back();
 driver.navigate().forward();
 driver.navigate().refresh();

案例:百度首页测试在线工具 - 你的工具箱标签入口

三、弹窗

弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口

1、警告弹窗 + 确认弹窗

java 复制代码
 Alert alert = driver.switchTo.alert();
 //确认
 alert.accept()
 //取消
 alert.dismiss()

2、提示弹窗

java 复制代码
 Alert alert = driver.switchTo.alert();
 alert.sendKeys("hello");
 alert.accept();
 alert.dismiss();

四、文件上传

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素

但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的

java 复制代码
 WebElement ele = driver.findElement(By.cssSelector("body > div > div > input[type=file]"));
 ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

五、浏览器参数设置

1)设置无头模式

2)设置浏览器加载策略

options.setPageLoadStrategy(PageLoadStrategy.NONE);

相关推荐
Moment3 小时前
快到  2026  年了:为什么我们还在争论  CSS 和 Tailwind?
前端·javascript·css
鸢尾掠地平3 小时前
Python中常用内置函数上【含代码理解】
开发语言·python
萧鼎3 小时前
Python 图像处理利器:Pillow 深度详解与实战应用
图像处理·python·pillow
高洁013 小时前
大模型-详解 Vision Transformer (ViT)
人工智能·python·深度学习·算法·transformer
梵得儿SHI3 小时前
Vue 核心语法详解:模板语法中的绑定表达式与过滤器(附 Vue3 替代方案)
前端·javascript·vue.js·插值语法·vue模板语法·绑定表达式·过滤器机制
江城开朗的豌豆3 小时前
TypeScript枚举:让你的代码更有"选择权"
前端·javascript
api_180079054603 小时前
请求、认证与响应数据解析:1688 商品 API 接口深度探秘
java·大数据·开发语言·mysql·数据挖掘
陈果然DeepVersion3 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十二)
java·spring boot·ai·kafka·面试题·向量数据库·rag
yours_Gabriel3 小时前
【设计模式】UML和设计原则
java·设计模式·uml