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 处的按钮,然后按名称获取两个按钮并比较数组是否相等:(未经测试编写)

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

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

 XCTAssert(buttonOrder == [takeawayButton, restaurantButton])

另一种选择是直接获取frame每个按钮的 并断言一个 X 坐标低于另一个。

要回答有关获取 a XCUIElementin a的索引的具体问题XCUIElementQuery,这是绝对可能的。只需遍历查询中的所有元素并返回与该元素相等的第一个元素的索引。

于 2015-08-27T14:42:20.037 回答
0

单独的 XCUIElement 无法告诉您它在 XCUIElementQuery 中的位置。如果您对 XCUIElement 有所了解,则可以搜索 XCUIElementQuery 以发现其偏移量。在下面让我们假设“更多”是标识符(如果您正在使用,将“标识符”更改为“标签”)。

如果您想找到“更多”按钮的偏移量(如原始问题中所述),则:

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
}

上述循环退出后,您将获得偏移量,或者如果找不到“更多”,它将为零。

于 2018-09-27T20:09:18.253 回答