由于 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 层次结构:
因此,如果您依赖 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/