Sal*_*ler 17 ios xctest swift xcode-ui-testing
我有一个类型.Image和类的变量XCUIElement.像这样的东西:
var image = app.descendantsMatchingType(.Image).elementAtIndex(0)
有没有办法可以提取实际图像,以便将其与其他图像进行比较?
我试过caling value方法,但它返回一个字符串.将它投射到UIImage总是失败.
Dan*_*all 19
我最近与Apple Developer Tools布道者讨论了这个问题.目前无法从图像视图,按钮等访问实际图像.同样,无法访问可能感兴趣的其他视图属性,如"isHidden"或"attributedText"等.我是告诉他们,UI测试团队的工程师对人们想要访问这些属性的用例感兴趣,因此对他们和其他想要此功能的人都非常有帮助 - 如果你愿意的话提交错误报告/功能请求,请访问https://bugreport.apple.com
作为关于XCUIElement上的"value"属性的提示,至少现在这似乎映射到XCUIElement正在引用的任何视图的"accessibilityValue"属性.因此,如果您设置了您感兴趣的视图的accessibilityValue以包含您有兴趣验证的一些信息,那么这可能有助于测试.但要注意两件事:
1)即使XCUIElement的"value"属性是"id"类型,accessibilityValue属性的类型也是"NSString".我不知道如果你试图强制一些非字符串值(如图像)到accessibilityValue然后尝试从XCUIElement的"value"属性中检索它会发生什么,但我怀疑它不会很好.部分原因是:
2)Apple的VoiceOver功能实际上将视图的accessibilityValue属性用于视障人士.设置该值时,当用户点击该元素时,它将被大声读出(这就是为什么它应该是一个字符串).
我还在这里讨论了无法通过XCUIElement访问视图属性的问题:http://www.danielhall.io/exploring-the-new-ui-testing-features-of-xcode-7
我知道可能不是您要找的东西,但是我设法编写了一个测试来检查UIImage屏幕上的视觉表示是否已更改。
我正在使用一种screenshot()方法,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 intended
XCTAssertNotEqual(screenshotBefore.pngRepresentation, screenshotAfter.pngRepresentation)
Run Code Online (Sandbox Code Playgroud)
屏幕截图将是屏幕上显示的图像大小,这当然可能与原始图像不同。
使用pngRepresentation属性而不是XCUIScreenshot对象来比较PNG表示很重要,因为两个对象在内部始终是不同的。
该技术无法测试屏幕上显示的图像是否确实需要,但至少可以检测到图像中的变化。
| 归档时间: |
|
| 查看次数: |
4398 次 |
| 最近记录: |