在 EarlGrey 中随机选择
Randomly Selecting In EarlGrey
我正在使用 XCTest 编写非常复杂的 UI 测试,并且最近切换到 EarlGrey,因为它更快并且更可靠 - 测试不会在构建服务器和测试套件上随机失败运行 最多可能需要半小时!
有一件事我在 EarlGrey 中做不到,但我在 XCTest 中可以做,是随机 select 一个元素。
例如,在日历 collectionView
上,我可以使用 NSPredicate
查询所有具有 'identifier' 的 collectionViewCell
,然后随机 select一天使用 [XCUIElementQuery count]
获取索引,然后 tap
.
现在,我将对其进行硬编码,但我希望随机化日期 selection,这样我就不必在更改应用程序代码时重写测试。
能不能详细说说,期待解决!
第 1 步 编写一个可以计数元素的匹配器 匹配 使用 GREYElementMatcherBlock
:
的给定匹配器
- (NSUInteger)elementCountMatchingMatcher:(id<GREYMatcher>)matcher {
__block NSUInteger count = 0;
GREYElementMatcherBlock *countMatcher = [GREYElementMatcherBlock matcherWithMatchesBlock:^BOOL(id element) {
if ([matcher matches:element]) {
count += 1;
}
return NO; // return NO so EarlGrey continues to search.
} descriptionBlock:^(id<GREYDescription> description) {
// Pass
}];
NSError *unused;
[[EarlGrey selectElementWithMatcher:countMatcher] assertWithMatcher:grey_notNil() error:&unused];
return count;
}
步骤 2 使用 %
到 select 随机索引
NSUInteger randomIndex = arc4random() % count;
步骤 3 最后使用 atIndex:
到 select 那个随机元素并对其执行 action/assertion。
// Count all UIView's
NSUInteger count = [self elementCountMatchingMatcher:grey_kindOfClass([UIView class])];
// Find a random index.
NSUInteger randIndex = arc4random() % count;
// Tap the random UIView
[[[EarlGrey selectElementWithMatcher:grey_kindOfClass([UIView class])]
atIndex:randIndex]
performAction:grey_tap()];
我正在使用 XCTest 编写非常复杂的 UI 测试,并且最近切换到 EarlGrey,因为它更快并且更可靠 - 测试不会在构建服务器和测试套件上随机失败运行 最多可能需要半小时!
有一件事我在 EarlGrey 中做不到,但我在 XCTest 中可以做,是随机 select 一个元素。
例如,在日历 collectionView
上,我可以使用 NSPredicate
查询所有具有 'identifier' 的 collectionViewCell
,然后随机 select一天使用 [XCUIElementQuery count]
获取索引,然后 tap
.
现在,我将对其进行硬编码,但我希望随机化日期 selection,这样我就不必在更改应用程序代码时重写测试。
能不能详细说说,期待解决!
第 1 步 编写一个可以计数元素的匹配器 匹配 使用 GREYElementMatcherBlock
:
- (NSUInteger)elementCountMatchingMatcher:(id<GREYMatcher>)matcher {
__block NSUInteger count = 0;
GREYElementMatcherBlock *countMatcher = [GREYElementMatcherBlock matcherWithMatchesBlock:^BOOL(id element) {
if ([matcher matches:element]) {
count += 1;
}
return NO; // return NO so EarlGrey continues to search.
} descriptionBlock:^(id<GREYDescription> description) {
// Pass
}];
NSError *unused;
[[EarlGrey selectElementWithMatcher:countMatcher] assertWithMatcher:grey_notNil() error:&unused];
return count;
}
步骤 2 使用 %
到 select 随机索引
NSUInteger randomIndex = arc4random() % count;
步骤 3 最后使用 atIndex:
到 select 那个随机元素并对其执行 action/assertion。
// Count all UIView's
NSUInteger count = [self elementCountMatchingMatcher:grey_kindOfClass([UIView class])];
// Find a random index.
NSUInteger randIndex = arc4random() % count;
// Tap the random UIView
[[[EarlGrey selectElementWithMatcher:grey_kindOfClass([UIView class])]
atIndex:randIndex]
performAction:grey_tap()];