【发布时间】:2015-10-23 18:13:36
【问题描述】:
如果我正在尝试编写不依赖于标签或其他特定于值的元素的通用测试,我如何获取这些信息?就像我要点击一个表格视图单元格并稍后需要一些信息一样。喜欢识别哪个单元格被窃听。如何使用 XCUIElement 从中获取标签?
【问题讨论】:
标签: xcode7 ui-testing xcode-ui-testing
如果我正在尝试编写不依赖于标签或其他特定于值的元素的通用测试,我如何获取这些信息?就像我要点击一个表格视图单元格并稍后需要一些信息一样。喜欢识别哪个单元格被窃听。如何使用 XCUIElement 从中获取标签?
【问题讨论】:
标签: xcode7 ui-testing xcode-ui-testing
您可以从XCUIElement 中提取的信息仅限于XCUIElementAttributes protocol 中的信息。其中最值得注意的是identifier、value 和title。
您可以在生产代码中通过-accessibilityIdentifier 设置identifier。 value 属性可以从几个不同的路径设置,但它通常是控件的活动状态。例如,选择器的选定元素。
您可以尝试使用 Accessibility Inspector 查看已在您的元素上设置的内容,然后使用查询来查找该元素。
【讨论】:
您可以提取一些状态,例如,accessibilityIdentifier、isHitable、value 或其他任何状态,但遗憾的是您无法设置/更改其中的任何一个。因此,显然您无法检测 XCUIElement 是否已被点击。这是 ui test fw 的一大限制。
【讨论】:
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 是解开这个问题的答案的关键....双关语:)
【讨论】: