#ios #xcode #xctest #xctestcase
#iOS #xcode #xctest #xctestcase
Вопрос:
Я пишу сценарии UITest для своего приложения, используя XCTest. Приложение выполняет несколько вызовов сервера на главном экране. Я не смог перейти к следующему экрану. Автоматизация часто простаивает в течение 1 минуты или даже больше с сообщением
Подождите, пока приложение не будет работать в режиме ожидания
или
Невозможно отслеживать цикл событий
Есть ли способ заставить приложение выполнить мои тестовые примеры, нарушающие это???
Ответ №1:
Я установил аргумент в тестовом классе пользовательского интерфейса
let app = XCUIApplication()
app.launchArguments = ["NoAnimations"]
app.launch()
В моем методе Appdelegate didFinishLaunchingWithOptions я выполнил проверку
NSArray *args = [NSProcessInfo processInfo].arguments;
for (NSString *arg in args){
if ([arg isEqualToString:@"NoAnimations"]){
[UIView setAnimationsEnabled:false];
}
}
Итак, теперь во всем моем приложении не будет никакой анимации, и мое приложение больше не заблокировано. Это сократило время моей автоматизации с 25 минут до 2 минут.
Ответ №2:
Мое предложение состояло бы в том, чтобы помочь вам использовать один из этих двух методов, приведенных ниже. На экране появляется первый ожидающий элемент. Второй элемент ожидает hittable. Но в любом случае эти методы помогут вам, возможно, вы сможете использовать метод sleep (параметр). Нравится sleep(5)
. Ожидает 5 секунд
import XCTest
class BaseTestCase: XCTestCase {
func waitForElementToAppear(element: XCUIElement, timeout: NSTimeInterval = 60, file: String = #file, line: UInt = #line) {
let existsPredicate = NSPredicate(format: "exists == true")
expectationForPredicate(existsPredicate,
evaluatedWithObject: element, handler: nil)
waitForExpectationsWithTimeout(timeout) { (error) -> Void in
if (error != nil) {
let message = "Failed to find (element) after (timeout) seconds."
self.recordFailureWithDescription(message, inFile: file, atLine: line, expected: true)
}
}
}
func waitForHittable(element: XCUIElement, timeout: NSTimeInterval = 70, file: String = #file, line: UInt = #line) {
let existsPredicate = NSPredicate(format: "hittable == 1")
expectationForPredicate(existsPredicate, evaluatedWithObject: element, handler: nil)
waitForExpectationsWithTimeout(timeout) { (error) -> Void in
if (error != nil) {
let message = "Failed to find (element) after (timeout) seconds."
self.recordFailureWithDescription(message,
inFile: file, atLine: line, expected: true)
}
}
}
}
Я надеюсь, что это каким-то образом помогло
Комментарии:
1. Спасибо, что нашли время помочь мне. Элемент по-прежнему доступен для доступа и существует, но снова он долго ожидает с тем же сообщением «Подождите, пока приложение не будет работать в режиме ожидания». Иногда я вижу это сообщение —- «Уведомление о завершении анимации приложения не получено, будет предпринята попытка продолжить».