Ios 如何使用XUITest测试UIImageView是否包含具有特定名称的图像?

Ios 如何使用XUITest测试UIImageView是否包含具有特定名称的图像?,ios,swift,xcode,xctest,xcuitest,Ios,Swift,Xcode,Xctest,Xcuitest,我有一个collectionView,它有一组单元格,每个单元格中包含一个UIImageView。我想测试是否在每个单元格中,imageView的图像与正确的图像名称匹配 在生产代码中,我向UIImageView示例添加了一个可访问性标识符:“我的图像视图”。我循环遍历包含图像名称的字符串数组,并根据索引设置单元格的图像,例如:[“image0.png”、“image1.png”、“image2.png”],因此索引0-2处的单元格将分别具有这些图像 在我的XCUITest文件中,我正在尝试以下

我有一个collectionView,它有一组单元格,每个单元格中包含一个UIImageView。我想测试是否在每个单元格中,imageView的图像与正确的图像名称匹配

在生产代码中,我向UIImageView示例添加了一个可访问性标识符:“我的图像视图”。我循环遍历包含图像名称的字符串数组,并根据索引设置单元格的图像,例如:[“image0.png”、“image1.png”、“image2.png”],因此索引0-2处的单元格将分别具有这些图像

在我的XCUITest文件中,我正在尝试以下内容:

XCTAssert(cells.images["My Image View"].exists, "message here")
但这不会检查单元格的imageView是否具有正确的图像。有人能提出更好的解决方案吗

我之前访问过的一些参考资料:

很抱歉,如果以前有人问过这个问题,我什么也找不到

编辑: 我找到了解决办法

let image = cells.element(matching: , identifier: )
我不知道identifier参数实际上使用图像名称,因此如果我传递图像名称,我可以断言图像的存在

let image = cells.element(matching: .image, identifier: "myImage.png")
这很有效。因此,当我循环遍历包含图像名称的字符串数组时,我还可以检查与图像索引对应的索引处的单元格是否正确

我还忘了提到图像不是存储在资产中,而是通过json获取的


cesarmarch下面的回答是最接近的,因此我将其标记为正确。

XTest UI测试设计为功能测试,而不是检查显示是否正确。由于图像没有显示UI测试要观察的行为,因此UI测试不是该工作的最佳工具


在这种情况下,您应该编写单元测试来断言为图像视图指定了正确的图像,因为单元测试将有权访问正确级别的信息,允许您检查传递到视图表示层的数据,并断言指定的图像是您期望的图像。

在构建时,项目中的所有图像都将导出到应用程序包中。在UI测试组下有一个文件夹,其中包含所有需要验证的预期图像和一个虚拟图像文件

var url = Bundle(for: AnyClass.self).url(forResource: "<ExpectedImageName>", withExtension: "<imageExtension png/jpg/etc>")!
let expectedImage = NSImage(contentsOf: url)!.tiffRepresentation!
url = Bundle(for: AnyClass.self).url(forResource: "<NameOfDummyImageFile>", withExtension: "png")!
try? cells.images["My Image View"].screenshot().pngRepresentation.write(to: url)
let actualImage = NSImage(contentsOf: url)!.tiffRepresentation!
XCTAssert(actualImage.elementsEqual(expectedImage), "Images are not same.")
var url=Bundle(用于:AnyClass.self)。url(用于资源:,扩展名:)!
让expectedImage=NSImage(contentsOf:url)!。蒂芙代表!
url=Bundle(用于:AnyClass.self)。url(用于资源:“”,扩展名为:“png”)!
尝试cells.images[“我的图像视图”].screenshot().pngRepresentation.write(收件人:url)
让现实图像=NSImage(contentsOf:url)!。蒂芙代表!
xctasert(实现图像.elementsEqual(预期图像),“图像不一样。”)

上面的代码对我很有用。。希望这也适用于您

我只是使用了类似

xctasert(cells.images[“Image\u Name\u In\u Resource\u Directory”]存在,“message here”)


检查当前图像是否适合使用且工作正常。

感谢您的回复。这是一个有趣的方法。我没有提到图像文件没有存储在我的资产中。而是通过json.Ok获取图像。我认为您也可以在测试中通过json获取图像。或者,如果图像没有随机分配到单元格,您可以尝试将其添加到项目资产中。感谢您的回复。我找到了解决办法。你的是最接近的,所以我把你的标记为已解决。非常感谢。这对我不起作用…:(Xcode 12.4Oletha对这种方法的看法是正确的;网络的测试将慢几个数量级,而且更脆弱。这就是为什么测试应该在单元测试级别进行的另一个原因。