在 Xcode ui 测试 Swift 中查找表格单元格
Posted
技术标签:
【中文标题】在 Xcode ui 测试 Swift 中查找表格单元格【英文标题】:Find table cell in Xcode ui testing Swift 【发布时间】:2017-06-08 08:58:21 【问题描述】:我是 Xcode + ios 测试的新手。我将快速自动化现有 ios 项目的 ui。问题是我无法找到视图的表格视图。这是我用来从表格视图中查找单元格的代码,但在这种情况下不起作用:
XCUIApplication().tables.cells.allElementsBoundByIndex[1].tap()
我附上视图流的屏幕截图。 view的ios代码不是我写的
【问题讨论】:
此屏幕上也无法自动录制。 这里没有足够的信息来诊断问题。我们所能看到的是,在您的视图层次结构中有一个表格视图,但您正试图访问表格视图中的第二个单元格,该单元格可能存在也可能不存在。请添加XCUIApplication().tables.cells.debugDescription
的输出,以便我们查看正在处理的内容。
【参考方案1】:
所以你想找到一个tableView的单元格然后点击它。
此解决方案是在 Xcode 9.0 beta 6 中使用 Swift 4 测试后发布的
正如 Oletha 在评论中提到的,最好通过打印 debugDescription 来了解视图的层次结构:
let app = XCUIApplication()
override func setUp()
super.setUp()
continueAfterFailure = false
app.launch()
print(app.debugDescription)
打印语句将为您提供视图及其层次结构的详细列表。
接下来,您应该将 accessibilityIdentifier 添加到您的表格视图和单元格中,如下所示:
a) 在您的 viewDidLoad() 或控制器的任何其他相关函数中-
myTableView.accessibilityIdentifier = “myUniqueTableViewIdentifier”
b) 在你的 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 函数内部-
cell.accessibilityIdentifier = "myCell_\(indexPath.row)"
完成后,您可以在测试用例中编写以下代码以获得所需的结果:
let myTable = app.tables.matching(identifier: "myUniqueTableViewIdentifier")
let cell = myTable.cells.element(matching: .cell, identifier: "myCell_0")
cell.tap()
请注意,这只会帮助您找到并点击所需的单元格,您可以在测试用例中添加一些 XCTAssert 检查以使其更有用。
P.S.:网上有很多指南可以帮助您学习使用 Xcode 进行 UI 测试。例如:https://blog.metova.com/guide-xcode-ui-test/
【讨论】:
这对我帮助很大...谢谢!【参考方案2】:Kushal 答案的 Objective-C 版本。不过,最后一步更加简化了。
A- 在定义表的地方(通常在其 viewController 的 viewDidLoad
中),定义其 accessibilityIdentifier
:
_myTable.accessibilityIdentifier = @"MyOptionsTable";
B- 在cellForRowAtIndexPath
中,给每个单元格一个accessibilityIdentifier
:
cell.accessibilityIdentifier = @"MySpecialCell";
C- 在您的测试用例中,获取表格,然后点击单元格:
XCUIApplication *app = [[XCUIApplication alloc] init];
XCUIElement *table = app.tables[@"MyOptionsTable"];
XCUIElement *cell = table.cells[@"MySpecialCell"];
[cell tap];
【讨论】:
【参考方案3】:首先设置单元格accessibilityIdentifier:
cell.accessibilityIdentifier = "Cell_\(indexPath.row)"
通过标识符获取单元格,然后点击单元格:
let cell = app.cells.element(matching: .cell, identifier: "Cell_0")
cell.tap()
【讨论】:
【参考方案4】:如果您有单元格的accessibilityIdentifier
,那么以下直接的解决方案对我来说效果很好:
app.cells["your_accessibility_identifer"].tap()
使用表格视图访问标识符和表格视图单元格标识符,投票最多的答案对我不起作用。它首先找到表格视图,然后在找到单元格时就失败了。
来源:1。
【讨论】:
以上是关于在 Xcode ui 测试 Swift 中查找表格单元格的主要内容,如果未能解决你的问题,请参考以下文章
Xcode UI 测试(目标 C):通过 Accessibility Label 查找元素
在 Xcode 7.0.1 中进行 UI 测试时,是不是可以使用 Swift 滚动到 Element()?