我正在爲使用XCTest的應用程序編寫UITest應用程序。應用程序在主屏幕中進行多個服務器調用。我無法導航到下一個屏幕。自動化經常保持空閒狀態,持續1分鐘或甚至大於與所述消息無法監控事件循環並等待應用程序閒置
等待應用到空閒
或
無法監視事件循環
有沒有辦法讓應用程序執行我的測試案例打破這???
我正在爲使用XCTest的應用程序編寫UITest應用程序。應用程序在主屏幕中進行多個服務器調用。我無法導航到下一個屏幕。自動化經常保持空閒狀態,持續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分鐘。
我的建議是幫助您使用以下兩種方法之一。第一個等待一個元素出現在屏幕上。第二個因素是等待可打擊。但在任何情況下,這些方法都可以幫助你,也許你可以使用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)
}
}
}
}
我希望以某種方式
感謝您找到時間來幫助我。該元素仍然可以打開並存在,但它仍然等待很長時間,同樣的「等待應用程序閒置」消息。有時我會看到這條消息----「應用動畫完成通知未收到,將嘗試繼續」。 – Manoj