我有这个错误:XCTAssertTrue failed: throwing "[<XCElementSnapshot 0x7fea978b1a10> valueForUndefinedKey:]: this class is not key value coding-compliant for the key staticTexts."
以下是代码:
let predicate = NSPredicate(format: "(self.staticTexts[%@].exists == true) AND (self.staticTexts[%@].exists == true)", message, nameString)
XCTAssert(app.collectionViews.childrenMatchingType(.Cell).elementMatchingPredicate(predicate).exists)
第二行引发错误。
我已经在SO上查看了其他答案并且出现了相同的错误,这主要是由于有一个不同类的变量引起的,但是我没有看到这个错误的可能性。另外,我检查了谓词的格式是否正确。
如何摆脱这个错误?
答案 0 :(得分:4)
确保您的staticTexts
属性为dynamic
或以其他方式可用于objc(例如,将其标记为@objc
)。除非它认为需要,否则Swift不会生成符合KVC标准的访问者。
或者,在此处使用NSPredicate
以外的内容。在不需要时使房产动态具有性能成本,这就是Swift不自动完成的原因。因此标记它dynamic
只是因为单元测试可以访问它可能是一个不好的权衡。
答案 1 :(得分:1)
显然,当我将谓词应用于静态文本与单元格,然后尝试访问谓词中的静态文本时,错误消失了。例如,
let predicate = NSPredicate("self.title like %@", message)
app.descendantsMatchingType(.StaticText).elementMatchingPredicate(predicate).exists
将摆脱错误。