Как дождаться в XCUITests исчезновения запроса на копирование/вставку?

#ios #swift #xctest #xcode-ui-testing #xcuitest

Вопрос:

В моих тестах пользовательского интерфейса мне нужно дождаться, пока уведомление о копировании/вставке исчезнет. В большинстве тестовых случаев уведомление выглядит:

Уведомление о копировании/вставке

Я пытался ждать таким образом:

     func waitForPasteboardInfoDissappear(file: StaticString = #file, line: UInt = #line) {
        let elements = [
            "Pola pasted from PolaUITests-Runner",
            "CoreSimulatorBridge pasted from Pola",
        ].map { app.staticTexts[$0] }
        if !elements.waitForDisappear(timeout: 10) {
            XCTFail("Pasteboard info still visible", file: file, line: line)
        }

    }
 
 extension XCUIElement {
    func waitForDisappear(timeout: TimeInterval) -> Bool {
        let result = XCTWaiter().wait(for: [waitForDisappearExpectation()],
                                      timeout: timeout)
        return result == .completed
    }

    func waitForDisappearExpectation() -> XCTestExpectation {
        let predicate = NSPredicate(format: "exists == false")
        return XCTNSPredicateExpectation(predicate: predicate, object: self)
    }
}

extension Array where Element == XCUIElement {
    func waitForDisappear(timeout: TimeInterval) -> Bool {
        let expectations = map { $0.waitForDisappearExpectation() }
        let result = XCTWaiter().wait(for: expectations,
                                      timeout: timeout)
        return result == .completed
    }
}
 

Это работает в большинстве случаев, но я использую тестирование моментальных снимков для проверки тестов, и иногда приглашение все еще видно (без текста).

Копирование/вставка уведомления без текста

Есть ли какой-нибудь способ проверить, видна ли эта подсказка на экране?

Комментарии:

1. Случай 1: Вид доски вставки создан вами или системой? Если он был создан вами, получите к нему доступ app.staticTexts[..] . Если это системное представление, обратитесь к нему в XCUIApplication(bundleIdentifier: "com.apple.springboard").staticTexts[...] случае 2: вы проверяете исчезновение двух статических текстов. Вы знаете, что одновременно будет отображаться только один статический текст. В этом случае используйте монитор прерывания пользовательского интерфейса для лучшей обработки.