Как проверить, загружен ли webview или нет без statictexts в xctest в swift

первый раз я пытаюсь написать unit test case. Вот блокирую по следующему сценарию.

Когда я нажимаю кнопку, происходит переход к следующему экрану, и веб-просмотр загружается. Мне нужно дождаться загрузки веб-просмотра.

Я попытался подождать, пока staticTexts не станет видимым по приведенному ниже коду,

let rewards = self.app.staticTexts[“Rewards”]
let exists = NSPredicate(format: “exists == 1”)
expectationForPredicate(exists, evaluatedWithObject: rewards, handler: nil)
waitForExpectationsWithTimeout(10, handler: nil)
XCTAssert(rewards.exists)
XCTAssert(app.staticTexts[“Rewards Overview”].exists)

Но в моем сценарии, когда я нажимаю кнопку, он переходит к следующему экрану, и веб-просмотр начинает загружаться. Но контент веб-просмотра всегда динамический. Так что мне нужно дождаться webviewDidFinishLoad.

0
0
1 194
2

Ответы 2

Вы можете использовать waitForExistence(timeout:) для возврата логического значения, если элемент появляется в течение заданного тайм-аута - я бы рекомендовал использовать это для вашего варианта использования.

https://developer.apple.com/documentation/xctest/xcuielement/2879412-waitforexistence

Я бы рекомендовал написать свою собственную функцию ожидания, поскольку с waitForExistence(timeout:) вы можете только ждать существования, но он игнорирует другие состояния элемента (.isHittable, .isEnabled и т. д.) Или просто ждать любого другого логического значения.

Плюс waitForExistence(timeout:) мучительно медленный, если у вас много тестов с большим количеством ожиданий (мы перестали использовать его после того, как написали свое ожидание). Это вызвано тем, что системный метод ожидает дополнительных 1-2 секунд перед возвратом истины, если объект существует.

Это может вам помочь, но это не Swift, его ObjC: https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed/

Другие вопросы по теме