由于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())
答案 0 :(得分:2)
您必须从匹配器中删除grey_sufficientlyVisible
,因为这没有任何意义。保证此匹配器在assert
语句中可以正常工作,但是作为匹配器参数传递似乎效率低下。
EarlGrey与运行循环上的触摸事件进行交互,并且通常与应用程序以及真实用户进行交互。在这种情况下,其不太可能的测试将很快进行,特别是与KIF相比,后者在UI元素上调用选择器而不是传递触摸事件。不错,这是功能测试的预期行为。顺便说一句,您可以通过禁用动画来加快测试速度:
GREYTestHelper.enableFastAnimation()
关于与匹配器有关的问题,我建议您尝试几种方法并找到适合您情况的一种方法。
乍一看,只需使用UITabBarItem
找到一个grey_kindOfClass
就值得。
匹配器示例(不起作用)
grey_allOf([grey_kindOfClass(UITabBarItem.self), grey_text(title)])
但这不是可行的解决方案。 让我们来看看视图层次:
因此,如果您依靠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))