1

我是使用Subliminal编写集成测试的新手。我想测试用户点击按钮后是否显示了某个视图控制器。测试这个的最好方法是什么?

  • 我可以使用 Subliminal 获得最顶层的视图控制器并找到它的标题吗?
  • 我可以得到最顶层的视图控制器并比较它的类吗?
  • 我可以给导航控制器的标题标签吗?

目前我只设法通过其可访问性标签获取导航控制器的标题标签,如下所示:

SLElement *titleLabel = [SLElement elementWithAccessibilityLabel:@"Welcome"]; SLAssertTrue([[UIAElement(titleLabel) label] isEqualToString:@"Welcome"], @"It should show the Welcome screen");

但那时我只是在测试是否@"Welcome" == @"Welcome". 欢迎标签也可能出现在其他视图控制器的视图层次结构中。

如果在用户操作之后显示的视图控制器确实是我所期望的视图控制器,那么您将采用什么方法来测试和断言?

谢谢!

4

1 回答 1

2

要识别可访问性层次结构中无法通过其可访问性标签、值和特征的组合来描述(或无法唯一描述)的对象,最好的办法是使用[SLElement elementMatching:withDescription:]. 该方法是这样使用的:

SLElement *titleLabel = [SLElement elementMatching:^BOOL(NSObject *obj) {
    // Code to test objects (obj parameter) in the accessibility hierarchy,
    // and return YES or NO depending on whether or not obj is the particular
    // object you're looking for.
} withDescription:@"A description of the view for Subliminal to use in logs/error reports"];

匹配块中的内容取决于您的应用程序的结构以及您要识别的确切内容,但请记住,您可以在其中放置基本上任意代码来评估输入可访问性元素obj。您可以检查obj.accessibilityLabel该标签是否等于@"Welcome"then (验证它obj是 a UIView)并沿着视图层次结构查找UINavigationBar证明obj存在于导航控制器中的特定视图或类(可能是)。或者您可以只测试 的类obj并查找仅在您尝试验证的特定导航控制器中出现的内容。

另一个可以用来解决此类问题的工具是 Subliminal app-hook。您可以在应用程序中注册对象(类特定实例)以响应来自潜意识测试的消息。因此,例如,如果您的应用程序委托知道此视图控制器是否显示,您可以注册应用程序委托以响应指示视图控制器是否显示的消息,并且您可以在测试代码中使用SLAskAppYesNo找出视图控制器是否显示。

于 2013-11-20T20:51:03.083 回答