我开始对 EarlGrey 进行一些试验,现在已经使用 XCUITest 进行了几个月的 UI 测试。我遇到了无法消除系统警报的经典问题,这很奇怪,因为看起来 Google 为系统警报实现了一个匹配器,称为 gray_systemAlertViewShown()。我正在尝试使用 GREYCondition 检测系统警报。这是我尝试过的:
- (void)waitForAndDismissSystemAlertForSeconds:(NSInteger)seconds {
GREYCondition *interactableCondition = [GREYCondition conditionWithName:@"isInteractable" block:^BOOL{
// Fails if element is not interactable
NSError *error;
[[EarlGrey selectElementWithMatcher:grey_systemAlertViewShown()] assertWithMatcher:grey_interactable() error:&error];
if (error) {
return NO;
} else {
NSError *allowButtonError;
[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Allow")] assertWithMatcher:grey_notNil() error:&allowButtonError];
if (!allowButtonError) {
[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Allow")] performAction:grey_tap()];
}
return YES;
}];
[interactableCondition waitWithTimeout:seconds];
}
我也尝试过使用 addUIInterruptionMonitorWithDescription ,如此处所述(但使用 EarlGrey 代码基本上完成了我在中断监视器中所做的工作):Xcode 7 UI Testing: how to dismiss a series of system alerts in code
这两种方法都不起作用。我的 GREYCondition 中的非错误情况不会触发断点,并且中断监视器也不会关闭我的警报。
有人知道 EarlGrey 是否支持关闭系统警报?