XCUITest を使用して数か月間 UI テストを行ってきたので、EarlGrey を少し試し始めています。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 テスト: コードで一連のシステム アラートを無視する方法
どちらのアプローチも機能しません。GREYCondition でエラーが発生していない場合はブレークポイントが起動せず、割り込みモニターもアラートを無視しません。
EarlGrey がシステム アラートの無視をサポートしているかどうか知っている人はいますか?