如何通过标签名称从静态文本列表中筛选

How to filter from a list of static texts through the name of a label

提问人:Ben 提问时间:9/26/2023 最后编辑:Ben 更新时间:10/2/2023 访问量:37

问:

这:

let car = app.descendants(matching: .any)["car_view_81"]

返回:

↪︎Find: Elements matching predicate '"car_view_81" IN identifiers'
  Output: {
    StaticText, 0x153216ec0, {{167.5, 316.7}, {58.0, 19.7}}, identifier: 'car_view_81', label: 'Car'
    Image, 0x153216fe0, {{60.0, 358.3}, {30.0, 30.0}}, identifier: 'car_view_81'
    StaticText, 0x153217100, {{306.8, 365.6}, {22.3, 15.3}}, identifier: 'car_view_81', label: '13%'
    StaticText, 0x153217220, {{59.8, 423.6}, {30.3, 15.3}}, identifier: 'car_view_81', label: 'Draw'
    StaticText, 0x153217340, {{305.5, 423.6}, {25.0, 15.3}}, identifier: 'car_view_81', label: '33%'
    Image, 0x153217460, {{60.0, 474.3}, {30.0, 30.0}}, identifier: 'car_view_81'
    StaticText, 0x153217580, {{305.5, 481.6}, {25.0, 15.3}}, identifier: 'car_view_81', label: '54%'
  }

此视图中有多个静态文本元素。

我想按标签“绘制”进行过滤,以检查此静态文本是否存在。

我试过:

car.staticTexts["Draw"].firstMatch

这似乎没有过滤。

我也尝试过谓词,但似乎也没有过滤:("label == "Draw"")

let predicate = NSPredicate(format: "label CONTAINS[c] 'Draw'")

let car_view = app.staticTexts["car_view_81"]

return car_view.staticTexts.containing(predicate).element

如何从函数返回的标识符列表中进行筛选?.descendants

非常感谢

swift xcuitest xcuielement

评论


答:

1赞 Mike Collins 9/29/2023 #1

car以 .XCUIElementQuery

我们想在其中找到一个元素。XCUIElementQuery

car.element(...)是一个很好的功能。

我很想调用这个函数:

func element(
  matching elementType: XCUIElement.ElementType,
  identifier: String?
) -> XCUIElement

但是我对 XCUITest 有点生疏,并且没有任何测试代码,所以我不知道如果标识符存在但不匹配,它是否会回退到尝试标签。

因此,我们被困在(或至少是最安全的)谓词匹配中func element(matching predicate: NSPredicate)

let car = app.descendants(matching: .any)["car_view_81"]
let drawPredicate = NSPredicate(format: "type == 'staticText' AND label == 'Draw'")
return car.element(predicate: drawPredicate)

参考:XCUIElementQuery 文档

0赞 Ben 10/2/2023 #2
app.staticTexts.matching(identifier: "car_view_81")
               .containing(XCUIElement.ElementType.staticText, identifier: "Draw")
               .element

解决了我的问题。

用于获取 的 然后调用过滤器来提取 “Draw” 元素。.matchingXCUIElementQuerycar_view_81containing