Невозможно отслеживать цикл событий И ждать, пока приложение не будет запущено

Я пишу кейсы UITest для моего приложения, используя XCTest. Приложение делает несколько вызовов сервера на главном экране. Я не мог перейти к следующему экрану. Автоматизация часто простаивает в течение 1 минуты или даже дольше, чем в сообщении

Подождите, пока приложение простаивает

или же

Невозможно отслеживать цикл событий

Есть ли способ заставить приложение выполнить мои testCases, ломая это???

2 ответа

Решение

Я установил аргументы в тестовом классе пользовательского интерфейса

let app = XCUIApplication()
app.launchArguments = ["NoAnimations"]
app.launch()

В методе didFinishLaunchingWithOptions моего Appdelegate я сделал проверку

 NSArray *args = [NSProcessInfo processInfo].arguments;

    for (NSString *arg in args){
        if ([arg isEqualToString:@"NoAnimations"]){
            [UIView setAnimationsEnabled:false];
        }
    }

Так что теперь во всем моем приложении не будет никакой анимации, и мое приложение больше не будет заблокировано. Это сократило мое время автоматизации с 25 минут до 2 минут.

Мое предложение было бы помочь вам использовать один из этих двух методов ниже. Первый ждет элемент появляется на экране. Второй элемент ожидает хитбола. Но в любом случае эти методы помогут вам, может быть, вы можете использовать метод сна (param). подобно 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)
            }
        }
    }
}

Я надеюсь, что помог каким-то образом

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