2

我正在开发一个基本的 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 冻结?

4

1 回答 1

1

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

于 2016-08-23T08:18:41.880 回答