《刚刚问世》系列初窥篇-Java+Playwright自动化测试-- 操作单选和多选按钮 - 中篇(详细教程)
《刚刚问世》系列初窥篇-JavaPlaywright自动化测试-- 操作单选和多选按钮 - 中篇详细教程大家好欢迎来到《刚刚问世》系列今天我们要深入探讨一个在Web自动化测试中非常基础但又极其重要的知识点如何使用JavaPlaywright操作单选按钮Radio Button和多选按钮Checkbox。如果你觉得单选和多选只是简单的“点击一下”就完事了那可就大错特错了——在实际项目中按钮的状态、联动、回显等细节往往会让新手翻车。别担心这篇教程会带你从原理到实战彻底搞懂它们。### 一、为什么单选和多选按钮需要专门学在HTML中单选按钮通常用input typeradio表示多选按钮用input typecheckbox表示。它们的核心区别是-单选按钮同一组name属性相同只能选一个点击另一个会自动取消前一个。-多选按钮每个独立可以同时选中多个。Playwright作为新一代自动化测试工具提供了非常优雅的API来操作这些元素。但很多初学者容易犯的错误是直接用click()去点击忽略了按钮是否可交互、是否被隐藏、是否已经选中。所以我们不仅要学会“点”还要学会“判断”和“等待”。### 二、环境准备与基础API首先确保你已经在项目中引入了Playwright的Java依赖Maven示例xmldependency groupIdcom.microsoft.playwright/groupId artifactIdplaywright/artifactId version1.40.0/version/dependencyPlaywright操作单选/多选按钮的核心API主要有-locator.check()勾选按钮适用于radio和checkbox。-locator.uncheck()取消勾选仅适用于checkbox。-locator.isChecked()判断按钮是否被选中。-locator.click()直接点击不推荐用于按钮因为可能触发意外行为。### 三、实战操作单选按钮假设我们有这样一个HTML页面位于https://example.com/radio-demohtmlform labelinput typeradio namegender valuemale 男/label labelinput typeradio namegender valuefemale 女/label labelinput typeradio namegender valueother 其他/label/form我们的目标选中“女”这个单选按钮并验证它是否被选中。#### 代码示例1操作单选按钮javaimport com.microsoft.playwright.*;import org.junit.jupiter.api.Test;public class RadioButtonDemo { Test public void testRadioButton() { // 1. 启动浏览器 try (Playwright playwright Playwright.create()) { Browser browser playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false)); Page page browser.newPage(); page.navigate(https://example.com/radio-demo); // 假设的URL // 2. 定位到“女”这个单选按钮根据value属性 Locator femaleRadio page.locator(input[typeradio][valuefemale]); // 3. 先判断当前状态确保初始未被选中 System.out.println(选中前状态 femaleRadio.isChecked()); // 输出 false // 4. 使用check()方法勾选推荐会自动等待元素可交互 femaleRadio.check(); // 5. 验证是否选中 System.out.println(选中后状态 femaleRadio.isChecked()); // 输出 true // 6. 额外验证同组其他按钮是否被取消例如“男” Locator maleRadio page.locator(input[typeradio][valuemale]); System.out.println(男按钮状态 maleRadio.isChecked()); // 输出 false // 等待观察非必须 page.waitForTimeout(2000); browser.close(); } }}注意点- 使用check()而不是click()因为check()会确保元素可见且可交互而click()可能会因为元素被遮挡而失败。- 单选按钮同组互斥的特性由浏览器自动处理我们只需要勾选目标按钮即可。### 四、实战操作多选按钮多选按钮的HTML示例假设URL为https://example.com/checkbox-demohtmlform labelinput typecheckbox namehobby valuereading 阅读/label labelinput typecheckbox namehobby valuemusic 音乐/label labelinput typecheckbox namehobby valuesports 运动/label/form我们要实现先勾选“阅读”和“运动”然后取消“运动”最后验证状态。#### 代码示例2操作多选按钮javaimport com.microsoft.playwright.*;import org.junit.jupiter.api.Test;public class CheckboxDemo { Test public void testCheckbox() { try (Playwright playwright Playwright.create()) { Browser browser playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false)); Page page browser.newPage(); page.navigate(https://example.com/checkbox-demo); // 定位三个多选按钮 Locator readingCheckbox page.locator(input[typecheckbox][valuereading]); Locator musicCheckbox page.locator(input[typecheckbox][valuemusic]); Locator sportsCheckbox page.locator(input[typecheckbox][valuesports]); // 1. 初始状态全部未选中 System.out.println(初始状态); System.out.println(阅读: readingCheckbox.isChecked()); System.out.println(音乐: musicCheckbox.isChecked()); System.out.println(运动: sportsCheckbox.isChecked()); // 2. 勾选“阅读”和“运动” readingCheckbox.check(); sportsCheckbox.check(); System.out.println(\n勾选后状态); System.out.println(阅读: readingCheckbox.isChecked()); // true System.out.println(音乐: musicCheckbox.isChecked()); // false System.out.println(运动: sportsCheckbox.isChecked()); // true // 3. 取消“运动”的勾选 sportsCheckbox.uncheck(); System.out.println(\n取消运动后状态); System.out.println(运动: sportsCheckbox.isChecked()); // false // 4. 批量操作示例一键全选如果需求需要 // 注意这里只是演示思路实际项目可能需要遍历 page.locator(input[typecheckbox][namehobby]).all().forEach(checkbox - { checkbox.check(); }); System.out.println(\n全选后状态); System.out.println(阅读: readingCheckbox.isChecked()); // true System.out.println(音乐: musicCheckbox.isChecked()); // true System.out.println(运动: sportsCheckbox.isChecked()); // true page.waitForTimeout(2000); browser.close(); } }}关键点-uncheck()只对多选按钮有效对单选按钮使用会报错因为单选不能取消勾选。- 批量操作时使用all()方法获取所有匹配的locator列表然后遍历处理。### 五、常见坑与最佳实践1.不要用click()代替check()click()可能触发按钮的额外事件如页面跳转而check()更安全。2.等待元素可见Playwright的check()和uncheck()默认会等待元素可交互但如果你先用了click()记得加等待。3.处理动态加载的按钮如果按钮是异步加载的可以用page.waitForSelector()确保元素存在。4.验证状态每次操作后务必用isChecked()验证避免测试假通过。### 总结通过今天的学习我们掌握了- 单选按钮和多选按钮的本质区别以及Playwright的对应API。- 使用check()和uncheck()安全操作按钮避免click()的陷阱。- 结合isChecked()进行状态验证确保测试的准确性。- 批量操作的技巧和常见注意事项。单选和多选按钮虽然简单但却是自动化测试中频繁出现的元素。熟练运用这些API能让你在编写测试用例时事半功倍。下一篇文章我们将继续深入探讨按钮的联动逻辑和参数化测试敬请期待如果你有任何疑问欢迎在评论区留言我会第一时间回复。别忘了点赞收藏我们下期见

