前言
自动化测试领域目前最火热的自动化框架非Playwright
莫属,而在 Playwright 中,对于自动化测试中极为关键的页面元素定位,相比传统的Selenium
等工具, 它引入了一个新的元素定位方法 getByRole
,也就是它充分利用了W3C 定义的 ARIA Roles对象, 来进行元素的识别。在提升元素识别灵活性及识别效率的同时,其实也同步对页面的无障碍合规进行了验证。 比如:
// 定位名为"搜索"的按钮
await page.getByRole('button', {
name: '搜索' }).click();
// 定位复选框并勾选
await page.getByRole('checkbox', {
name: '同意条款' }).check();
// 定位文本输入框并填写内容
await page.getByRole('textbox', {
name: '用户名' }).fill('testuser');
// 定位下拉选择框并选择选项
await page.getByRole('combobox', {
name: '国家' }).selectOption('中国');
而目前,AI 越来越多地参与到我们实际工作中,正如前文 【未来已来,AI测试工程师已就位,主动执行测试并汇总bug!】中展示的,AI 通过 mcp server
驱动页面完成自动化测试已经具备相当的落地可能。在这个文章后,很多小伙伴对于 AI 如何对页面元素进行识别和定位,并通过工具来驱动执行,实际应用后效果能否达到预期抱有较大的怀疑。
其实这里,W3C
web规范中的ARIA
标准,对于将页面对象结构化展示给AI,便于AI对页面完成分析,有着重要意义。 本文,我们就来探讨一下ARIA
标准,及其在AI驱动自动化测试中的重要作用。
什么是ARIA?
定义
WAI-ARIA (Web Accessibility Initiative – Accessible Rich Internet Applications),即 web无障碍倡议-无障碍富互联网应用标准, 是一个让Web应用可以更好支持残障人士使用的规范。
而ARIA Roles是W3C WAI-ARIA 规范中定义的一组属性,用于描述Web元素的功能和目的,帮助辅助技术(如屏幕阅读器)更准确地理解和传达页面内容。**ARIA Roles **通过role
属性添加到HTML元素中,例如<div role="button">
表示该div元素应被视为按钮。
标准的演进及ARIA的优势
该标准经历了三个重要发展阶段:
- 2008年:W3C首次发布ARIA 1.0
- 2014年:ARIA 1.1引入新角色如
searchbox
、switch
- 2021年:ARIA 1.2增加了
comment
、mark
等数字内容相关Role
和传统 UI 自动化测试的比较:
维度 | 传统UI测试 | 基于ARIA的测试 |
---|---|---|
元素识别依据 | DOM结构/视觉特征 | 语义角色/功能属性 |
维护成本 | 高(随UI变化频繁更新) | 低(角色定义更稳定) |
跨平台一致性 | 依赖渲染引擎 | 标准化行为 |
无障碍支持 | 需额外验证 | 内置支持 |
ARIA Roles类别
根据W3C规范,ARIA Roles可分为以下几大类:
-
Widget Roles:描述交互式UI组件
button
:可点击的按钮checkbox
:复选框radio
:单选按钮textbox
:文本输入框combobox
:下拉组合框slider
:滑块控件
-
Document Structure Roles:描述页面内容结构
heading
:标题 (h1-h6的替代)list
/listitem
:列表和列表项table
/row
/cell
:表格结构img
:图像
-
Landmark Roles:标识页面主要区域
banner
:页眉navigation
:导航区域main
:主要内容search
:搜索区域contentinfo
:页脚信息
-
Live Region Roles:动态内容更新区域
alert
:重要且需立即通知的信息status
:操作状态反馈timer
:计时器或计数器
除基础Role外, 现代Web应用常用的高级角色还包括:
-
复合组件角色:
<div role="tree" aria-label="文件浏览器"> <div role="treeitem" aria-expanded="true">文档 <div role="group"> <div role="treeitem">工作文档.docx</div> </div> </div> </div>
-
实时通信角色:
<div role="feed" aria-busy="false"> <article role="article" aria-posinset="1" aria-setsize="10">...</article> </div>
-
拖放操作角色:
<div role="draggable" aria-grabbed="false">可拖动项</div> <div role="droppable"></div>
ARIA在 AI 驱动测试中的核心作用
语义理解增强
AI 测试系统通过ARIA角色建立的语义网络,能更准确地理解UI功能: