跳到主内容

辅助功能测试

有关 Flutter 无障碍测试的信息。

无障碍法规

#

为确保您的应用符合无障碍标准,请参照公共标准进行检查,例如网络内容无障碍指南 (WCAG) 2EN 301 549,并使用 自愿性产品无障碍模板 (VPAT) 等资源对您的产品进行自我评估。有关这些法规的更多详细信息,请查看主要的无障碍页面

检查无障碍支持

#

我们建议使用自动化无障碍扫描工具来测试以下内容

  • 针对 Android

    1. 安装 Android 版 Accessibility Scanner (无障碍扫描工具)
    2. 通过 Android 设置 > 无障碍 > Accessibility Scanner > 开启 来启用无障碍扫描工具。
    3. 导航至无障碍扫描工具的“复选框”图标按钮以启动扫描。
  • 针对 iOS

    1. 在 Xcode 中打开 Flutter 应用的 iOS 文件夹。
    2. 选择一个模拟器作为目标,然后点击 Run (运行) 按钮。
    3. 在 Xcode 中,选择 Xcode > Open Developer Tools (打开开发者工具) > Accessibility Inspector (无障碍检查器)
    4. 在无障碍检查器中,选择 Inspection (检查) > Enable Point to Inspect (启用点选检查),然后选择运行中 Flutter 应用的各个用户界面元素,以检查它们的无障碍属性。
    5. 在无障碍检查器中,选择工具栏中的 Audit (审计),然后选择 Run Audit (运行审计) 以获取潜在问题的报告。
  • 针对 Web

    1. 打开 Chrome DevTools(或在其他浏览器中使用类似工具)。
    2. 检查 semantics host 下的 HTML 树,其中包含由 Flutter 生成的 ARIA 属性。
    3. 在 Chrome 中,“Elements (元素)”选项卡中有一个“Accessibility (无障碍)”子选项卡,可用于检查导出到语义树的数据。

在移动设备上进行无障碍测试

#

使用 Flutter 的 Accessibility Guideline API (无障碍指南 API) 测试您的应用。此 API 会检查您的应用 UI 是否符合 Flutter 的无障碍建议。这些建议涵盖了文本对比度、目标尺寸和目标标签的相关规范。

以下代码片段展示了如何在名为 AccessibleApp 的示例 widget 上使用 Guideline API

test/a11y_test.dart
dart
import 'package:flutter_test/flutter_test.dart';
import 'package:your_accessible_app/main.dart';

void main() {
  testWidgets('Follows a11y guidelines', (tester) async {
    final SemanticsHandle handle = tester.ensureSemantics();
    await tester.pumpWidget(const AccessibleApp());

    // Checks that tappable nodes have a minimum size of 48 by 48 pixels
    // for Android.
    await expectLater(tester, meetsGuideline(androidTapTargetGuideline));

    // Checks that tappable nodes have a minimum size of 44 by 44 pixels
    // for iOS.
    await expectLater(tester, meetsGuideline(iOSTapTargetGuideline));

    // Checks that touch targets with a tap or long press action are labeled.
    await expectLater(tester, meetsGuideline(labeledTapTargetGuideline));

    // Checks whether semantic nodes meet the minimum text contrast levels.
    // The recommended text contrast is 3:1 for larger text
    // (18 point and above regular).
    await expectLater(tester, meetsGuideline(textContrastGuideline));
    handle.dispose();
  });
}

要尝试这些测试,请在使用 flutter create 创建的新应用上运行它们。该应用主屏幕上的每个按钮都充当一个可点击的目标,其文本以 18 号字体渲染。

您可以将 Guideline API 测试与其他 Widget 测试一起添加,也可以将其放入单独的文件中,例如本例中的 test/a11y_test.dart

在 Web 上进行无障碍测试

#

您可以通过在 profile 和 release 模式下使用以下命令行标志,可视化为 Web 应用创建的语义节点,从而调试无障碍功能

flutter run -d chrome --profile --dart-define=FLUTTER_WEB_DEBUG_SHOW_SEMANTICS=true

激活该标志后,语义节点会出现在 widget 之上;您可以验证语义元素是否放置在正确的位置。如果语义节点位置不正确,请提交 Bug 报告