尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

2026自动化测试全栈实战:Selenium、Playwright与AI辅助测试

2026自动化测试全栈实战:Selenium、Playwright与AI辅助测试 自动化测试不是新鲜词但 2026 年的技术栈和十年前已经完全不同。Web 端有 Selenium 和 Playwright移动端有 Appium 和 Airtest接口层用 Python 或 Java 快速搭框架再加上 AI 工具辅助写脚本、自动化测试平台统一调度执行这一套体系足够支撑从零基础到项目实战的完整学习路径。这篇不做概念堆砌而是把当前主流的自动化测试技术栈、框架设计、环境搭建、接口测试、弹窗处理、AI 辅助测试、CI 集成和车载进阶方向全部拆开讲。你可以把它当作一份可以直接照着搭框架的技术地图也可以当作准备自动化测试面试的系统复习提纲。读完之后你应该能回答几个核心问题哪些项目适合做自动化测试Selenium 和 Playwright 怎么选接口自动化测试框架怎么搭建非预期弹窗导致测试失败怎么解决AI 能不能代替测试工程师写代码我们先从整体技术栈开始。1. 2026 自动化测试核心能力速览能力项说明Web UI 自动化Selenium、Playwright覆盖浏览器端功能回归移动端自动化Appium、Airtest覆盖 Android/iOS 与游戏场景接口自动化测试Python Requests PytestJava RestAssured TestNG自动化测试框架PO 模式、数据驱动、关键字驱动、Allure 报告平台与 CI/CDJenkins、GitLab CI、Selenium Grid、自动化测试平台AI 辅助测试Codex Agent 生成用例、Playwright AI、AI 定位元素、智能断言车载与嵌入式HIL 测试体系、CAPL 脚本、UDS 诊断测试、示波器自动化核心收益回归成本下降、发布信心提升、测试结果可追溯从学习路径看推荐顺序是接口自动化测试 → Web UI 自动化 → 移动端自动化 → 自动化测试平台 → AI 辅助测试。接口测试最容易产生 ROIUI 测试受页面变动影响大适合放在第二步。2. 自动化测试体系设计先想清楚再写脚本很多人一上来就开始写脚本结果写了一个月项目改版一次脚本全部报废。自动化测试的第一步不是写代码而是设计测试体系。2.1 自动化测试金字塔经典的自动化测试金字塔分三层底层单元测试执行最快占比最多。中间层接口自动化测试覆盖业务规则和数据处理性价比最高。顶层UI 自动化测试成本最高、执行最慢、最不稳定适合关键主流程。在 WEB 业务测试中推荐把主要精力放在接口层。比如登录、下单、支付这类核心链路接口层能覆盖 70% 以上的业务逻辑执行速度快运行稳定不会因为某个按钮位置改变就失败。2.2 先判断 ROI 再动手适合做自动化的项目通常有这些特征迭代周期长、回归频率高、核心链路稳定、有稳定的测试环境。反过来原型期项目、UI 频繁变动、用例执行一次就不再使用的场景不适合投入大量精力。常见的做法是手工测试先跑通主流程锁定核心用例集再逐步替换成自动化脚本。不要追求 100% 自动化关键用例覆盖比用例数量更重要。2.3 HIL 自动化测试体系的设计思路如果做的是汽车电子、控制器、嵌入式设备会接触 HILHardware-in-the-Loop测试。HIL 把真实控制器接到仿真环境里通过实时仿真模拟传感器、执行器和总线信号实现自动化验证。设计 HIL 自动化测试体系时重点需要考虑四件事被测对象状态管理上电、下电、休眠、唤醒等状态切换。仿真模型模拟车速、转速、温度等信号如何注入。测试用例与参数配置分离不同车型、不同标定参数不能写死在脚本里。结果判定与报告输出采集数据、对比阈值、自动生成测试报告。HIL 的脚本常见用 CAPL、Python 或厂商提供的工具链完成。测试工程师需要理解硬件信号而不是只写 UI 点击脚本。3. 环境准备与开发工具链搭建自动化测试环境建议先准备以下工具链。版本号不强制写死以当前官方稳定版为准。3.1 开发语言Python 3.10 及以上推荐用于接口测试、Selenium、Playwright、Airtest。Java JDK 8/11/17如果需要搭建 Java 接口自动化测试框架建议 JDK 11 以上。Node.js 18 及以上部分 AI 测试工具和 Playwright 脚本需要。3.2 浏览器与驱动Selenium 需要下载与浏览器版本匹配的 WebDriver比如 Chrome 对应 chromedriverEdge 对应 msedgedriver。Playwright 不需要手动下载驱动首次运行自动安装浏览器内核这一点比较省心。3.3 移动端测试环境Android安装 Android SDK、Appium Server连接真机或模拟器。iOS需要 macOS 和 Xcode建议用 Appium WebDriverAgent。游戏或小程序安装 Airtest IDE使用图像识别方式写脚本。3.4 接口测试工具抓包工具Charles 或 Fiddler用于分析接口请求和响应。接口调试工具Postman 或 Apifox适合先手工验证接口。Python 库requests、pytest、allure-pytest。Java 库RestAssured、TestNG、Maven。3.5 其他工具Docker用于搭建 Selenium Grid、Jenkins、测试环境隔离。Git脚本和用例代码纳入版本管理。Allure统一管理测试报告。4. Web UI 自动化Selenium 与 Playwright 实战Web UI 自动化是目前招聘需求最多的方向之一。Selenium 是老牌框架生态成熟Playwright 是后起之秀内置自动等待、多标签、多浏览器支持使用体验更友好。4.1 Selenium 基础脚本以搜索功能为例传统 Selenium 脚本通常需要显式等待元素出现from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver webdriver.Chrome() try: driver.get(http://localhost:8080/login) wait WebDriverWait(driver, 10) # 等待输入框可点击 username wait.until(EC.element_to_be_clickable((By.ID, username))) username.send_keys(admin) password driver.find_element(By.NAME, password) password.send_keys(123456) driver.find_element(By.CSS_SELECTOR, button[typesubmit]).click() # 断言登录成功 wait.until(EC.url_contains(dashboard)) assert dashboard in driver.current_url finally: driver.quit()Selenium 写脚本不难难在稳定。元素定位建议优先使用 id、data-testid、name避免使用多层级 CSS 路径和易变动的 class。4.2 Playwright 基础脚本Playwright 的自动等待机制能减少很多等待代码from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessFalse) page browser.new_page() page.goto(http://localhost:8080/login) page.fill(#username, admin) page.fill(#password, 123456) page.click(button[typesubmit]) page.wait_for_url(**/dashboard) print(登录成功当前页面:, page.url) browser.close()Playwright 还支持录制脚本执行playwright codegen后在浏览器里手动点一遍操作工具自动生成脚本适合快速写冒烟测试用例。4.3 Selenium 和 Playwright 怎么选对比项SeleniumPlaywright生态成熟度高社区资料多增长快新项目较多驱动管理需手动匹配浏览器版本自动下载浏览器自动等待需自行实现内置自动等待多标签/多iframe支持代码偏绕支持API 更简洁录制功能可配合 Selenium IDE内置 codegen移动端 Web可配合 Appium支持但生态弱一些如果团队历史项目已经用 Selenium不建议强行迁移。新项目可以优先考虑 Playwright脚本更简洁稳定性和执行速度也不错。5. 移动端自动化Appium 与 Airtest移动端自动化在招聘需求里也经常出现目前主流方案是 Appium 和 Airtest。5.1 Appium 示例Appium 适合 Android 和 iOS 原生应用测试原理是通过 WebDriver 协议驱动移动端元素操作。from appium import webdriver desired_caps { platformName: Android, deviceName: emulator-5554, appPackage: com.example.app, appActivity: .MainActivity, noReset: True, automationName: UiAutomator2 } driver webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps) driver.implicitly_wait(10) # 点击登录按钮 driver.find_element(id, login_button).click() # 输入账号密码 driver.find_element(id, username_input).send_keys(admin) driver.find_element(id, password_input).send_keys(123456) driver.find_element(id, submit_button).click() # 断言登录成功页面 assert 首页 in driver.page_source driver.quit()Appium 常见问题集中在设备连接不上、版本不匹配、元素找不到。遇到问题先执行adb devices确认设备在线再检查 desired_caps 里的包名和 Activity 是否正确。5.2 Airtest 场景Airtest 是图像识别驱动的自动化框架适合游戏、小程序、混合应用。它不依赖控件树而是通过截图定位元素。Airtest 的优点是脚本上手快适合没有控件信息的场景缺点是图像识别受分辨率影响大一旦界面改版截图素材就要更新。建议把它作为 Appium 的补充而不是替代。6. 接口自动化测试框架搭建接口自动化测试是性价比最高的自动化测试方向。在项目前期接口一旦稳定后续的回归几乎可以完全依赖自动化。6.1 Python 接口自动化测试框架Python 常规组合是 requests pytest allure-pytest。# conftest.py import pytest import requests BASE_URL http://localhost:8080 pytest.fixture(scopesession) def session(): 全局会话可在这里统一处理登录和请求头 s requests.Session() login_resp s.post(f{BASE_URL}/login, json{ username: admin, password: 123456 }) assert login_resp.status_code 200 token login_resp.json()[data][token] s.headers.update({Authorization: fBearer {token}}) yield s s.close()# test_login.py def test_get_user_info(session): resp session.get(f{BASE_URL}/user/info) assert resp.status_code 200 assert resp.json()[code] 0 assert resp.json()[data][username] admin配置文件可以用 pytest.ini 统一管理[pytest] addopts -s -q --alluredir./allure-results testpaths testcases运行时执行pytest -s -q --alluredir./allure-results allure serve ./allure-results6.2 接口自动化测试框架怎么设计一个能落地的接口自动化测试框架至少包含以下模块配置管理环境地址、账号密码、数据库配置区分 dev、test、prod。请求封装统一处理 GET、POST、PUT、DELETE统一超时和异常捕获。数据驱动接口参数和期望结果放在 YAML、Excel 或 JSON 文件里不写死在代码中。断言封装统一返回 code、message、data 的校验方式。报告集成Allure 报告输出失败截图、请求日志、响应内容。重试机制针对网络抖动或不稳定接口设置失败重试。数据驱动示例testcases: - name: 正确账号密码登录 method: POST url: /login data: username: admin password: 123456 expect: code: 0 - name: 错误密码登录 method: POST url: /login data: username: admin password: wrong expect: code: 10016.3 Java 接口自动化测试框架如果团队使用 Java常规组合是 RestAssured TestNG Maven。import io.restassured.RestAssured; import io.restassured.response.Response; import org.testng.Assert; import org.testng.annotations.Test; public class LoginTest { Test public void testLogin() { RestAssured.baseURI http://localhost:8080; Response response RestAssured .given() .contentType(application/json) .body({\username\:\admin\,\password\:\123456\}) .post(/login); Assert.assertEquals(response.getStatusCode(), 200); Assert.assertEquals(response.jsonPath().getInt(code), 0); Assert.assertNotNull(response.jsonPath().getString(data.token)); } }Java 版本的多环境管理和报告生成可以用 Maven Profile 区分环境配合 TestNG 生成 HTML 报告。7. 自动化测试非预期弹窗导致失败的解决方案自动化测试中一个高频坑是用例运行过程中突然弹出非预期弹窗导致元素点击失败或断言失败。这类问题在 Web 端、移动端、Windows 客户端自动化中都可能出现。7.1 非预期弹窗的常见类型弹窗类型特征常见处理浏览器原生 alert阻塞 JavaScript 执行driver.switch_to.alertiframe 弹窗元素位于嵌套 iframe 中切换到对应 iframe新开标签页弹窗点击后打开新窗口切换 window handle页面内遮罩层元素被覆盖点击无效等待遮罩消失系统级弹窗文件上传、下载确认使用系统级处理或工具7.2 统一处理 alert 弹窗from selenium.webdriver.common.alert import Alert class AlertGuard: 统一兜底处理非预期弹窗 def __init__(self, driver): self.driver driver def accept_alert_if_present(self): try: alert Alert(self.driver) text alert.text alert.accept() return text except Exception: return None def dismiss_alert_if_present(self): try: alert Alert(self.driver) text alert.text alert.dismiss() return text except Exception: return None在点击操作前调用一次accept_alert_if_present可以降低弹窗导致脚本中断的概率。7.3 处理 iframe 弹窗如果是 iframe 内部的弹窗需要先切换 iframe操作完成后再切回主文档driver.switch_to.frame(popup_frame) driver.find_element(id, close_popup_btn).click() driver.switch_to.default_content()7.4 防止弹窗掩盖页面元素有些弹窗不会触发 alert而是以遮罩层形式覆盖页面。此时点击被遮挡的元素会报 element click intercepted建议用显式等待等待遮罩层消失wait.until(EC.invisibility_of_element_located((By.CLASS_NAME, mask-layer)))7.5 失败时保留现场无论弹窗如何处理建议在用例失败时自动截图并保存页面源码方便排查问题import datetime def take_screenshot(driver, namescreenshot): timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) path f./screenshots/{name}_{timestamp}.png driver.get_screenshot_as_file(path) print(截图已保存:, path)非预期弹窗问题的解决思路不是消灭所有弹窗而是建立一套稳定的兜底策略等待加载完成、统一处理 alert/iframe/遮罩层、失败后截图留证。8. AI 自动化测试Codex Agent 与 Playwright AI2026 年自动化测试最明显的变化是 AI 进入测试闭环。AI 自动化测试不是替代测试工程师而是把重复劳动压缩掉让测试人员把时间花在用例设计和结果分析上。8.1 Codex Agent 辅助生成测试代码Codex Agent 可以理解项目上下文根据接口文档或需求描述生成测试脚本。使用方式通常是给出清晰的提示词让 AI 产出 pytest 代码。提示词示例请根据以下接口文档生成 pytest 接口自动化测试用例 接口POST /login 参数 - username: string - password: string 成功条件 - 状态码 200 - 返回 JSON 中 code 为 0 - data 中包含 token 请输出完整可运行的测试代码并包含必要断言。AI 生成代码后不能直接上线需要人工 review 断言是否合理、用例是否覆盖边界、数据是否敏感。8.2 Playwright AI 能力Playwright 生态中出现了一些 AI 辅助能力核心是自然语言生成脚本和智能定位器。测试人员可以用一句话描述操作AI 帮助生成选择器。这种方式适合快速搭建冒烟用例但复杂业务流的定位准确性仍需要人工校正。8.3 AI 视觉定位与智能断言在移动端和游戏测试中AI 图像识别可以作为元素定位的补充。Airtest 的图像识别本身就是 AI 视觉定位的一种落地。更高级的方向是智能截图对比通过视觉回归自动发现界面异常。8.4 AI 自动化测试的边界AI 生成脚本的坑在于它可能生成表面正确但断言无效的代码。比如只断言状态码 200却没有校验数据库落库或者对时间、金额等动态字段没有编写合适的断言。AI 适合辅助不适合背锅最终质量责任仍在测试团队。9. 自动化测试平台与 CI/CD 集成脚本写多了之后本地执行远远不够。自动化测试平台的价值在于统一管理用例、定时执行、分布式跑批、结果汇总和通知。9.1 平台核心模块模块作用用例管理维护接口用例和 UI 用例支持分组和标签执行调度定时任务、手动触发、流水线触发执行节点多台机器并行执行降低总耗时数据管理测试数据准备、清理、隔离报告中心趋势图、失败分类、日志和截图通知机制邮件、钉钉、企业微信通知失败结果企业可以采购现成平台也可以通过 Jenkins Allure Selenium Grid 自行搭建轻量级平台。9.2 Jenkins 流水线示例pipeline { agent any stages { stage(Checkout) { steps { git url: http://git.example.com/test/auto-test.git } } stage(Install Dependencies) { steps { sh pip install -r requirements.txt } } stage(Run Interface Tests) { steps { sh pytest -q -m interface --alluredir./allure-results } } stage(Generate Allure Report) { steps { allure includeProperties: true, results: [[path: allure-results]] } } } post { always { junit allure-results/*.xml cleanWs() } } }9.3 GitLab CI 示例stages: - test interface-test: stage: test image: python:3.11 before_script: - pip install -r requirements.txt script: - pytest -q -m interface --alluredir./allure-results artifacts: when: always paths: - allure-results expire_in: 7 days接口自动化测试框架接入 CI 后每次提交代码自动触发测试这是把自动化测试价值落地的关键一步。10. 进阶方向车载 HIL、CAPL、UDS 与示波器自动化如果打算在测试行业长期发展除了 Web 和 App还可以关注汽车电子和嵌入式方向。10.1 HIL 测试HIL 测试需要把真实 ECU 接入仿真环境实时模拟车辆信号。常见的工具包括 NI、dSPACE、Vector 等平台。测试内容通常是信号状态、故障注入、总线通信和逻辑判断。10.2 CAPL 自动化测试CAPL 是 Vector CANoe 提供的编程语言常用于编写总线仿真和测试脚本。它可以模拟发送 CAN 报文检测节点响应并自动生成测试报告。一个典型的 CAPL 测试流程是初始化总线、发送指定报文、延时等待、读取被测节点响应、比较期望值、记录结果。10.3 UDS 诊断自动化测试UDSUnified Diagnostic Services是汽车 ECU 诊断的统一协议规范。自动化测试通常覆盖读取故障码、读取数据标识符、写入参数、例程控制等诊断服务。通过脚本批量执行诊断请求验证 ECU 在不同状态下是否返回正确响应。10.4 示波器自动化测试示波器自动化测试多用于硬件信号验证通过示波器厂商提供的编程接口或 SCPI 指令控制示波器采集波形、测量幅值、频率并自动保存数据。测试工程师可以编写 Python 脚本连接示波器实现通电后自动采集和结果判定。这些方向的共同点是测试对象从界面变成信号、协议和硬件行为难度更高薪资空间也更大。11. 自动化测试常见问题与排查方法问题现象可能原因排查方式解决方案元素定位失败页面未加载完成、元素动态属性查看页面截图和 HTML 快照使用显式等待优先稳定定位器非预期弹窗导致失败alert、iframe、遮罩层干扰检查失败现场截图统一处理弹窗失败时保留截图点击事件不生效元素被遮挡或不可点击检查元素坐标和层级等待元素可点击后再操作接口超时网络波动、环境不稳定查看请求日志设置超时和重试机制Appium 连接不上设备adb 未识别、端口占用执行 adb devices重启 adb 或更换端口CI 中用例不稳定并行执行资源冲突查看执行日志和报告关键用例隔离环境或串行执行测试数据污染用例之间共用数据检查数据库状态用例前后清理和重置数据生成大量重复代码缺乏框架抽象代码 review抽取公共方法和基类排查自动化测试问题最重要的是先看现场截图、页面源码、请求日志、响应日志。四类信息齐了基本能定位 80% 的问题。12. 自动化测试最佳实践与学习路径12.1 工程技术实践测试代码和业务代码一样需要设计建议采用 PO 模式封装页面对象。数据驱动替代硬编码参数一套脚本跑多组数据。接口测试先于 UI 测试执行UI 测试只覆盖端到端关键链路。用例执行结果必须保留日志和截图便于追溯失败原因。自动化测试用例也要维护每次业务改动后及时更新。所有脚本和配置文件进入 Git 管理禁止散落在个人电脑。12.2 从零基础到入门的路径第一阶段掌握 Python 基础语法、requests、pytest完成接口自动化测试框架搭建。第二阶段掌握 Selenium 或 Playwright能够独立完成 Web 端自动化测试脚本。第三阶段掌握 Appium 或 Airtest能够处理移动端自动化测试。第四阶段搭建自动化测试平台接入 CI/CD 流水线。第五阶段尝试 AI 辅助测试并结合实际项目落地。12.3 面试重点方向自动化测试面试经常问这些方向接口自动化测试框架怎么搭建、非预期弹窗导致失败怎么解决、Selenium 定位不到元素怎么办、测试数据怎么管理、如何保证用例稳定性、框架如何设计支持批量任务。建议把本文涉及的代码和思路都自己跑一遍在真实项目中积累经验。12.4 合规与安全提醒做接口自动化测试时要注意测试数据脱敏不要使用真实用户隐私数据涉及数据库、支付、账号体系的操作必须在授权环境下执行。移动端和客户端自动化涉及系统权限也要确保在合法设备和授权环境下操作。AI 生成的测试代码需要人工审查避免通过自动化脚本越权访问接口或破坏线上数据。自动化测试的核心价值不是代替人工而是在版本快速迭代时让回归测试更快、更稳、更有信心。建议收藏这份路线先搭一个最小可运行的接口自动化测试框架再逐步扩展到 UI 和移动端。自动化测试不是越多的代码越好而是越稳定、越可维护、越贴近业务风险越好。
返回列表