我想能夠使用UIAutomation來測試應用程序。我遇到的問題是,我需要從網絡下載所有數據。有沒有辦法暫停UIAutomation腳本,直到發佈NSNotification,或者我只需要比我認爲下載數據所需的時間長delay()
。等待一定的時間不是優選的,因爲有時數據不需要重新下調。UIAutomation和NSNotification
任何幫助/鏈接非常感謝。
我想能夠使用UIAutomation來測試應用程序。我遇到的問題是,我需要從網絡下載所有數據。有沒有辦法暫停UIAutomation腳本,直到發佈NSNotification,或者我只需要比我認爲下載數據所需的時間長delay()
。等待一定的時間不是優選的,因爲有時數據不需要重新下調。UIAutomation和NSNotification
任何幫助/鏈接非常感謝。
傑克的答案適用於大多數細節,但一些網絡工作發生在後臺隊列上,並且沒有進度指示器。
我寫了一個幫助器,將一個CGRectZero
UIView粘貼到一個元素中。然後我們可以等到這個元素變得有效。它不像我希望的那樣乾淨,但是它是在開玩笑。
waitForElementNamed: function(name, element, timeout) {
timeout = timeout || 10
log("Waiting for " + timeout + " seconds")
var valid = false
for (var i = 0; i < timeout; i++) {
UIATarget.localTarget().pushTimeout(.5)
valid = element.elements()[name].isValid()
if (valid) {
log("Found Element " + name)
return
}
UIATarget.localTarget().popTimeout()
target.delay(.5)
}
if (!valid) {
failed("Wait Timedout [" + timeout + "]")
}
}
這不是很漂亮,但它的工作原理。
UIAutomation有一個叫做waitForInvalid()
的漂亮功能。如果你有一個進度條或者什麼東西會在數據完成下載後顯示並刪除,你可以使用它。
這也適用於用戶已經擁有數據並且不顯示用戶界面的情況,因爲函數會立即返回。
是的,不漂亮,但它的工作:) –