用途:为 UI5 Web Components 编写基础的 Cypress 可视化测试,测试文件放在 packages/main/cypress/specs/visuals/(或 fiori 包对应目录)下,通过截图记录组件在关键状态下的外观,而非断言 DOM 内部结构。
主要能力与规则:每个文件只测试一个组件,文件名用组件的 PascalCase 命名(如 ComponentName.cy.tsx);子组件需按需包裹最小必需父容器(如 ListItemStandard 包在 List 中、Tab 包在 TabContainer 中),并一同导入父组件。
导入路径:main 包用 ../../../src/Xxx.js(三级向上),fiori 包用 ../../src/Xxx.js(两级向上);fiori 组件需要 main 包组件时从 dist 导入(如 @ui5/webcomponents/dist/Button.js);图标必须用命名导入并把值传给 icon 属性,不能用副作用导入加字符串。
编写前应先阅读同名的功能测试文件,参考其中的属性组合、交互、自定义命令与插槽用法。
结构:每个有意义的视觉状态写一个 it,标准用例包括初始状态、紧凑模式(在包裹 div 上加 data-ui5-compact-size)、打开/交互状态;可选叠加额外用例(下拉项聚焦、输入过滤、已选 token、valueState、空列表、长内容换行等)。valueState 只覆盖 Negative、Critical、Positive、Information,默认 None 已由基础状态覆盖;始终提供 valueStateMessage 插槽。
交互与选择器:优先使用已有自定义命令(如 .ui5DatePickerValueHelpIconPress()、.ui5MenuOpen()、.ui5DialogOpened() 等),无命令时用 realClick();触发交互后立即调用 cy.screenshot(),无需断言。选择器用属性选择器如 cy.get("[ui5-multi-combobox]"),而非标签名。日期/时间选择器的原生 input 位于两层 shadow DOM 下,需用 .shadow().find("ui5-datetime-input").shadow().find("input").realClick()。插槽内容必须作为带 slot 属性的子元素书写,不能作为 JSX 属性传入。
限制:不需要覆盖功能测试的全部用例,也不为无可见差异的琐碎属性或无新视觉状态的情况单独写测试;具体工程配置与运行命令暂未提供。