Unable to monitor event loop AND Wait for app to idle

后端 未结 2 1714
孤城傲影
孤城傲影 2021-02-05 13:50

I am writing UITest cases for my app using XCTest. App makes several server calls in the homescreen. I could not navigate to next screen. Automation often stays idle for 1 min o

相关标签:
2条回答
  • 2021-02-05 14:05

    My suggestion would be to help you use one of these two methods below. The first awaits an element appears on the screen. The second element is awaiting hittable. But in any case these methods help you, maybe you can use the method sleep(param). Like sleep(5). Waits for 5 seconds

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

    I hope to have helped in some way

    0 讨论(0)
  • 2021-02-05 14:16

    I have set arguments in UI test class

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

    In my Appdelegate's didFinishLaunchingWithOptions method I made a check

     NSArray *args = [NSProcessInfo processInfo].arguments;
    
        for (NSString *arg in args){
            if ([arg isEqualToString:@"NoAnimations"]){
                [UIView setAnimationsEnabled:false];
            }
        }
    

    So now all over my app there wont be any animation and my app is no more blocked. This reduced my automation time from 25mins to 2mins.

    0 讨论(0)
提交回复
热议问题