这是我简单的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
。我可以这样做吗?
答案 0 :(得分:5)
似乎查询会根据屏幕上的位置自动返回。
for i in 0...tabsQuery.buttons.count {
let ele = tabsQuery.buttons.elementBoundByIndex(i)
}
索引i代表标签栏中按钮的位置,0是最左边的标签,i == tabsQuery.buttons.count是最右边的。
答案 1 :(得分: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坐标低于另一个。
要回答有关在XCUIElement
中获取XCUIElementQuery
索引的具体问题,这绝对是可能的。只需遍历查询中的所有元素,并返回第一个等于元素的索引。
答案 2 :(得分: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
}
退出上述循环后,您将获得偏移量,或者如果未找到“更多”,则为零。