2017-01-23 83 views
2

我在頁面1上並且想導航到頁面2.但是,當我在頁面1上創建一個http Get請求時,它將返回錯誤,如果服務器很忙,我會用alert視圖顯示錯誤,但是如果請求成功,那麼我將導航到第2頁。此外,如果我的http Get請求返回錯誤,我將重複調用http Get請求直到能夠進入第2頁。現在的問題是如何知道將出現的下一個UI是什麼,目前我使用下面的代碼來檢查將出現的下一個元素,但是當元素是未找到。任何解決方案,可以檢查元素A找到然後繼續步驟A,否則如果元素B然後步驟B.對不起,我的英語和長句。Xcode UI測試:如何在繼續測試之前檢查下一個XCUIElement

enter image description here

XCUIElement *label = self.app.staticTexts[@"Page 2"]; 
NSPredicate *exists = [NSPredicate predicateWithFormat:@"exists == 1"]; 

[self expectationForPredicate:exists evaluatedWithObject:label handler:nil]; 
[self waitForExpectationsWithTimeout:10.0f handler:nil]; 

回答

1

你的問題是,你的測試是不確定的:你是無法確定從服務器的響應是否會成功與否。要刪除由服務器引入的這種非確定性,可以將請求存根或模擬到服務器。

您可以創建一個模擬服務器,該模擬服務器設置爲在特定條件下發送特定響應,也可以使用存根框架在應用程序中存根響應。

我使用OHHTTPStubs來做到這一點。 Just Eat寫了一個關於如何爲UI測試實現它的good blog post,雖然如果你使用Swift你需要從Objective-C翻譯它。

+0

謝謝你的時間,但這對我來說不是一個好的選擇,因爲我必須根據需求在真實(生產)服務器上測試我的應用程序。那麼沒有其他辦法了? – Newbie009

+0

如果您無法控制服務器的響應,您將無法告訴您要測試的內容。根據在測試過程中發現的UI元素,您可能會有一個大的if/else語句,但是非常不好的做法是不知道每個測試正在測試的內容,而且您不知道是否測試了兩種方案。 – Oletha

相關問題