2011-07-19 67 views
3

我已經有一個活動指標在我的根表視圖,而事情得到加載。我試圖測試指標的存在,但似乎無法獲取UIAActivityIndi​​cator的位置,我也無法在應用程序元素樹層次結構中的任何位置找到它。該指標是根表視圖的子視圖,所以我期望它被看作是該元素樹的一部分,但我沒有在任何地方看到它(除了物理上在屏幕上)。iOS UIAutomation UIAActivityIndi​​cator

從javascript獲取活動指標需要其他魔法嗎?

Ed

回答

2

這是我爲等待iOS中的頁面加載而構建的函數。你可以在函數的代碼執行之前傳遞一個可選的predelay,除了它等待activityIndi​​cator對象在30秒內變爲null(每半秒嘗試60次)。當我點擊對象時,我擴展了UIAutomation工具以包含此命令。

this.wait_for_page_load = function(preDelay) {   
    if (!preDelay) { 
     target.delay(0); 
    } 
    else { 
     target.delay(preDelay); 
    } 

    var done = false; 
    var counter = 0;  
    while ((!done) && (counter < 60)) { 
     var progressIndicator = UIATarget.localTarget().frontMostApp().windows()[0].activityIndicators()[0]; 
     if (progressIndicator != "[object UIAElementNil]") { 
      target.delay(0.5); 
      counter++; 
     } 
     else { 
      done = true;   
     } 
    } 
    target.delay(0.5); 
} 
+0

真棒, 謝謝。 – EdG

+0

此代碼與我使用的代碼略有不同,但它會產生相同的錯誤結果。使用上面的確切代碼,即使活動指示器在屏幕上旋轉,progressInidicator始終爲零([object UIAElementNil])。再次,活動指示器處於活動狀態並且旋轉時顯示NO活動指示器的應用程序的logElementTree。創建UIActivityIndi​​cator是否有任何魔法需要顯示?我曾嘗試過,沒有「無障礙標籤」。 – EdG

2
target.delay(1); 

target.pushTimeout(10); 

target.frontMostApp().mainWindow().activityIndicators()["In progress"].waitForInvalid() == true; 

target.popTimeout(); 

這將等待1秒爲活動的指標出現。然後,它將等待10秒的超時值失效。用您的指標名稱代替「進行中」。

0

的代碼如下行解決我的問題

while(target.frontMostApp().mainWindow().activityIndicators()["In progress"].isEnabled()); 

其等待,直到活動的指標成爲禁用(但它需要1-2秒以上,成爲指標從我們的觀點刪除後禁用)