《刚刚问世》系列初窥篇-JavaPlaywright自动化测试-- 操作单选和多选按钮 - 下篇详细教程前言在上一篇文章中我们初步了解了如何使用 Java Playwright 进行单选和多选按钮的基本操作。今天我们将深入探讨更复杂的场景动态加载的单选按钮、联动选择、多选按钮的全选/反选以及如何处理非原生自定义样式的按钮。这些技巧在实际项目中非常实用能帮你应对大部分前端交互挑战。## 准备工作环境与依赖确保你的项目中已经导入 Playwright 的 Java 依赖Maven示例xmldependency groupIdcom.microsoft.playwright/groupId artifactIdplaywright/artifactId version1.40.0/version/dependency同时建议使用最新版本的浏览器驱动Playwright 会自动管理。## 技巧一操作动态加载的单选按钮很多现代应用如 React、Vue的单选按钮是在用户交互后才渲染的。例如一个“选择支付方式”的弹窗需要点击触发后才出现。### 场景模拟假设有一个【立即支付】按钮点击后出现一组选项微信支付、支付宝、银行卡。### 核心代码示例Javajavaimport com.microsoft.playwright.*;import org.junit.jupiter.api.*;public class DynamicRadioTest { static Playwright playwright; static Browser browser; static Page page; BeforeAll static void setup() { playwright Playwright.create(); browser playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false)); page browser.newPage(); page.navigate(https://example.com/payment); // 假设的测试页面 } Test void testDynamicRadio() { // 1. 点击触发按钮让单选按钮组出现 page.click(button#showPaymentOptions); // 2. 等待单选按钮渲染完成使用定位器等待 page.waitForSelector(input[namepayment][typeradio], new Page.WaitForSelectorOptions() .setTimeout(5000)); // 最多等5秒 // 3. 选择第二个选项支付宝 // 使用 nth() 定位第二个 radio page.locator(input[namepayment][typeradio]).nth(1).check(); // 4. 断言验证支付宝被选中 boolean isAlipayChecked page.locator(input[valuealipay]).isChecked(); Assertions.assertTrue(isAlipayChecked, 支付宝应该被选中); System.out.println(✅ 动态单选按钮操作成功); } AfterAll static void tearDown() { browser.close(); playwright.close(); }}注释解析-waitForSelector确保动态元素加载完成。-nth(1)选取第二个 radio索引从0开始。-isChecked()验证是否被选中返回布尔值。## 技巧二联动单选与多选在实际业务中经常遇到“如果选了某个选项就禁用其他选项”的逻辑。例如选择“学生”身份后学历选项自动禁用“博士”。### 场景模拟一个表单包含身份选择单选学生/职工和学历选择多选本科/硕士/博士。当身份为“学生”时学历中的“博士”不可选。### 代码示例javaTestvoid testCascadingSelection() { // 1. 选择身份为“学生” page.locator(label:has-text(学生)).click(); // 假设 radio 被 label 包裹 // 2. 等待联动效果生效通常需要短暂延迟或用 waitForFunction page.waitForFunction(!document.querySelector(input[value\博士\]).disabled); // 3. 尝试验证“博士”是否被禁用 Locator phdCheckbox page.locator(input[value博士]); boolean isDisabled phdCheckbox.isDisabled(); Assertions.assertTrue(isDisabled, 博士选项应该被禁用); // 4. 切换身份为“职工” page.locator(label:has-text(职工)).click(); // 5. 等待状态恢复 page.waitForFunction(!document.querySelector(input[value\博士\]).disabled); // 6. 现在博士应该可用选中它 phdCheckbox.check(); Assertions.assertTrue(phdCheckbox.isChecked(), 博士应该被选中); System.out.println(✅ 联动逻辑验证通过);}要点说明-waitForFunction用于等待 JavaScript 条件满足这里是等待disabled属性变化。- 使用label:has-text()选择器更贴近用户视角也避免直接依赖id或name。## 技巧三多选按钮的全选、反选与批量操作很多列表页会提供“全选/反选”功能例如购物车、权限管理。我们需要模拟用户点击全选、验证所有子项被选中再取消全选。### 高效批量操作代码javaTestvoid testSelectAllAndDeselectAll() { // 假设页面有5个多选框id 从 item1 到 item5以及一个全选框 idselectAll // 1. 点击全选 page.check(#selectAll); // 2. 验证所有子项都被选中 for (int i 1; i 5; i) { Locator item page.locator(#item i); Assertions.assertTrue(item.isChecked(), 项目 i 应该被选中); } // 3. 取消其中一个子项模拟用户手动取消 page.uncheck(#item3); // 4. 验证全选框状态变为未选中 boolean isAllChecked page.locator(#selectAll).isChecked(); Assertions.assertFalse(isAllChecked, 取消子项后全选框应取消); // 5. 重新选中所有子项 page.locator(input[typecheckbox]).check(); // 批量选中所有 checkbox // 6. 验证全选框又变回选中 isAllChecked page.locator(#selectAll).isChecked(); Assertions.assertTrue(isAllChecked, 所有子项选中后全选框应选中); System.out.println(✅ 全选/反选逻辑完美运行);}关键点- 使用check()和uncheck()方法直接操作比click()更明确。- 批量操作时page.locator(input[typecheckbox]).check()会选中页面上所有 checkbox谨慎使用建议加范围限制。- 注意业务逻辑全选通常需要监听子项的变化Playwright 的isChecked()可以实时反映状态。## 技巧四处理自定义样式的按钮有些项目使用 div、span 或第三方库如 Material-UI模拟单选/多选这些元素不是原生input标签无法直接使用check()方法。此时需要模拟点击并验证 CSS 类的变化。### 实战代码javaTestvoid testCustomRadioButton() { // 假设页面使用 div 模拟单选按钮选中时添加 classselected // div classradio-option>
企业数字化 ERP 产品动态
相关推荐
LZHAM多线程压缩实战:加速大型文件处理的最佳实践 LZHAM多线程压缩实战:加速大型文件处理的最佳实践 【免费下载链接】lzham_codec Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster decompression speed, C/C 项目地址: https://gitcode.com/gh_mirrors/lz/lzham_codec
LZHAM是一… · 2026/11/16 0:52:36
react-hyperscript高级用法:组件组合、属性处理与事件绑定全攻略 react-hyperscript高级用法:组件组合、属性处理与事件绑定全攻略 【免费下载链接】react-hyperscript Hyperscript syntax for React.js markup 项目地址: https://gitcode.com/gh_mirrors/re/react-hyperscript
react-hyperscript是一个轻量级库,… · 2026/11/1 23:56:21
物业电工证在哪里考取多少钱能搞定别再交冤枉钱了 物业电工证在哪里考取多少钱能搞定别再交冤枉钱了 怕考不过白交培训费?我见过太多人花了几千块报班,结果连考试都没进,钱打水漂,人也灰心丧气。尤其是像你这样的三门峡在职建筑工人,天天在工地跑,想搞个物业电工证提升一下自己的竞争力,但又怕踩坑,怕… · 2026/11/16 6:00:42
贺州电工证在哪里审查良心建议:电工证审查流程全解析 贺州电工证在哪里审查良心建议:电工证审查流程全解析 你急需特种作业证才能上岗找工作,但贺州电工证在哪里审查?这成了很多求职者的燃眉之急。别急,下面我用 良心建议 的方式,给你一个清晰的流程和实用信息,助你顺利拿到电工证,早日走上工作岗位。… · 2026/11/16 6:00:42
电工证多久可以考好?真实经历告诉你怎么快速拿证 电工证多久可以考好?真实经历告诉你怎么快速拿证 你是不是也担心自己学历不高报不了电工证?别急,我这有真实经历,帮你把关。 一、报名阶段:学历门槛没你想象的高… · 2026/11/16 6:00:42
铜川考电工证详细流程多久拿证别怕白交培训费 铜川考电工证详细流程多久拿证别怕白交培训费 你是不是也担心自己报名考电工证,结果考试挂了,培训费打水漂?别慌,铜川考电工证详细流程其实不难搞懂, 多久拿证 也取决于你准备得是否充分,关键是要知道怎么走流程、怎么备考。… · 2026/11/16 6:00:42
广西电工证去哪里换怎么考,工地太忙根本没时间复习考试 广西电工证去哪里换怎么考,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这几乎是每个一线施工人员的真实写照。尤其像广西这样的建筑大省,电工证不仅关乎个人职业发展,更是安全作业的“通行证”。很多人因为不懂【在哪考】,或是错过了复审时… · 2026/11/16 5:59:42
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/16 3:21:55
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/16 3:01:18
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
电工证培训的通知在哪考?别再被中介骗了 电工证培训的通知在哪考?别再被中介骗了 你是不是还在为 电工证培训的通知在哪考 发愁?网上搜了一堆信息,结果要么是挂羊头卖狗肉的培训机构,要么就是打着“包过”旗号的骗子?别急,今天我来给你讲讲, 电工证培训的通知… · 2026/11/16 0:00:34
电工证去哪个部门考核值不值得考 信阳转岗人真实经历分享 电工证去哪个部门考核值不值得考 信阳转岗人真实经历分享 怕考不过白交培训费?你不是一个人,信阳的李师傅去年刚转岗做电工,就因为没搞清楚电工证去哪个部门考核,差点交了8000块的培训费。别急,下面这份实操考试全攻略,告诉你电工证到底值不值得考… · 2026/11/16 0:00:34
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05