【问题标题】:Pressing the Back Button on Navigation Bar using EarlGrey使用 EarlGrey 按下导航栏上的后退按钮
【发布时间】:2018-12-07 21:18:02
【问题描述】:

我在尝试编写一个使用后退按钮的测试时遇到了一些障碍,希望有人可以用这个为我指明正确的方向。

我的视图非常标准,我有一个 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 确实设置为 @"Back",但它也与以下代码不匹配。

// Press the back button

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

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

【问题讨论】:

    标签: ios testing earlgrey


    【解决方案1】:

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

    id<GREYMatcher> matcherForBackButton =
        grey_allOf(grey_accessibilityLabel(@"Back"),
                   grey_accessibilityTrait(UIAccessibilityTraitButton),
                   nil);
    
    [[EarlGrey selectElementWithMatcher:matcherForBackButton]
        performAction:grey_tap()];
    

    【讨论】:

    • 我用过:[EarlGrey selectElementWithMatcher:grey_buttonTitle(@"Back")];
    【解决方案2】:

    对于 Swift,您可以使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多