我正在开发一个基本的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冻结了?
难怪要花这么长时间。您有grey_minimumVisiblePercent
作为grey_allOf
中的第一个匹配器。这样做的目的是按照指定的顺序通过这些匹配器运行ui层次结构中的每个元素,并且只有当其中一个匹配器失败或所有匹配器都通过(即匹配)时才停止。为了避免这个问题,你应该总是选择最有选择的匹配器。使用这种逻辑,grey_text(_randomSelectedValue)
似乎是最有选择性的,所以使用它作为第一个匹配器,然后按选择性递减的顺序使用其他匹配器。