2011-08-12 30 views
2

我想在一個循環內使用isVisible()來爲我的iOS UIAutomation創建一個函數的waitForElement類型。當我嘗試使用下面的代碼時,彈出一個新屏幕時等待一個元素失敗。該元素顯然存在,因爲如果我在點擊元素之前做了延遲(2),它的工作效果就很好。如何其他人完成這一點,因爲我很茫然......iOS UIAutomation UIAElement.isVisible()拋出陳舊的響應?

下面是我使用的代碼waitForElement:

function waitForElement(element, timeout, step) { 
     if (step == null) { 
       step = 0.5; 
     } 

     if (timeout == null) { 
      timeout = 10; 
     } 

     var stop = timeout/step; 

     for (var i = 0; i < stop; i++) { 
       if (element.isVisible()) { 
         return; 
       } 
       target.delay(step); 
     } 
     element.logElement(); 
     throw("Not visible"); 
} 
+0

你最終解決了這個問題嗎?我正在尋找類似的東西。 – Stew

回答

0

您傳遞一個「元素」對象此功能。當函數啓動時,你的'元素'對象有isVisible屬性虛假或者當你正在傳遞的屏幕上沒有這樣的對象時[object UIAElement Nil]。試圖獲得財產isVisible爲這種對象在任何時候總是會返回

如果你想讓這個函數起作用,你需要將'element'作爲一個對象傳遞給你的函數。 所以不是

if (element.isVisible()) 

你需要先得到元素對象,並試圖讓ISVISIBLE()屬性。

if (target.manWindow().elements()[0].isVisible()) 

在這個改變之後,不需要傳遞'element'對象,因爲這個函數只能工作於一個元素。

要使此函數可以與任何元素一起使用,您不需要傳遞「元素」對象,而是返回要檢查的「元素」對象的函數。 這是一個例子:

var target = ...; 
var mainWindow = ...; 

//function that returns firstObject 
var firstElement = function() 
{ 
return mainWindow.elements()[0]; 
} 
//function that returns secondObject 
var secondElement = function() 
{ 
return mainWindow.elements()[1]; 
} 

//這是你需要在「等待」的功能改變什麼。更改

if (element.isVisible()) 

與函數調用的

if (element().isVisible()) 

例子:

waitForElement(firstElement, 10, 1); 
waitForElement(secondElement, 10, 1); 

注意:如果你打電話給你的waitForElement功能與firstElement() - 函數將失敗與同樣的錯誤。這使得你的測試更復雜,但它的工作原理。