从accessibilityLabel获取UIVIew以实现KIF自动化

时间:2013-05-10 15:35:02

标签: ios uiview accessibility kif-framework kif

我正在使用KIF Framework进行功能性UI测试。假设我在当前的iPad屏幕上,其中许多视图(标签,按钮,文本字段等)都分配了唯一的可访问性标签。如果我有accessibilityLabel字符串方便,我可以使用它从当前屏幕获得对相关UIView的引用吗?

例如,[[UIView alloc] viewWithTag:5]会返回UIVIew提供的tag。我正在寻找类似[[UIView alloc] viewWithAccessiblityLabel:@"my label"]的内容。

P.S:我知道蛮力方法是以递归方式迭代self.subviews中的所有视图,并比较可访问性标签以找到我要搜索的内容。我正在寻找更好的方法。

3 个答案:

答案 0 :(得分:11)

实际上有一种非常简单的方法来实现您在使用KIF进行UI自动化时所描述的内容,尽管KIF并未明确表明这是可行的。 waitForViewWithAccessibilityLabel会在找到视图时返回对该视图的引用:

夫特

 let view = tester().waitForView(WithAccessibilityLabel: "My label")

目标C

UIView *view = [tester waitForViewWithAccessibilityLabel:@"My label"];

一旦被发现,非常有用。

答案 1 :(得分:9)

我正在使用KIF进行UI自动化!以下是从给定的accessibilityLabel获取视图的步骤。方法viewContainingAccessibilityElement:element是UIAccessibilityElement类的扩展方法。

UIAccessibilityElement *element = [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:label];
UIView *view = (UIView*)[UIAccessibilityElement viewContainingAccessibilityElement:element];

答案 2 :(得分:2)

对我来说(从您的评论中说:“我需要在自动化UI测试中使用此功能”),就像您正在寻找accessibilityIdentifier一样。来自文档:

  

UIAccessibilityIdentification协议用于将唯一标识符与用户界面中的元素相关联。您可以使用在UI Automation脚本中定义的标识符,因为accessibilityIdentifier的值对应name UIAElement方法的返回值。