在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)
但是如果我们像上面那样使用谓词,我们可能无法断言整个文本消息。还有其他任何可能的方法可以断言整个文本吗?请告诉我。
谢谢,干杯:)
答案 0 :(得分:3)
为什么不使用LIKE
代替BEGINSWITH
。 LIKE
匹配整个文字。
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
添加到标识符部分。
如果使用ViewController来操作视图,只需写下:
lengthyLabel.accessibilityIdentifier = "lengthyTextLabel"
在你的测试中,你可以写下这个来获得你的元素:
let lengthyText = app.staticTexts.element(matching: .any, identifier: "lengthyTextLabel")
通过这种方式,您可以找到您的长文:lengthyText.label
。