【问题标题】:Extract information from XCUIElement从 XCUIElement 中提取信息
【发布时间】:2015-10-23 18:13:36
【问题描述】:

如果我正在尝试编写不依赖于标签或其他特定于值的元素的通用测试,我如何获取这些信息?就像我要点击一个表格视图单元格并稍后需要一些信息一样。喜欢识别哪个单元格被窃听。如何使用 XCUIElement 从中获取标签?

【问题讨论】:

    标签: xcode7 ui-testing xcode-ui-testing


    【解决方案1】:

    您可以从XCUIElement 中提取的信息仅限于XCUIElementAttributes protocol 中的信息。其中最值得注意的是identifiervaluetitle

    您可以在生产代码中通过-accessibilityIdentifier 设置identifiervalue 属性可以从几个不同的路径设置,但它通常是控件的活动状态。例如,选择器的选定元素。

    您可以尝试使用 Accessibility Inspector 查看已在您的元素上设置的内容,然后使用查询来查找该元素。

    【讨论】:

    • 由于某种原因,我永远无法获得实际值。我一直在尝试这样的事情: app.tables.elementBoundByIndex(0).cells.elementBoundByIndex(3).staticTexts.elementBoundByIndex(1) 并且永远不会得到实际值。我不断得到: Optional() 并将其作为字符串解包给我一个空字符串
    • 原来我最终没有为 UI 层次结构正确链接 XCUIElementQueries。顺便说一句,你的网站真的很有帮助。感谢您运行它。在此之前我也一直在关注它。
    【解决方案2】:

    您可以提取一些状态,例如,accessibilityIdentifier、isHitable、value 或其他任何状态,但遗憾的是您无法设置/更改其中的任何一个。因此,显然您无法检测 XCUIElement 是否已被点击。这是 ui test fw 的一大限制。

    【讨论】:

      【解决方案3】:

      Joe 的答案是正确的,但他忽略了如何实际获取他指定的属性的值。

      假设我想获取为我的应用程序的导航栏打印的字符串

      我所做的是为我的导航栏创建了一个 XCUIElement:

      XCUIApplication *app = [[XCUIApplication alloc] init];
      XCUIElement *navBarTitle = [app.navigationBars elementBoundByIndex:0];
      

      然后我在 navBarTitle 对象创建后放了一个断点,并使用调试控制台打印出 navBarTitle 对象的详细信息:

      您在调试控制台的打印输出中看到有一个名为 identifier

      为了从该对象中提取该字符串,我使用以下方法创建了一个 NSString 对象:

      NSString *nameofuser = [navBarTitle valueForKey:@"identifier"];
      

      我使用了 XCUIElement navBarTitle,然后使用了 valueForKey 方法。 valueForKey 提取键标识符的字符串值。

      您可以在此处阅读有关此方法的信息: NSKeyValueCoding

      valueForKey 是解开这个问题的答案的关键....双关语:)

      【讨论】:

        猜你喜欢
        • 2017-06-07
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多