Подтвердить что ты не робот

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

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

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

или

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

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

4b9b3361

Ответ 1

Я установил аргументы в тестовом классе UI

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 (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)
            }
        }
    }
}

Я надеюсь что-то помог