Xcode 9.3 staticText元素查询限制128个字符用于UI测试

时间:2018-05-11 11:42:25

标签: xcode-ui-testing

在Xcode 9.3中,当我尝试运行UI测试用例时,它开始给我下面的异常,它发现超过128个字符的冗长消息 -

  

由于未捕获的异常终止应用' NSInternalInconsistencyException',原因:'无效的查询 - 字符串   标识符"超过128个字符的冗长消息..."超过   最大长度为128个字符。您可以解决此限制   通过使用指定的自定义NSPredicate构造查询   属性(label,title,value,placeholderValue或identifier)   匹配。'

给出的解决方法是使用下面的自定义NSPredicate,

let predicate = NSPredicate(format: "label BEGINSWITH 'Empty '")
let label = app.staticTexts.element(matching: predicate)
XCTAssert(label.exists)

但是如果我们像上面那样使用谓词,我们可能无法断言整个文本消息。还有其他任何可能的方法可以断言整个文本吗?请告诉我。

谢谢,干杯:)

1 个答案:

答案 0 :(得分:3)

为什么不使用LIKE代替BEGINSWITHLIKE匹配整个文字。

let predicate = NSPredicate(format: "label LIKE 'Your lengthy text that you want to match...'")
let label = app.staticTexts.element(matching: predicate)
XCTAssert(label.exists)


EDIT :在阅读OP的评论后,我建议采用其他方法:

如果使用Interface Builder,请将可访问性标识符添加到Label(或TextView)。您可以通过选择包含冗长文本的标签并打开位于Xcode右侧的Identity检查器来完成此操作。从那里,找到辅助功能区域并将lengthyTextLabel添加到标识符部分。

enter image description here

如果使用ViewController来操作视图,只需写下:

lengthyLabel.accessibilityIdentifier = "lengthyTextLabel"

在你的测试中,你可以写下这个来获得你的元素:

let lengthyText = app.staticTexts.element(matching: .any, identifier: "lengthyTextLabel")

通过这种方式,您可以找到您的长文:lengthyText.label