使用 EarlGrey 按下导航栏上的后退按钮
Pressing the Back Button on Navigation Bar using 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确实设置为@"Back",但它与以下代码也不匹配。
// Press the back button
id<GREYMatcher> backMatcher =
grey_allOf(grey_accessibilityID(@"Back"), grey_sufficientlyVisible(), nil);
[[EarlGrey selectElementWithMatcher:backMatcher] performAction:grey_tap()];
问题是您需要更具体的匹配器才能从 UINavigationController
获取 Back
按钮。如果您查看测试失败时被转储的 ui 层次结构,您会注意到不止一个元素具有可访问性标签 Back
。因此,您需要像这样使用 grey_accessibilityTrait
匹配器来进一步缩小搜索范围:
id<GREYMatcher> matcherForBackButton =
grey_allOf(grey_accessibilityLabel(@"Back"),
grey_accessibilityTrait(UIAccessibilityTraitButton),
nil);
[[EarlGrey selectElementWithMatcher:matcherForBackButton]
performAction:grey_tap()];
对于Swift,您可以使用:
EarlGreyImpl.invoked(fromFile: #file, lineNumber: #line).selectElement(with: grey_text("Back")).perform(grey_tap())
我 运行 在尝试编写一个使用后退按钮的测试时遇到了一些困难,希望有人能用这个为我指明正确的方向。
我的视图非常标准,我有一个 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()];
问题是您需要更具体的匹配器才能从 UINavigationController
获取 Back
按钮。如果您查看测试失败时被转储的 ui 层次结构,您会注意到不止一个元素具有可访问性标签 Back
。因此,您需要像这样使用 grey_accessibilityTrait
匹配器来进一步缩小搜索范围:
id<GREYMatcher> matcherForBackButton =
grey_allOf(grey_accessibilityLabel(@"Back"),
grey_accessibilityTrait(UIAccessibilityTraitButton),
nil);
[[EarlGrey selectElementWithMatcher:matcherForBackButton]
performAction:grey_tap()];
对于Swift,您可以使用:
EarlGreyImpl.invoked(fromFile: #file, lineNumber: #line).selectElement(with: grey_text("Back")).perform(grey_tap())