相关新闻

Python调用豆包API实现高效中文OCR文字识别

Python调用豆包API实现高效中文OCR文字识别

1. 项目概述最近在做一个需要批量处理图片文字识别的项目,尝试了市面上几种OCR方案后,发现豆包大模型在中文场景下的识别准确率相当不错。这里分享下如何用Python调用豆包API实现图片文字识别的完整方案,包含环境配置、接口调用、结果处理等关…

2026/7/28 22:26:13 阅读更多 →
Takin 全链路压测平台深度解析:从设计哲学到生产落地

Takin 全链路压测平台深度解析:从设计哲学到生产落地

1. Takin 简介 Takin 是由 Shulie Technology(原数列科技)开源的全链路压测平台,专门为微服务架构下的生产环境性能测试而设计。它通过流量染色、数据隔离、影子库等核心技术,在不污染真实数据、不影响真实用户的前提下,直接在线上环境施加大规模并发流量,精准测量系统容…

2026/7/28 22:25:13 阅读更多 →
智能体技术演进与多技能动态编排实践

智能体技术演进与多技能动态编排实践

1. 智能体技术演进与2026范式转移当我在2023年第一次用GPT-4 API搭建对话机器人时,就意识到传统"一问一答"的交互模式即将被颠覆。三年后的今天,智能体(Agent)技术确实已经发展成由多种技能(Skill)组成的有机体系。这种从单一功能到技能组合的…

2026/7/28 22:25:13 阅读更多 →

最新新闻

CWT-CNN-GRU混合模型在工业故障诊断中的应用

CWT-CNN-GRU混合模型在工业故障诊断中的应用

1. 项目概述:当连续小波变换遇上深度学习在工业设备状态监测领域,我们常遇到这样的困境:传统振动信号分析方法难以捕捉早期故障特征,而人工特征提取又高度依赖专家经验。三年前我在某风机厂做故障诊断系统时就深有体会——当时用常…

2026/7/28 22:35:20 阅读更多 →
重新定义智能绘图:从工具到思维伙伴的转变

重新定义智能绘图:从工具到思维伙伴的转变

重新定义智能绘图:从工具到思维伙伴的转变 【免费下载链接】next-ai-draw-io A next.js web application that integrates AI capabilities with draw.io diagrams. This app allows you to create, modify, and enhance diagrams through natural language command…

2026/7/28 22:35:20 阅读更多 →
为什么你的RAG总在说谎?幻觉率超38.6%的3个隐蔽架构缺陷,修复后下降至1.2%

为什么你的RAG总在说谎?幻觉率超38.6%的3个隐蔽架构缺陷,修复后下降至1.2%

更多请点击: https://codechina.net 第一章:RAG幻觉问题的根源与量化评估 RAG(Retrieval-Augmented Generation)系统在提升大语言模型事实准确性的同时,仍频繁产出与检索文档矛盾或完全虚构的内容——即“幻觉”。其根…

2026/7/28 22:35:20 阅读更多 →
大模型训练数据黑箱曝光(2024全球首份AI训练集伦理溯源报告):92%企业未披露的版权与隐私雷区

大模型训练数据黑箱曝光(2024全球首份AI训练集伦理溯源报告):92%企业未披露的版权与隐私雷区

更多请点击: https://intelliparadigm.com 第一章:大模型训练数据黑箱曝光(2024全球首份AI训练集伦理溯源报告):92%企业未披露的版权与隐私雷区 训练数据来源的“三无”现状 2024年《AI训练集伦理溯源报告》基于对全…

2026/7/28 22:35:20 阅读更多 →
libcom中的Painterly Image Harmonization:让艺术风格图像融合不再困难

libcom中的Painterly Image Harmonization:让艺术风格图像融合不再困难

libcom中的Painterly Image Harmonization:让艺术风格图像融合不再困难 【免费下载链接】libcom Image composition toolbox: everything you want to know about image composition/compositing or object/subject insertion/addition/compositing. 项目地址: ht…

2026/7/28 22:35:19 阅读更多 →
2024年AI提示系统架构设计与工程实践

2024年AI提示系统架构设计与工程实践

1. 2024年AI提示系统竞争格局解析去年ChatGPT的爆发式增长让提示工程(Prompt Engineering)从边缘技术一跃成为AI应用的核心竞争力。作为从业8年的AI架构师,我亲眼见证了提示系统从简单的文本补全工具演变为复杂的人机交互中枢。2024年&#x…

2026/7/28 22:34:18 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