首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >测试开发话题10---自动化测试常用函数(2)

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

作者头像
寻星探路
发布2025-12-17 19:35:39
发布2025-12-17 19:35:39
1460
举报
文章被收录于专栏:CSDN博客CSDN博客

一、等待

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

1、强制等待

Thread.sleep ()

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

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

2、隐式等待

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

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

示例:

代码语言:javascript
复制
 //隐式等待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

示例:

代码语言:javascript
复制
 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。

代码语言:javascript
复制
 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("测试失败");
 }

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

缺点:写法复杂

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

测试⼀下:

代码语言:javascript
复制
 //隐式等待设置为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)打开网站

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

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

代码语言:javascript
复制
 driver.navigate().back();
 driver.navigate().forward();
 driver.navigate().refresh();

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

三、弹窗

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

1、警告弹窗 + 确认弹窗

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

2、提示弹窗

代码语言:javascript
复制
 Alert alert = driver.switchTo.alert();
 alert.sendKeys("hello");
 alert.accept();
 alert.dismiss();

四、文件上传

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

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

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

代码语言:javascript
复制
 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);

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、等待
    • 1、强制等待
    • 2、隐式等待
    • 3、显示等待
  • 二、浏览器导航
  • 三、弹窗
    • 1、警告弹窗 + 确认弹窗
    • 2、提示弹窗
  • 四、文件上传
  • 五、浏览器参数设置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档