4

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 がシステム アラートの無視をサポートしているかどうか知っている人はいますか?

4

4 に答える 4

5

gray_systemAlertViewShown のドキュメントに示されているように、grey_systemAlertViewShown はシステム アラート ビューが表示されているかどうかを確認するだけです。API のより適切な使用法は、システム アラートが表示されていないことをアサートすることです (おそらく、テスト アプリがシステム アラートを引き起こすコードをモックアウトしたため)。

Code that taps a button that requests causes system alert to be shown (for ex: requests user's geo location) comes here...
// Assert that in the test app system alert view is not shown because we have mocked out the part of code that requests user location.
[[EarlGrey selectElementWithMatcher:grey_anything()] assertWithMatcher:grey_not(grey_systemAlertViewShown())];

これを書いている時点では、EarlGrey はシステム アラート ビューを閉じることができません。アプリによって起動された Alertviews は閉じることができます。FAQには、モーダル ダイアログが存在する場合、EarlGrey テストが失敗することを示す質問があります。

于 2016-02-24T00:58:06.167 に答える
0

EarlGreyImpl.invoked(fromFile: #file, lineNumber: #line).selectElement(with: gray_text("Click")).perform(grey_tap())

//上記のコードを使用すると、問題が解決する可能性があります

于 2018-12-07T09:58:55.767 に答える