在 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()?

Xcode Swift UI 测试 - 模拟器硬件键盘

无法在 Xcode UI 测试中点击表格单元格

如何在 Xcode 中的 UI 测试类的目标中包含 SwiftyUserDefaults.swift?

Xcode swift UI 测试对比两张截图