2016-09-02 9 views
1

私たちはUIAutomationからXCUITestsに移行しようとしています。 UIAutomationでは、簡単な 'tapOnName'機能を思いついただけで、全体のサブ要素ツリーをクロールし、最初の一致で要素をタップしました。XCUIApplicationの汎用タップ機能

function log(msg) { 
    UIALogger.logDebug(msg); 
} 
//recursive function crawling thru an elements hierarchy 
//and tapping on the first match of accessibilityIdentifier 
//or button text 
function tapOnNameWithRoot(name,el) { 
    if (el.name()==name && el.isVisible()) { 
    log("tap on itt!!!") 
    el.tap(); 
    return true; 
    } 
    if (el.toString()=="[object UIAButton]" && el.label()==name) { 
    log("tap on Button!!!") 
    el.tap(); 
    return true; 
    } 
    var elements=el.elements(); 
    if (elements===null || elements===undefined) { 
    log("elements null or undefined for:"+el.toString()); 
    return false; 
    } 
    for(var i=0,len=elements.length ;i<len;i++) { 
    if (tapOnNameWithRoot(name,elements[i])) { 
     return true; 
    } 
    } 
    return false; 
} 
var win = UIATarget.localTarget().frontMostApp().mainWindow(); 
//for ex taps on a button with the text "pushme" in the 
//main UIWindow 
tapOnNameWithRoot("pushme",win); 

いいえ質問:XCUIApplicationを使用して同じ機能を実装することは可能ですか?それはすべての要件をカバーするようにあなたはそれを少し微調整することができ

tapBasedOnAccessibilityIdentifier(elementType: app.staticTexts, accessibilityIdentifier: "Accessibility Identifier") 

:あなたのようなテストでメソッドを呼び出す

func tapBasedOnAccessibilityIdentifier(elementType elementType: XCUIElementQuery, accessibilityIdentifier: String) { 
    var isElementExist = false 

    for element in elementType.allElementsBoundByIndex { 
     if element.label == accessibilityIdentifier { 
      element.tap() 
      isElementExist = true 
      break 
     } 
    } 

    if !isElementExist { 
     XCTFail("Failed to find element") 
    } 
} 

答えて

3

XCTestでこの関数の略式サポートがあります。

任意の要素のうちの最初の試合をタップするために、あなたが最初のすべての要素を取得し、タップすることができます。

let app = XCUIApplication() 
let element = app.descendentsMatchingType(.Any)["someIdentifier"] 
element.tap() 

あなたはあることを行っている要素の種類を知っていれば、それはでフィルタリングする方が良いでしょうそのタイプ最初に:

let app = XCUIApplication() 
let element = app.buttons["someIdentifier"] 
element.tap() 
+0

簡略化は非常に便利です。我々はすべての私たちのUI要素をユニークな名前にして、これがボタン、TabBarボタンなどであるかどうかを決定することは決してありません。 – Leo

+0

速度に関しては、チェックする文字列が少なくて済むので、識別子とのマッチングのために、また、すべての要素のリストを調べる必要がないので、問題に遭遇するとデバッグが少し楽になります。 :) – Oletha

2

あなたはこのような何かを探しています。

関連する問題