Earlgrey在访问NavBar / TabBar项目时速度很慢

时间:2018-10-16 02:52:42

标签: 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())

1 个答案:

答案 0 :(得分:2)

您必须从匹配器中删除grey_sufficientlyVisible,因为这没有任何意义。保证此匹配器在assert语句中可以正常工作,但是作为匹配器参数传递似乎效率低下。

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

GREYTestHelper.enableFastAnimation()

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

乍一看,只需使用UITabBarItem找到一个grey_kindOfClass就值得。

匹配器示例(不起作用)

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

但这不是可行的解决方案。 让我们来看看视图层次:

enter image description here

因此,如果您依靠UITabBarItem则无法使用,因为没有这样的元素。您会看到,有一个私人的UITabBarButton UIKit类不应与之交互。而且,它不是UIButton的子类,而是UIControl的子类

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

匹配器示例(有效)

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))