大多数浏览器和
Developer App 均支持流媒体播放。
-
对你的 App 进行辅助功能审核
了解如何在每次构建时都对 App 进行辅助功能测试。了解如何使用 XCTest 进行辅助功能自动审核及如何解读审核结果。我们还将分享辅助功能 API 的强化功能,来帮助你提高 UI 测试覆盖率。
章节
- 0:40 - Discover accessibility audits
- 2:52 - Add audits to your UI tests
- 9:34 - Filter audit issues
- 11:41 - Considerations when running audits
- 12:59 - Expose elements hidden from accessibility to UI tests
资源
相关视频
WWDC18
-
下载
♪ ♪
Bhavya:嗨 我是 Bhavya Accessibility 团队的一名工程师 今天 我们将重点讲解 如何在你的 App 中 进行辅助功能审核 首先 我们会介绍如何轻松的 在你的 UI 测试中进行自动化 辅助功能审核 然后 我们会讲解如何 呈现元素 来使我们 同时拥有良好的测试体验 和辅助功能体验 我们先来介绍辅助功能审核 测试是 App 开发过程中的 基本组成部分 通过编写测试程式 我们可以 在推行代码前找到并修复问题 产品质量就是这样得到保证的 提供辅助功能的产品是高质量产品 大约七分之一的人有残障问题 影响了他们与世界和设备交互的方式 人们使用如旁白这样的工具 以最适合他们的方法 来和你的 App 交互 交付高质量产品意味着 交付一个每个人都可使用的 App 让人们通过你的 App 获得最佳体验 对于辅助功能这一课题的深度和复杂 我深有体会 我们一起来看看辅助功能审核 是如何把这一切化繁为简的吧 Xcode 附带一个 辅助功能检查器工具 这一工具帮助你轻松 发现、诊断并修复 App 中的辅助功能问题 一个有效利用这一工具的方法就是 在我的 App 上进行审核 检查器可以审核 你 App 中的每个视图 来检测辅助功能的常见问题
这是我的示例 App 它有两个标签 第一个标签提供了励志短句 第二个标签让我可以 记录一些自己的想法 在短句标签处 励志短句以文本视图展示 这一文本视图置于一个背景图片之上 还有一个 New Quote 按钮 用来更新短句 我可以开启辅助功能检查器 来审核我的 App 检查器检测各种各样的问题 比如提供充足的元素描述 及确保合适的对比度 它会把检测到的问题 展示在一个表格里 每一个问题都有详细描述 辅助功能审核很强大 而且它现在实现了自动化 现在你可以在你的 UI 测试中进行审核了 在你的 XCUIApplication 上 调用 performAccessibilityAudit 就会对当前视图的 辅助功能问题进行审核 就像检查器一样 无需添加 assertion: 如果检测到任何问题 你的测试会自动失败 我们通过一个例子来快速了解一下
我在 Xcode 中打开了我的演示 App 它是用 Swift 编写的 使用了标准的 UIKit 视图 我已经写了几个测试代码 来证实屏幕上的元素是存在的 比如 testQuoteTabView 用来证实 短句标签的图片和文字视图是存在的 要注意的是这些测试 也帮我们检测辅助功能 为了让 XCTest 找到这些视图 它们必须是辅助功能元素 这意味着如果你的 UI 测试 可以找到这些元素 那我们的辅助技术也可以 这样的辅助功能测试是不错 但我想在我的测试中加入一些审核 以确保我会找到所有的问题 我会创建另一个 testAccessibilityQuoteTabView 测试 我会做一些准备工作 来启动我的 App 然后导到 Quote 标签
最后我会在 App 上调用 performAccessibilityAudit
审核可报告多个问题 所以为了使我的测试 在第一次失败后能继续报告问题 我会把 continueAfterFailure 设为 true
像这样 我们点击菱形测试键来运行测试
看来我的测试失败了 问题报告在 Xcode 源编辑器内的相应位置 我的审核检测到两个问题: 元素没有描述 及标签不可读 我们来搞清楚问题元素是什么 通过 Report 导航 我能更深入了解这两个问题 点击 Tests 然后点击测试旁的显示三角形 这里显示了测试运行和问题详细报告 对于第一个问题“元素没有描述” 我可以双击 element screenshot 显示出图片视图没有描述 第二个问题也可以这样做 显示出文本视图上的标签不可读 我们来了解一些怎么处理 审核发现的这些问题 了解每一个问题 并逐个解决是很重要的 因为它们可能对 依赖辅助技术的 App 用户 造成实质性的交互或导航问题 同样重要的是意识到 你可能会遇到一些 本该排除掉或忽略的问题 可能是一个误报或预期行为 辅助功能审核可以轻松忽略这些问题 稍后我们会讲一个忽略问题的例子 进一步了解辅助功能的最佳实践 请查看我们 2018 年的专题 “提供卓越的辅助功能体验” 我们来分析审核发现的第一个问题: 文本视图上的辅助功能标签不可读 如果我在 Storyboard 中检查文本视图 可以看到辅助功能标签被设为了 QUOTE_TEXTVIEW 依赖如旁白的辅助技术的用户 会先听到辅助功能标签 然后才是辅助功能值 像这样 旁白:QUOTE_TEXTVIEW “活在当下 让每天都变得有意义” Bhavya:标签听起来不怎么样 而且 其实旁白应该跳过它 直接读短句 我可以删除辅助功能标签 但这样我的 UI 测试会崩溃 因为测试需要这个标签 来识别文本视图 这一字符串最好设为辅助功能标识符 辅助功能标识符 使你在编写 UI 测试时 唯一标识一个元素 而不影响辅助功能或 UI 体验 转到 Storyboard
选择我的文本视图 从标签处剪切这一字符串 粘贴到标识符处
审核发现的另一个问题是 图片视图没有描述 一般来说 有简洁的描述性标签 来访问图片是很重要的 但是在我的 App 中 这个图片是装饰性背景 不属于主体内容 也不会给短句本身增加任何额外含义 旁白这样的技术 最好跳过这个图片视图 我可以通过在视图控制器的视图中 覆写辅助功能元素来实现 把元素仅设为 quoteTextView 和 newQuotebutton 旁白就不会在图片视图上停留了 我们现在到 Xcode 里完成它 我会到视图控制器文件中 设定 accessibilityElements
棒极了 我们回到审核 并运行测试 看看所有问题是否得到了解决
不错 我的审核现在通过了 你会注意到我现在 有一个 UI 测试是失败的 这个我们稍后会讲 在添加辅助功能审核时 你可能会遇到需要被排除掉的问题 比如 我的审核发现的问题是 某个特定标签的对比度过低 了解情况后发现对比度没有什么问题 这其实是一个误报 我们看看如何忽略这种问题 函数 performAccessibilityAudit 有额外的参数设置 第一个参数用来表明要运行的 审核类别集合 比如动态类型和对比度 这与辅助功能检查器中 你所熟知的类别相同 在这个例子中 我仅审核 动态类型和对比度问题 第二个参数是一个闭包 所有审核发现的问题 都会调用这一闭包 由我们来选择 哪些问题要忽略 哪些问题要报告 首先我们来定义一个 shouldIgnore 变量并把它设为 false 默认情况下 问题不会被忽略 假如我想忽略一个标签为“My Label”的 元素的对比度
我可以用 issue.element 把 XCUIElement 和问题关联起来 如果这个元素有“My Label”这一标签 且问题的类型是对比度 那我们就找到了要忽略的问题 把 shouldIgnore 设为 true 即可 设为 true 意味着 我们希望忽略这个问题 最后 我会返回 shouldIgnore 如果没有满足以上条件 那么 shouldIgnore 就是 false 说明问题会被报为失败 以上就是所有内容 你可以从这个例子进行扩展 并通过使用其它性质 比如元素类型或标识符 来自定义忽略的标准 当你给自己的 App 写辅助功能审核时 记住以下几点 审核仅限于屏幕上的元素 这意味着为了全部覆盖 你应该给你 App 可能展现的 所有不同视图都添加辅助功能审核 在我的示例 App 中 我应该加入另一个测试 导到第二个标签并进行审核 给多个测试添加审核的快捷方法是 在 teardown 中覆写并进行审核 你可以用 class 来定义变量 这样 测试可以覆写这些变量 把它们加入或排出审核 同时允许测试 对要忽略的问题自定义闭包 测试计划能很好的整合 你项目里针对审核的测试 它们让你选择性开启测试计划中的 测试目标、案例或各别方法 最后 审核不应取代 辅助技术的实体测试 毕竟 通过开启如旁白 或动态类型的辅助技术来 测试你的 App 是确保 高质量体验的最佳方法 你可以同时实现好的辅助功能和测试 而无需在任何一方面做出妥协 自动化元素让你可以专门呈现 需要自动化的元素 而不影响它们的辅助功能 现在 在 UIKit 中 你可以利用这一 API 来专门呈现需要自动化的元素 同时又可以自定义这些元素的 辅助功能 记得之前 当我修复了审核检查出的问题时 我的一个 UI 测试也出错了 图片视图好像不存在了 它在我的 UI 测试中消失了 因为它在辅助功能中也消失了 由于这个图片视图是装饰性的 所以我覆写了辅助功能元素 来把它排出辅助功能 然而 这样一来 我也把它从 UI 测试里排出了 我们来看看自动化元素 如何帮我把图片视图 呈现到 UI 测试中 我会来到 Xcode 的视图控制器
把视图控制器中视图的 automationElements 设为图片视图 记住当覆写 automationElements 时 你需要详述 所有需要呈现自动化的元素
这意味着我也要把 文本视图和按钮加入我的列表 当覆写自动化元素时 你覆写的是现有的 且已经自动化了的元素 我们来运行测试 看看这次是否也能通过
太棒了 我们已经可以写出 很棒的 UI 及辅助功能测试 也能修复一些辅助功能问题了 辅助功能审核是给你的 App 添加简单的自动化 辅助功能测试的绝佳方法 修复审核辨识出的问题 能确保每个人都可以体验你的 App 不用在两者之间作取舍 就能创造绝佳的 辅助功能和自动化体验 自动化元素使你呈现针对于你的 UI 测试的元素 而不影响辅助功能体验 我推荐你在自己的 UI 测试中 添加 performAccessibilityAudit 这一便捷指令 谢谢大家
-
-
2:52 - Add an accessibility audit to a UI test
func testAccessibility() throws { let app = XCUIApplication() app.launch() try app.performAccessibilityAudit() }
-
8:40 - Customize elements available to assistive technologies
view.accessibilityElements = [quoteTextView, newQuoteButton]
-
9:57 - Filter specific issues from accessibility audits
try app.performAccessibilityAudit(for: [.dynamicType, .contrast]) { issue in var shouldIgnore = false // ignore contrast issue on "My Label" if let element = issue.element, element.label == "My Label", issue.auditType == .contrast { shouldIgnore = true } return shouldIgnore }
-
14:07 - Customize automation elements available to UI tests
view.automationElements = [imageView, quoteTextView, newQuoteButton]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。