iOS - UI 测试在 UITableViewCell 中查找图像
Posted
技术标签:
【中文标题】iOS - UI 测试在 UITableViewCell 中查找图像【英文标题】:iOS - UI Testing Find Image In TableViewCell 【发布时间】:2017-06-30 07:34:00 【问题描述】:作为 UI 测试的新手,我正在为我几乎完成的、Objective-C 编码的应用程序编写 UI 测试。
我有一个带有自定义单元格的 UITableView。单元格要么具有文本视图,要么具有图像或进度视图。图像或进度视图是动态设置的。
对于我的测试,我需要检查是否设置了图像。我尝试使用accessibilityIdentifier
属性。我在该单元格的初始化方法中将其设置为:
self.thumbnailImageView.isAccessibilityElement = YES;
self.thumbnailImageView.accessibilityIdentifier = @"imageLabel"
在我的测试中,我得到了单元格并尝试根据标识符获取它的元素,例如:
XCUIElementQuery *tablesQuery = app.tables;
XCUIElementQuery *cellsQuery = app.tables.cells;
XCUIElement *lastCell = [[tablesQuery childrenMatchingType:XCUIElementTypeCell] elementBoundByIndex:(cellsQuery.count - 1)];
XCUIElement *image = lastCell.otherElements[@"imageLabel"];
我没有从 app.otherElements 获取图像,因为创建了多个单元格,其中许多单元格可能具有图像视图。我想检查最后一个单元格和它的图像。 在此之后,我将断言设置为:
XCTAssertTrue(image.exists, @"Image cell has failed");
它永远不会通过这个测试,并且还会进入异常断点 (?)。我检查图像的情况,它不是零。
我不知道该怎么做。对于 Objective-C,几乎没有 UI 测试的文档。仍然 Swift 文档会很好,但它们也不够。
任何帮助都会非常好。谢谢!
【问题讨论】:
您可以通过在 Apple Docs 的菜单栏中切换语言来获取 Objective-C API 的文档。以下是 Apple 对 UI 测试的简要说明:developer.apple.com/documentation/xctest/… 谢谢,我知道这项服务,但这还不够。 【参考方案1】:UI 测试仅针对可见单元格运行,即使执行测试用例,您的最后一个单元格也不会加载。因此,以编程方式滚动 tableView 内容,一旦你到达 tableview 内容的末尾(在这里你需要再次期望你滚动到 tableview 内容的末尾)。之后,您的 UI 测试将通过。
【讨论】:
但是如果我使用相同的 lastCell 对象并检查它是否有文本,它工作正常。然后它必须在我执行断言时插入。 那个时候你有最后一个单元格,因为你滚动到内容偏移量。 一切都一样。有什么区别? UITableView 重用单元格。它创建用户可见的单元格。如果您向上或向下滚动,它会利用现有单元格来避免内存问题。您只能在可见单元格上执行测试。要自动测试所有单元格,您需要在代码中滚动单元格。 我知道这些细节。我的意思是,我在任何类型的内容中添加单元格并向下滚动(无论是文本还是图像,都无所谓)。如果我可以查看文本,那么我无法访问图像的区别是什么?以上是关于iOS - UI 测试在 UITableViewCell 中查找图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在现有的 ios 测试项目中启用 xcode 7 UI 测试