2016-10-20 6 views
13

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

Wait для приложения на холостом ходу

или

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

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

ответ

14

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

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]; 
     } 
    } 

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

1

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

Я надеюсь, что помог в некотором роде

+1

Спасибо, что нашли время, чтобы помочь мне. Элемент по-прежнему остается гибким и существует, но снова он ждет долгое время с тем же сообщением «Ожидание приложения в режиме ожидания». Иногда я вижу это сообщение ---- «App анимации полное уведомление не получено, будет пытаться продолжить». – Manoj

Смежные вопросы