如何在XCUITest中验证元素值包含多个字符串
在XCUITest中查找同时包含多个子串的标签
你原来的写法无法生效,因为app.staticTexts.containing()返回的是XCUIElementQuery类型,不能直接用&&来组合多个查询条件。要实现同时匹配多个子串的需求,有两种常用方法:
方法一:使用NSPredicate的AND组合条件
利用NSPredicate可以直接将多个包含条件通过AND拼接,精准筛选出同时包含所有目标子串的元素:
// 构造匹配谓词,同时包含三个子串(CONTAINS[c]表示不区分大小写,去掉[c]则区分) let matchPredicate = NSPredicate(format: "label CONTAINS %@ AND label CONTAINS %@ AND label CONTAINS %@", "contentsA", "contentsB", "contentsC") // 查询符合条件的静态文本元素 let targetText = app.staticTexts.element(matching: matchPredicate) // 断言元素存在 XCTAssert(targetText.exists, "未找到同时包含三个子串的标签")
方法二:使用正则表达式匹配
如果需要更灵活的匹配规则(比如不限制子串的出现顺序),可以用正则表达式的正向预查来实现:
// 正则规则:确保文本中同时包含三个子串,顺序不限 let regexPattern = "(?=.*contentsA)(?=.*contentsB)(?=.*contentsC).*" let regexPredicate = NSPredicate(format: "label MATCHES %@", regexPattern) let targetText = app.staticTexts.element(matching: regexPredicate) XCTAssert(targetText.exists)
补充说明
你之前的代码逻辑错误在于:a、b、c分别是三个独立的查询集合,它们代表的是包含单个子串的所有元素,而非单个元素的多个条件。Swift也不支持对XCUIElementQuery直接使用逻辑运算符进行组合,因此无法通过a && b && c得到同时满足三个条件的元素。
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

