【问题标题】:Xcode 9.3 staticText element query limits 128 characters for UI testingXcode 9.3 staticText 元素查询限制 128 个字符用于 UI 测试
【发布时间】:2018-05-11 11:42:25
【问题描述】:

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

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效查询 - 字符串 标识符“超过 128 个字符的冗长消息...”超过 最大长度为 128 个字符。您可以解决此限制 通过使用指定的自定义 NSPredicate 构造查询 属性(标签、标题、值、占位符值或标识符)到 匹配。'

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

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

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

谢谢,干杯:)

【问题讨论】:

    标签: xcode-ui-testing


    【解决方案1】:

    为什么不使用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)
    


    编辑:阅读 OP 的评论后,我建议采用替代方法:

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

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

    lengthyLabel.accessibilityIdentifier = "lengthyTextLabel"
    

    在您的测试中,您可以通过编写以下代码来获取您的元素:

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

    这样您就可以找到您的长文本:lengthyText.label

    【讨论】:

    • 感谢@lagoman 的回复。 LIKE 不起作用,因为冗长的文本有换行符,还有其他选择吗?
    • @Saranya 我编辑了我的答案,为您的问题添加了替代方法。
    • 谢谢@lagoman,我尝试使用 'LIKE' 并将换行符 '\n' 替换为 '?'这对我有用,谢谢:)
    • @Saranya 不客气。不要忘记接受答案。
    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多