#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: вы проверяете исчезновение двух статических текстов. Вы знаете, что одновременно будет отображаться только один статический текст. В этом случае используйте монитор прерывания пользовательского интерфейса для лучшей обработки.