使用EarlGrey按导航栏上的后退按钮

时间:2016-03-10 23:49:27

标签: ios testing earlgrey

我试图编写一个使用后退按钮的测试时遇到了一些麻烦,希望有人能指出我正确的方向。

我的观点非常标准我有一个UINavigation控制器作为我的根视图控制器,我将它推到一个点,然后需要返回。

我试图让匹配器找到导航栏中的后退按钮,但没有取得任何成功。 我试图使用标签,id和值,在后退按钮项上设置辅助功能标识符并没有产生匹配,即使它适用于我的其他界面元素。

[self.navigationItem.backBarButtonItem setAccessibilityIdentifier:@"Back"];

在我的测试中我有以下内容:

// Press the back button

id<GREYMatcher> backMatcher =
    grey_allOf(grey_accessibilityID(@"Back"), grey_sufficientlyVisible(), nil);

[[EarlGrey selectElementWithMatcher:backMatcher] performAction:grey_tap()];

我使用断点和PO深入研究,发现后退按钮的accessibilityLabel确实设置为@&#34;返回&#34;但它也与下面的代码不匹配。

// Press the back button

id<GREYMatcher> backMatcher =
    grey_allOf(grey_accessibilityID(@"Back"), grey_sufficientlyVisible(), nil);

[[EarlGrey selectElementWithMatcher:backMatcher] performAction:grey_tap()];

2 个答案:

答案 0 :(得分:1)

问题是您需要更具体的匹配器才能从Back获取UINavigationController按钮。如果查看测试失败时转储的ui层次结构,您会注意到多个元素具有可访问性标签Back。因此,您需要使用grey_accessibilityTrait匹配器来缩小搜索范围,如下所示:

id<GREYMatcher> matcherForBackButton =
    grey_allOf(grey_accessibilityLabel(@"Back"),
               grey_accessibilityTrait(UIAccessibilityTraitButton),
               nil);

[[EarlGrey selectElementWithMatcher:matcherForBackButton]
    performAction:grey_tap()];

答案 1 :(得分:-1)

对于Swift,您可以使用:

EarlGreyImpl.invoked(fromFile: #file, lineNumber: #line).selectElement(with: grey_text("Back")).perform(grey_tap())