写点什么

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

2018 年 4 月 10 日

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

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

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

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

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

复制代码
id<gtxchecking> 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;
}];
</gtxchecking>

在实现上,低层级的可访问性检查是通过苹果自身的 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

2018 年 4 月 10 日 19:001113

评论

发布
暂无评论
发现更多内容

初识 Docker 与安装 | Docker 系列

AlwaysBeta

Docker

近邻算法介绍

黄大路

数据挖掘 数据分析

食堂就餐卡系统设计

上山砍柴

极客大学架构师训练营

架构方法:运用合适的工具表达设计

NORTH

极客大学架构师训练营

UML统一建模语言

哼哼

对文化的态度,早在日常中

zhoo299

历史 随笔 文化

B端产品经理养成记(3):访谈

涛哥

产品经理

愿你也能穿越熊熊烈火,飞往你的山

Janenesome

读书笔记 思考

中小型城市商业银行数字化转型实践(四)业务中台建设思路和路径

泡菜小仙

行业资讯 银行数字化转型

食堂就餐卡系统设计

述职报告的一些建议

黄大路

职场

「架构师训练营」第1周作业 - 食堂就餐卡系统设计

guoguo 👻

极客大学架构师训练营

架构设计文档之食堂就餐卡系统设计

itrickzhang

架构设计 架构文档 架构样例 架构分析 架构总结

MySQL 笔记(一)基础架构

奈何花开

Java MySQL

做正确的事情什么时候都不晚

Neco.W

学习 导师

【摘】Git-从零单排 03期

卡尔

git 效率工具 工具链

现在的我们想要获得成功,除了付出努力之外,还要具备见识。

叶小鍵

「翻译」测试用例最佳实践

HackMSF

翻译 单元测试

话说 Java vs C#

阿喜伯

test

PQY

练习--食堂就餐卡系统技术方案设计

jason

产品周刊 | 第 18 期(20200607)

Herbert

产品 产品经理 产品设计 产品推荐

体验碎片-06/06

黄大路

产品经理

在 Windows WSL 2 中使用 Docker Desktop

FeiLong

Docker WSL2

新媒体小编一年工作心得

彭宏豪95

职场 感悟 工作

我是这样给同事分析幂等性问题的

flyer0126

幂等性 服务设计

Spark Launcher Java API提交Spark算法

杨仪军

spark spark launcher

人生元编程

欧雷

人生 程序人生 个人感悟

游戏夜读 | 核心能力是什么?

game1night

线上故障处理实践

心平气和

故障分析 故障定位

Backend Roadmap

陈皮

Backend Developer

2021年,算法还“香”吗?

2021年,算法还“香”吗?

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