为什么NSPredicate accessibilityIdentifier会失败?

时间:2016-02-09 02:46:49

标签: swift xcode-ui-testing

当我使用以下代码运行测试时:

let shuffle = app.buttons.elementMatchingPredicate(NSPredicate(format: "accessibilityIdentifier=%@", "shuffle"))
expectationForPredicate(NSPredicate(format: "hittable=TRUE"), evaluatedWithObject: shuffle, handler: nil)
waitForExpectationsWithTimeout(2) {_ in}
shuffle.tap()

测试失败。但是当我使用这段代码时:

let shuffle = app.buttons["shuffle"]
expectationForPredicate(NSPredicate(format: "hittable=TRUE"), evaluatedWithObject: shuffle, handler: nil)
waitForExpectationsWithTimeout(2) {_ in}
shuffle.tap()

http://www.bricepollock.com/difference-xcode-ui-testing-ui-automation-instrument/

这家伙特别指出UIT对UIA的巨大改进是UIT使用每次使用时快速评估的查询,而不是评估一次并对结果集进行操作。这里似乎有一个糟糕的设计原则。任何人都可以解释第一个查询有什么问题吗?

expectationForPredicate(NSPredicate("ANY accessibilityIdentifier=%@"), evaluatedWithObject: app.buttons)

似乎也不起作用。是否有文档描述哪些函数是查询以及哪些是结果集?我只能在Apple的网站上找到1页描述如何使用这个新的XCUI套件,并且它在示例上受到严重限制。

1 个答案:

答案 0 :(得分:0)

我建议观看WWDC视频: https://developer.apple.com/videos/play/wwdc2015-406/

此外,这个地方看起来有关于你将在单元测试中使用的XCUI *对象的文档: http://masilotti.com/xctest-documentation/

我没有针对某些内容失败的具体答案,因为这部分取决于您的用户界面。看起来您正在设置看起来正确的辅助功能标识符。我会像这样编写这个测试:

jQuery(window).resize(function(){location.reload();});

使用Xcode UI测试框架,通常不再需要超时。