ios - Earlgrey 在访问 NavBar/TabBar Items 时很慢

标签 ios swift earlgrey

由于 EarlGrey 在进程中运行,并且没有像 XCUI 测试框架那样涉及安装/卸载过程,我希望测试运行得更快,但我注意到它的速度几乎与 XCUI 测试框架相同。有什么原因吗?

获取 TabBar 或 NavBar 项目非常慢。我怎样才能加快这个过程?

我用它来匹配 TabBar 元素

let tabButtonMatcher: GREYMatcher = grey_allOf([grey_accessibilityLabel("Something"), grey_accessibilityTrait(UIAccessibilityTraitButton),  grey_sufficientlyVisible()])
        EarlGrey.selectElement(with: tabButtonMatcher).perform(grey_tap()).assert(grey_sufficientlyVisible())

NavBar 按钮也类似

    let navMatch: GREYMatcher = grey_allOf([grey_accessibilityID("Something"), grey_accessibilityTrait(UIAccessibilityTraitButton), grey_sufficientlyVisible()])
    EarlGrey.selectElement(with: navMatch).perform(grey_tap())

最佳答案

您必须从匹配器中删除 grey_sufficientlyVisible,因为它没有意义。这个匹配器在 assert 语句中保证可以很好地工作,但是作为匹配器参数传递似乎效率很低。

EarlGrey 在运行循环中与触摸事件交互,通常,它与应用程序以及真实用户交互。在这种情况下,它不太可能的测试会很快,特别是与 KIF 相比,KIF 在 UI 元素上调用选择器而不是传递触摸事件。这还不错,这是功能测试的预期行为。顺便说一句,您可以通过禁用动画来加快测试速度:

GREYTestHelper.enableFastAnimation()

关于您与匹配器相关的问题,我建议您尝试多种方法并找到适合您情况的方法。

乍一看,使用 grey_kindOfClass 找到一个 UITabBarItem 应该是值得的。

匹配器示例(不工作)

grey_allOf([grey_kindOfClass(UITabBarItem.self), grey_text(title)])

但这不是有效的解决方案。 让我们看看 View 层次结构:

enter image description here

因此,如果您依赖 UITabBarItem,它就不起作用,因为没有这样的元素。您可以看到,有一个名为 UITabBarButton 的私有(private) UIKit 类,不应与之交互。而且,它不是 UIButton 的子类,而是 UIControl 的子类😀

相反,我建议使用 inRoot 函数选择 UITabBar 上的元素。

匹配器示例(有效)

EarlGrey.selectElement(with: grey_text(tabbarTitle))
        .inRoot(grey_kindOfClass(UITabBar.self))
        .perform(grey_tap())

在这种情况下,您会找到一个元素,它具有预期的文本并且位于 UITabBar 上。

对于导航栏上的选择元素,可以使用此匹配器的变体:

在导航栏上查找元素的匹配器示例

EarlGrey.selectElement(with: grey_kindOfClass(UIButton.self))
        .inRoot(grey_kindOfClass(UINavigationBar.self))

关于ios - Earlgrey 在访问 NavBar/TabBar Items 时很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827294/

相关文章:

javascript - 如何适应高度为 :100% on iPhone 的 DIV

ios - 尝试保存游戏数据时出错

earlgrey - 如何在同一个项目中同时使用 EarlGrey 和 XCTest?

earlgrey - 在 EarlGrey 中,我如何访问我正在与之交互的元素对象?

ios - mac 终端上的 cordova 权限被拒绝

ios - 我如何设置 UIDatePicker 以在 swift 当前日期后一天显示?

ios - "The private key for ... is not installed on this Mac"– Xcode 中的分发和配置文件

objective-c - 我无法调用 swift 文件中的方法

ios - 带有核心文本的自定义 UITableViewCell

xctest - grey_accessibilityLabel ("Login") 与 UI 层次结构中存在的具有相同辅助功能标签的元素不匹配