XCUIElement - 获取图像值

时间:2015-07-06 16:25:45

标签: ios swift xctest xcode-ui-testing

我有一个类型为.Image和类XCUIElement的变量。像这样:

var image = app.descendantsMatchingType(.Image).elementAtIndex(0)

有没有办法可以提取实际图像,以便将其与其他图像进行比较?

我尝试过调用value方法,但它返回一个字符串。将其转换为UIImage始终会失败。

2 个答案:

答案 0 :(得分:18)

我最近与Apple Developer Tools布道者讨论了这个问题。目前无法从图像视图,按钮等访问实际图像。同样,无法访问可能感兴趣的其他视图属性,例如" isHidden"我被告知UI测试团队的工程师对人们想要访问这些属性的用例感兴趣,因此对他们来说非常有帮助。或者" attributionText"等。对于想要此功能的其他人 - 如果您要在https://bugreport.apple.com

提交错误报告/功能请求

作为关于"价值的提示" XCUIElement上的属性,至少现在这似乎映射到" accessibilityValue" XCUIElement引用的任何视图的属性。因此,如果您设置了您感兴趣的视图的accessibilityValue以包含您要验证的一些信息,那么这可能有助于测试。但有两点需要注意:

1)即使"值" XCUIElement的属性是" id"类型,accessibilityValue属性的类型是" NSString"。我不知道如果你试图将一些非字符串值(如图像)强制加入accessibilityValue然后尝试从"值"中检索它会发生什么。 XCUIElement的财产,但我怀疑它不会运作良好。部分原因是:

2)视频的accessibilityValue属性实际上由Apple的VoiceOver功能用于视障人士。当设置该值时,当用户点击该元素时,它将被大声读出(这就是为什么它应该是一个字符串)。

我还在这里讨论了无法通过XCUIElement访问视图属性的问题:http://www.danielhall.io/exploring-the-new-ui-testing-features-of-xcode-7

答案 1 :(得分:2)

我知道可能不是您要找的东西,但是我设法编写了一个测试来检查屏幕上UIImage的视觉表示是否已更改。

我正在使用screenshot()的{​​{1}}方法,该方法返回XCUIElement的实例:

XCUIScreenshot

屏幕截图将是屏幕上显示的图像大小,可能与原始图像或路线不同。

使用let myImage = XCUIApplication().images["myAccessibilityIdentifier"] let screenshotBefore = myImage.screenshot() //... //do some actions that change the image being displayed //... let screenshotAfter = myImage.screenshot() //Validating that the image changed as intented XCTAssertNotEqual(screenshotBefore.pngRepresentation, screenshotAfter. pngRepresentation) 属性而不是pngRepresentation对象来比较PNG表示很重要,因为两个对象在内部始终是不同的。

该技术无法测试屏幕上显示的图像是否确实需要,但至少可以检测到图像中的变化。