2015-10-23 146 views
2

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

回答

1

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

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

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

+1

由于某种原因,我永远无法获得实际的价值。我一直在尝试这样的事情: app.tables.elementBoundByIndex(0).cells.elementBoundByIndex(3).staticTexts。elementBoundByIndex(1) 永远不会得到实际的价值。我一直得到: 可选() 并将其解包为一个字符串给我一个空字符串 – ajc6432

+0

原来我最终没有为UI层次结构正确链接XCUIElementQueries。顺便说一句,你的网站真的很有帮助。感谢您运行它。在此之前,我一直坚持这一点。 – ajc6432

0

乔一直在正确的答案,但他忽略了如何实际得到他指定的属性的值。

让我们假设我想那会打印我的应用程序的导航栏的字符串

enter image description here

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

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

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

print out

您在打印看出来调试控制台中的有一个名为标识一个关键

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

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

我用XCUIElement navBarTitle,然后用于该方法valueForKey。 valueForKey提取密钥标识符的字符串值。

您可以了解这种方法在这里读了起来: NSKeyValueCoding

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

0

您可以提取一些国家,例如, accessibilityIdentifier,isHitable,value或其他,但不幸的是,你不能设置/更改任何这些。所以显然你无法检测到XCUIElement是否已被窃听。这在UI测试中是一个很大的限制。