2011-08-12 15 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プロパティfalseを持っているか、画面にこのようなオブジェクトがないとき[オブジェクトUIAElementなし]を渡しています。いつでもこの種のオブジェクトののisVisibleプロパティを取得しようとすると、常にfalseが返されます。

あなたはこの機能が動作する場合は、あなたの関数にオブジェクトとして「要素」を渡す必要があります。 ので、代わりの

if (element.isVisible()) 

あなたが最初の要素オブジェクトを取得してのisVisible()プロパティを取得しようとする必要があります。

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

この変更後、この機能は1つの要素でのみ機能するため、「要素」オブジェクトを渡す必要はありません。

は任意の要素で動作するように、この機能を行うために、あなたはない「要素」オブジェクトが、あなたがチェックしたい「要素」オブジェクトを返す関数を渡す必要があります。 これは一例です:

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]; 
} 

//これはあなたの「待機」関数に変更するために必要なものです。

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

注:お使いの関数呼び出しの

if (element().isVisible()) 

例で

if (element.isVisible()) 

変更するには、firstElement()であなたのwaitForElement関数を呼び出します場合 - 関数が失敗します同じエラーが表示されます。これはあなたのテストをより複雑にしますが、それは機能します。

関連する問題