我刚开始使用Subliminal编写集成测试。我想测试用户单击按钮后是否显示某个View Controller。最好的测试方法是什么?
目前,我仅通过其可访问性标签设法获得了导航控制器的标题标签,如下所示:
SLElement *titleLabel = [SLElement elementWithAccessibilityLabel:@"Welcome"];SLAssertTrue([[UIAElement(titleLabel) label] isEqualToString:@"Welcome"], @"It should show the Welcome screen");
但是然后我只是在测试
@"Welcome" == @"Welcome"
。并且欢迎标签也可能出现在其他视图控制器的视图层次结构中。如果在用户操作之后显示的View Controller确实是我期望的View Controller,那么您将如何测试和断言?
谢谢!
最佳答案
要在可访问性层次结构中标识无法通过其可访问性标签,值和特征的组合来描述(或无法唯一描述)的对象,最好的选择是使用[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"
(验证obj
是UIView
),然后在视图层次结构中查找特定的视图或类(可能是UINavigationBar
),以证明obj
位于导航控制器内部。或者,您可以仅测试obj
的类,然后查找仅出现在您要验证的特定导航控制器中的内容。可以用来解决此类问题的另一个工具是Subliminal app-hook。您可以在应用程序中注册对象(类或特定实例)以响应来自Subliminal测试的消息。因此,例如,如果您的应用程序代表知道是否显示了该视图控制器,则可以注册该应用程序代表以响应指示是否显示了视图控制器的消息,并且可以在测试代码中使用
SLAskAppYesNo
找出是否显示了视图控制器。关于ios - 如何在Subliminal中声明UINavigationController的标题文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20098964/