当我搜索大量的TableViewCells时,EarlGrey冻结了一段时间

时间:2016-07-18 08:26:44

标签: ios earlgrey

我正在开发一个基本的iOS教程应用程序,并认为我也可以开始学习一些EarlGrey。我自动化的测试有这个流程 -

  • 我有一个很大的UITableView,我用它生成的一些随机单词预先填充它。这些可能很长,我的TableView中可能有超过100个单元格。

  • 在我的测试中,我随机选择生成的一个单词并在单元格中搜索它。每个单元格都有以下UI:

        |                                         |
        |   |Word|  |Word-Count| |  UIImage   |   |
        |                                         |
    

所以在EarlGrey -

- (void)setup {
    [super setup];
    GeneratorClass dataSource =
        [[GeneratorClass alloc] initWithRandomData];
    self.tableView.dataSource = dataSource;
    _randomSelectedValue = dataSource.randomValue;
}
- (void)testTableElementVisible {
    id<GREYMatcher> *cellMatcher = grey_allOf(grey_minimumVisiblePercent(0.0f), 
                                   grey_interactable(), 
                                   grey_isKindOfClass([UITableViewCell class]), 
                                   grey_text(_randomSelectedValue), nil);
    [[EarlGrey selectElementWithMatcher:cellMatcher] 
        asserWithMatcher:grey_sufficientlyVisible()];
    [[EarlGrey selectElementWithMatcher:cellMatcher]    
        performAction:grey_tap()];
}

然而,在Jenkins上,这个测试需要很长时间才能运行并且"Timeout (currently set to 30) occurred when looking for elements."失败。屏幕被冻结,虽然在本地我可以看到点击发生,我还没有能够传递它。有什么方法可以加快这个测试速度,或者我在这里做了什么错误导致EarlGrey冻结?

1 个答案:

答案 0 :(得分:1)

难怪它花了这么长时间。您grey_minimumVisiblePercent中有grey_allOf作为第一个匹配器。它所做的是通过这些匹配器中指定它们的顺序运行ui层次结构中的每个元素,并且仅当其中一个匹配器失败或所有匹配器都通过(即匹配)时停止。为了避免这个问题,您应该始终选择最具选择性的选择性匹配器。使用该逻辑,grey_text(_randomSelectedValue)似乎是最具选择性的,因此使用它作为第一个匹配器,然后按照选择性降低的顺序使用其他的。