谷歌开源针对 iOS 的可访问性测试框架

阅读数:104 2018 年 4 月 10 日

话题:开源移动GoogleiOS语言 & 开发

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

谷歌 GTXiLib是针对 iOS 的可访问性自动化测试框架,现在它已经基于 Apache 许可证开源。GTXiLib 是使用 Objective-C 编写的,并且能够与Xcode的单元测试基础设施进行集成。

GTXiLib 与 Xcode 的集成是通过XCTest单元测试框架实现的。我们可以为任意的测试类安装 GTXiLib,并注册一系列在执行单元测试时希望一起执行的可访问性检查。如果有可访问性失败的话,对应的单元测试也会失败。

GTXiLib 目前所支持的可访问性检查致力于确保按钮上都存在文本、标签的文本没有标点、可点击区域至少有一个最小的空间并且文本有足够的高度。

GTXiLib 还为开发人员提供了构建自定义检查的方式,这是通过checkWithName:block: API 来实现的。如下就是一个简单版本的可访问性检查,它会确保某个元素上存在一个标签:

  id check = [GTXCheckBlock GTXCheckWithName:"LabelMustBePresent"
                                   block:^BOOL(id element, GTXErrorRefType errorOrNil) {
    NSError *error;
    id accessibilityLabel = [element accessibilityLabel];
    if (![accessibilityLabel isKindOfClass:[NSString class]]) {
        *errorOrNil = // set error;
      }
      // Fail
      return NO;
    }
    return NO;
  }];

在实现上,低层级的可访问性检查是通过苹果自身的UIAccessibility 框架来完成的,以上面的例子来说明,在这里使用了accessibilityLabel。但是,GTXiLib 并不局限于只使用 UIAccessibility 方法,在它们的内部运行中,可以使用任意可用的框架。

要为测试类安装 GTXiLib,只需要在它的+setup方法添加如下这样代码即可:

+ (void)setUp {
  [super setUp];
  // ... 其他的 setup 代码(如果有的话)放到这里 
  // 将 GTX 安装到 *this* 测试类的所有测试中 
  [GTXiLib installOnTestSuite:[GTXTestSuite suiteWithAllTestsInClass:self]
                       checks:[GTXChecksCollection allGTXChecks]
            elementBlacklists:@[]];
}

通过这种方式,在这个测试类中所定义的每个单元测试都会进行可访问性检查。如果你想要在可访问性检查中排除一些 UI 元素的话,那么可以将它们放到elementBlackLists数组中。如果你想要对已有的代码库重构可访问性测试的话,这会非常有用,因为这样可以将无法控制的或者稍后某个时间点才能修正的元素排除在外。

GTXiLib 是基于 XCTest 的,这意味着它能够与任意基于 XCTest 的框架兼容,比如 Google 自己的UI 自动化测试框架 EarlGrey

借助cocoapods,GTXiLib 能够非常容易地添加到项目之中。

查看英文原文Google Open Sources Accessibility Test Framework for iOS