XCUI 测试:如何单击运行时填充的标签

Posted

技术标签:

【中文标题】XCUI 测试:如何单击运行时填充的标签【英文标题】:XCUI Test: How to click Labels populated at run time 【发布时间】:2017-07-24 20:39:43 【问题描述】:

我正在尝试单击在运行时填充和缓存的标签。 TableViewCell 有一个在运行时决定的 UILabel。所以我不能向它添加辅助功能标识符。但是我给UILabel添加了一个标识符,但是这个视图重复了好几次,当我在寻找一个标签时

[tablesQuery.staticTexts[@"Channels"] tap];

我收到一个错误,找到多个匹配项

我在tableView的UILabel中添加了一个标识符,myIdentifier。

如何访问标签以自动点击?

来自 app.debugDescription

Assertion Failure: Smoke.m:238: No matches found for "Recents" StaticText
Query input was (
    StaticText 0x600000563840: traits: 8589934656, 40.0, 90.0, 211.0, 21.0, identifier: 'navScreenTitle', label: 'Speaker',
    StaticText 0x600000563900: traits: 8589934656, label: 'No Volume Available',
    StaticText 0x6000005639c0: traits: 8589934656, 40.0, 90.0, 211.0, 21.0, identifier: 'navScreenTitle', label: 'Speaker',
    StaticText 0x600000563a80: traits: 8589934656, label: 'No Volume Available',
    StaticText 0x600000563b40: traits: 8589934656, 40.0, 90.0, 211.0, 21.0, identifier: 'navScreenTitle', label: 'Speaker',
    StaticText 0x600000563c00: traits: 8589934656, label: 'No Volume Available',
    StaticText 0x600000563cc0: traits: 8589934656, 40.0, 90.0, 211.0, 21.0, identifier: 'navScreenTitle', label: 'Speaker',
    StaticText 0x600000563d80: traits: 8589934656, label: 'No Volume Available'

更新: 我尝试以这种方式访问​​元素:

XCUIElement *speakerStaticText = tablesQuery.staticTexts[@"navScreenTitle"] ;

[speakerStaticText tap];

结果

   `↳Table 0x6000005681c0: traits: 35192962023424, 0.0, 77.0, 330.0, 590.0
      ↳Cell 0x6000005684c0: traits: 8589934592, 0.0, 79.0, 330.0, 88.0
      ⋅ ↳StaticText 0x600000568340: traits: 8589934656, 40.0, 90.0, 211.0, 21.0, identifier: 'navScreenTitle', label: 'Speaker'
      ↳Cell 0x6000005699c0: traits: 8589934593, 0.0, 167.0, 330.0, 44.0
      ⋅ ↳StaticText 0x600000569900: traits: 8589934656, 40.0, 178.0, 257.0, 21.0, identifier: 'navScreenTitle', label: 'Status'
      ↳Cell 0x60000056aec0: traits: 8589934593, 0.0, 213.0, 330.0, 44.0
      ⋅ ↳StaticText 0x60000056ae00: traits: 8589934656, 40.0, 224.0, 257.0, 21.0, identifier: 'navScreenTitle', label: 'Recents'
      ↳Cell 0x60000056c3c0: traits: 8589934593, 0.0, 257.0, 330.0, 44.0
      ⋅ ↳StaticText 0x60000056c300: traits: 8589934656, 40.0, 268.0, 257.0, 21.0, identifier: 'navScreenTitle', label: 'Contacts'
      ↳Cell 0x60000056d8c0: traits: 8589934593, 0.0, 301.0, 330.0, 44.0
      ⋅ ↳StaticText 0x60000056d800: traits: 8589934656, 40.0, 312.0, 257.0, 21.0, identifier: 'navScreenTitle', label: 'Channels'
      ↳Cell 0x60000056ec40: traits: 8589934593, 0.0, 347.0, 330.0, 44.0
        ↳StaticText 0x60000056eb80: traits: 8589934656, 40.0, 358.0, 257.0, 21.0, identifier: 'navScreenTitle', label: 'Options'`

我无法隔离并点击特定标签最近 请建议我如何做到这一点。

【问题讨论】:

【参考方案1】:

这适用于 Objective-C

[[[[app staticTexts] matchingIdentifier:@"Recents"]elementBoundByIndex:0]tap];

在 Swift 中:

XCUIApplication().staticTexts.matching(identifier: "Recents").element(boundBy: 0).tap()

【讨论】:

以上是关于XCUI 测试:如何单击运行时填充的标签的主要内容,如果未能解决你的问题,请参考以下文章

打开 url 外部浏览器时是不是可以测试 uitest (XCUI)?

如何在 Test suit XCUI 中禁用某些测试用例?

使用 XCUI 进行 UI 测试

如何在 XCUI 测试自动化框架中组织和分组测试用例

iOS 13 版本的 XCUI 测试框架中未检测到 iOS Search Bar

一起使用 XCUI 测试和 XC 测试