当前位置: 首页 > news >正文

⾃动化测试常⽤函数(下)

等待

通常代码执⾏的速度⽐⻚⾯渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?可 以使⽤selenium中提供的三种等待⽅法:

强制等待

Thread.sleep()

优点:使⽤简单,调试的时候⽐较有效

缺点:影响运⾏效率,浪费⼤量的时间

隐式等待

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

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

⽰例:

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

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

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

显⽰等待

显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码 new WebDriverWait(driver, Duration.ofSeconds(3)).until($express) $press:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类

返回值:boolean

⽰例:

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。

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("测试失败"); }

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

缺点:写法复杂

隐式等待和显⽰等待⼀起使⽤效果如何呢?

测试⼀下

//隐式等待设置为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:nthchild(1) > a > span.title-content")); WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10)); try{ wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#hotsear ch-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)打开⽹站

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

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

driver.navigate().back(); driver.navigate().forward(); driver.navigate().refresh();

案例:百度⾸⻚测试https://tool.lu/标签⼊⼝

弹窗

弹窗是在⻚⾯是找不到任何元素的,这种情况怎么处理?使⽤selenium提供的Alert接⼝

警告弹窗+确认弹窗

Alert alert = driver.switchTo.alert(); //确认 alert.accept() //取消 alert.dismiss()

提⽰弹窗

Alert alert = driver.switchTo.alert(); alert.sendKeys("hello"); alert.accept(); alert.dismiss();

⽂件上传

点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。

selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素

但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的

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);

http://www.jsqmd.com/news/625951/

相关文章:

  • 如何在Windows 11 24H2 LTSC系统中一键安装微软商店:终极完整指南
  • CanTp概述
  • 告别手动编译!用Jenkins Pipeline自动化你的C/C++项目(保姆级配置流程)
  • 从理论到实践:深入剖析RoPE旋转位置编码及其在LLaMA等大模型中的应用
  • 1 2.1 使用“记事本”编辑文本文档
  • Bootstrap 折叠组件详解
  • Excel VBA 入门到精通(二):变量、数据类型与运算符
  • 系统扩展方案
  • 001项目总结
  • 避坑指南:PVE显卡直通后,Ubuntu安装N卡驱动和vLLM多卡部署的常见错误与修复
  • 暗黑破坏神2终极生存指南:PlugY插件如何彻底改变你的单机游戏体验
  • Win10/Win11下 LaTeX 环境安装教程——TeX Live 2026 + TeXstudio 配置步骤详解
  • 备件断供时代:中短波发射机国产化替代的真实进展
  • 别再只写ChatGPT提示词了!用LangChain和AutoGen给AI装上‘手和脚’的保姆级教程
  • 5个维度解锁开源工具PlugY的暗黑破坏神2增强潜力
  • 从FFmpeg到FFMedia:解锁RK3588硬件编解码的实战路径
  • RT-Thread 第 8 课时:LwIP 网络基础 + MQTT 软件包上云
  • 从‘乐学小鹅’到‘com.tencent.k12gy’:一次Frida注入失败带给我的Android应用‘身份证’认知升级
  • DrissionPage实战:从零构建高效网页自动化工具
  • 作业2:6位数码管相关练习
  • 从Flannel迁移到Calico:Kubernetes网络插件实战切换指南
  • 双唾液酸神经节苷脂GD3
  • 强化学习部署相关概念区分: parameters.pkl、Checkpoint 与 TorchScript
  • Lychee多模态重排序模型效果展示:T→T纯文本检索中长尾query高分匹配案例
  • PlugY颠覆式体验完全指南:暗黑破坏神2单机限制的终极解决方案
  • 用R包sommer做基因组选择:从单性状到多性状GBLUP,一份给育种新手的保姆级代码指南
  • 别再为加工发愁!手把手教你将HFSS的3D模型变成Altium可用的PCB封装(以定向耦合器为例)
  • **发散创新:基于Rust的内存安全加固技术实战与深度剖析**在现代软件开发中,**内存
  • ESP32-S3玩转RGB屏幕:解决画面漂移的5个实战技巧(附配置代码)
  • 学Simulink——基于Simulink的重复控制抑制周期性负载转矩扰动