当我搜索大量 TableViewCells 时,EarlGrey 冻结了一段时间
EarlGrey freezes for some time when I search on a large set of TableViewCells
我正在开发一个基本的 iOS 教程应用程序,我认为我也可以开始使用它学习一些 EarlGrey
。我正在自动化的测试有这个流程 -
我有一个很大的 UITableView,我用我生成的一些随机词预先填充了它。这些可能很长,我的 TableView 中可能有超过 100 个单元格。
在我的测试中,我随机 select 生成的单词之一并在单元格中搜索它。每个单元格有以下 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)
似乎是最具选择性的,因此将其用作第一个匹配器,然后按照选择性递减的顺序使用其他匹配器。
我正在开发一个基本的 iOS 教程应用程序,我认为我也可以开始使用它学习一些 EarlGrey
。我正在自动化的测试有这个流程 -
我有一个很大的 UITableView,我用我生成的一些随机词预先填充了它。这些可能很长,我的 TableView 中可能有超过 100 个单元格。
在我的测试中,我随机 select 生成的单词之一并在单元格中搜索它。每个单元格有以下 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)
似乎是最具选择性的,因此将其用作第一个匹配器,然后按照选择性递减的顺序使用其他匹配器。