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

自动化测试核心知识梳理与 Java 代码详解

一、自动化测试概念
1. 什么是自动化测试?
  • 定义:通过编写代码模拟用户操作,自动验证软件功能是否符合预期。
  • 类比:就像用机器人代替人工点击按钮、输入数据,并自动检查结果是否正确。
2. 为什么需要自动化测试?
  • 优势
    • 效率:重复执行速度快(如每日构建后的回归测试)。
    • 准确性:避免人为疏忽。
    • 覆盖率:覆盖复杂场景(如边界值、异常流程)。
  • 适用场景
    • 核心功能频繁回归(如登录、支付)。
    • 复杂计算逻辑验证(如金融利率计算)。
    • 多环境兼容性测试(如不同浏览器、操作系统)。
3. 自动化测试类型
类型工具/框架适用场景
单元测试JUnit, TestNG验证单个方法或类的逻辑正确性
接口测试RestAssured验证 API 接口功能和性能
UI测试Selenium验证用户界面交互流程
Selenium 是什么?

Selenium 是用于自动化浏览器操作的工具,能模拟人类在浏览器中的点击、输入、滚动等行为。
核心能力
✅ 跨浏览器测试(Chrome/Firefox/Edge)
✅ 多语言支持(Java/Python/C#)
✅ 处理动态网页元素(如弹窗、下拉菜单)


二、环境搭建:5分钟快速配置
1. 添加 Maven 依赖
<!-- Selenium Java SDK -->
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.21.0</version>
</dependency><!-- Chrome 浏览器驱动 -->
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-chrome-driver</artifactId><version>4.21.0</version>
</dependency>
2. 下载浏览器驱动
  • ChromeDriver:访问 ChromeDriver官网
    • 选择与本地 Chrome 版本匹配的驱动
    • 解压后得到 chromedriver.exe(Windows)或 chromedriver(Mac/Linux)
3. 配置驱动路径
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver(); // 启动浏览器
三、核心操作:从零编写第一个测试
1. 打开网页 & 关闭浏览器
public class BasicTest {WebDriver driver;@BeforeEachvoid setup() {System.setProperty("webdriver.chrome.driver", "chromedriver");driver = new ChromeDriver();}@Testvoid testOpenPage() {driver.get("https://www.baidu.com"); // 打开百度String title = driver.getTitle();assertEquals("百度一下,你就知道", title);}@AfterEachvoid teardown() {driver.quit(); // 关闭浏览器}
}
2. 元素定位八大方法
定位方式代码示例适用场景
By.iddriver.findElement(By.id("kw"))元素有唯一ID
By.namedriver.findElement(By.name("wd"))表单元素常用
By.classNamedriver.findElement(By.className("s_ipt"))通过CSS类名定位
By.tagNamedriver.findElement(By.tagName("input"))按标签名定位(如 <input>
By.linkTextdriver.findElement(By.linkText("新闻"))精确匹配超链接文本
By.partialLinkTextdriver.findElement(By.partialLinkText("新"))模糊匹配链接文本
By.xpathdriver.findElement(By.xpath("//input[@id='kw']"))复杂路径定位
By.cssSelectordriver.findElement(By.cssSelector("#kw"))类似jQuery选择器

3. 常用交互操作
// 输入文本
WebElement searchBox = driver.findElement(By.id("kw"));
searchBox.sendKeys("自动化测试"); // 输入关键词// 点击按钮
WebElement searchBtn = driver.findElement(By.id("su"));
searchBtn.click();// 获取元素文本
WebElement result = driver.findElement(By.className("c-title-text"));
String text = result.getText();
assertTrue(text.contains("测试"));// 清除输入框
searchBox.clear();
四、高级技巧:处理复杂场景
1. 等待机制(解决元素加载慢)
// 隐式等待(全局生效)
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));// 显式等待(针对特定元素)
WebElement element = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfElementLocated(By.id("dynamicElement")));
2. 处理弹窗/Alert
// 获取弹窗并操作
Alert alert = driver.switchTo().alert();
alert.accept(); // 点击确认
// alert.dismiss(); // 点击取消
// String alertText = alert.getText(); // 获取弹窗文本
3. 下拉选择(Select 类)
WebElement dropdown = driver.findElement(By.id("city"));
Select select = new Select(dropdown);
select.selectByValue("shanghai"); // 按value选择
// select.selectByVisibleText("上海"); // 按显示文本
// select.selectByIndex(1); // 按索引
4. 文件上传
WebElement upload = driver.findElement(By.id("file-upload"));
upload.sendKeys("/path/to/file.txt"); // 直接发送文件路径
五、实战项目:电商网站测试
场景:用户登录 → 搜索商品 → 加入购物车
public class EcommerceTest {WebDriver driver;@BeforeEachvoid setup() {driver = new ChromeDriver();driver.manage().window().maximize(); // 最大化窗口}@Testvoid testShoppingFlow() {// 1. 登录driver.get("https://example.com/login");driver.findElement(By.id("username")).sendKeys("user123");driver.findElement(By.id("password")).sendKeys("pass123");driver.findElement(By.id("login-btn")).click();// 2. 搜索商品WebElement searchBox = driver.findElement(By.name("q"));searchBox.sendKeys("iPhone 15");searchBox.submit();// 3. 添加购物车WebElement product = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[contains(text(),'iPhone 15')]")));product.click();driver.findElement(By.cssSelector(".add-to-cart")).click();// 验证购物车数量WebElement cartCount = driver.findElement(By.id("cart-count"));assertEquals("1", cartCount.getText());}@AfterEachvoid teardown() {driver.quit();}
}
六、最佳实践与调试技巧
  1. 元素定位失败怎么办?

    • 使用浏览器开发者工具(F12)检查元素属性
    • 尝试更换定位方式(优先用 id > cssSelector > xpath
    • 添加显式等待解决加载延迟问题
  2. 提高脚本稳定性

    • 使用 Page Object 模式 分离页面元素和测试逻辑
    • 避免使用绝对 XPath(如 //div/div[2]/span
    • 定期清理浏览器缓存(防止旧数据干扰)通过以上内容,您已掌握 Selenium 的核心操作和实战技巧!建议从简单场景入手,逐步挑战复杂业务流程测试。
http://www.xdnf.cn/news/556813.html

相关文章:

  • 基于正点原子阿波罗F429开发板的LWIP应用(3)——Netbiosns功能
  • 嵌入式培训之系统编程(一)标准IO、文件操作
  • Liquid Wire 柔性应变传感器:金属凝胶导体 | 仿生肌肉长度监测 | 高精度动作控制
  • 特定领域 RAG中细调嵌入模型能否提升效果?
  • IVX:重构 AI 原生开发范式,让模型调用成为指尖艺术​
  • PostgreSQL简单使用
  • 深入浅出人工智能:机器学习、深度学习、强化学习原理详解与对比!
  • 【深度学习-Day 14】从零搭建你的第一个神经网络:多层感知器(MLP)详解
  • 第六天的尝试
  • 服务器部署1Panel
  • 證券行業證券交易系統開發方案
  • 基于SpringBoot+Vue的学籍管理系统的设计与实现
  • Kubernetes在线练习平台深度对比:KillerCoda与Play with Kubernetes
  • 【开源工具】文件夹结构映射工具 | PyQt5实现多模式目录复制详解
  • 【鸿蒙开发】Hi3861学习笔记- MQTT通信
  • 统一端点管理(UEM):定义、优势与重要性
  • 从零开始:Python 从0到1轻松入门
  • 易路 AI 招聘:RPA+AI 颠覆传统插件模式,全流程自动化实现效率跃迁
  • 物业收费智能化:如何实现账单零差错自动生成?
  • SpringBean模块(三)具有生命周期管理能力的类(1)AutowireCapableBeanFactory
  • DOS常用命令及dos运行java
  • 协程+Flow:现代异步编程范式,替代RxJava的完整实践指南
  • NVIDIA Earth-2 AI 天气模型 DLI 课程:解锁全球风云的未来之匙
  • 4大AI智能体平台,你更适合哪一个呐?
  • 第六部分:第三节 - 路由与请求处理:解析顾客的点单细节
  • ⭐️白嫖的阿里云认证⭐️ 第二弹【课时3:大模型辅助内容生产场景】for 「大模型Clouder认证:利用大模型提升内容生产能力」
  • 基于YOLO11深度学习的变压器漏油检测系统【Python源码+Pyqt5界面+数据集+安装使用教程+训练代码】【附下载链接】
  • 通过 API 获取 1688 平台店铺所有商品信息的完整流程
  • Vue+eElement ui el-input输入框 type=number 输入无效。赋值输入框也不显示(问题已解决)
  • FaceFusion 3.2.0 参数配置参考