从 XCUIElement 中提取信息

Extract information from XCUIElement

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

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

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

您可以尝试使用辅助功能检查器查看元素上已设置的内容,然后使用查询来查找该元素。

Joe 大致找到了正确的答案,但他遗漏了如何实际获取他指定的属性的值。

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

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

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

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

您在调试控制台的打印输出中看到有一个名为 identifier[=41 的 key =].

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

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

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

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

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

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