5

これは私の単純ですUITest (tabbarcontrollerのタブの順序をカスタマイズしています)

func testIsOrderOfTabsSaved() {

    let app = XCUIApplication()
    let tabBarsQuery = app.tabBars
    tabBarsQuery.buttons["More"].tap()
    app.navigationBars["More"].buttons["Edit"].tap()
    tabBarsQuery.buttons["Takeaway"].swipeLeft()
    tabBarsQuery.buttons["In Restaurant"].swipeLeft()

    //here, how to get position of moved button with text "In Restaurant"?

:

インデックスXCUIElementから取得できます。XCUIElementQuery他の方法でこれを行うことはできますか?

4

3 に答える 3

7

画面上の位置に基づいて、クエリが自動的に順番に返されるようです。

for i in 0...tabsQuery.buttons.count {
    let ele = tabsQuery.buttons.elementBoundByIndex(i)
}

インデックス i はタブ バー内のボタンの位置を表し、0 は一番左のタブ、i == tabsQuery.buttons.count は一番右のタブです。

于 2015-08-27T14:27:50.153 に答える
4

位置テストを作成するには、さまざまな方法があります。最も簡単な方法は、インデックス 0 と 1 でボタンを取得し、名前で 2 つのボタンを取得して、配列が等しいかどうかを比較することです: (テストなしで記述)

 let buttonOrder = [tabBarsQuery.buttons.elementAtIndex(0), tabBarsQuery.buttons.elementAtIndex(1)]

 let takeawayButton = buttons["Takeaway"];
 let restaurantButton = buttons["In Restaurant"];

 XCTAssert(buttonOrder == [takeawayButton, restaurantButton])

もう 1 つのオプションは、各ボタンの を直接取得し、frame一方の X 座標が他方よりも低いことをアサートすることです。

XCUIElementaの an のインデックスを取得することに関する特定の質問に答えるにはXCUIElementQuery、それは絶対に可能です。クエリ内のすべての要素を調べて、要素に等しい最初の要素のインデックスを返すだけです。

于 2015-08-27T14:42:20.037 に答える
0

XCUIElement だけでは、XCUIElementQuery 内での位置を示すことはできません。XCUIElement について何か知っている場合は、XCUIElementQuery を検索してそのオフセットを見つけることができます。以下では、"More" が識別子であると想像してみましょう (作業している場合は、'identifier' を 'label' に変更してください)。

「More」ボタンのオフセットを見つけたい場合(元の質問に投稿されているように):

var offsetWithinQuery : Int? = nil  // optional since it's possible the button isn't found.  
for i in 0...tapBarsQuery.buttons.count{
    if tapBarsQuery.elementAtIndex(i).indentifier == "More" {
       offSetWithinQuery = i
}

上記のループが終了すると、オフセットが取得されるか、「More」が見つからない場合は nil になります。

于 2018-09-27T20:09:18.253 に答える