如何获取 XCUIElement 的值?

Posted

技术标签:

【中文标题】如何获取 XCUIElement 的值?【英文标题】:how to get value of an XCUIElement? 【发布时间】:2015-08-05 19:58:52 【问题描述】:

XCODE7 UITesting中如何获取textfield的值?

var b = XCUIApplication().childrenMatchingType(.textField).elementBoundByIndex(0).stringValue

【问题讨论】:

【参考方案1】:

假设您有一个这样的文本字段:

(为了示例,我正在硬编码它的值(“我的文本”)。)

给它一个Accessibility Label。在这种情况下,我给它“文本字段”标签。

现在要访问它的值,您可以执行以下操作:

func testExample() 

    let app = XCUIApplication()        
    let textField = app.textFields["Text Field"]
    XCTAssertTrue(textField.value as! String == "My Text")

    // So basically "textField.value"

附带说明:当对如何访问给定XCUIElement 的某些属性有疑问时,我发现它的debugDescription 有很大帮助。

比如在属性声明后设置断点,执行测试,等待应用停在断点处,进入lldb console,输入po propertyName.debugDescription,查看输出:

希望对你有帮助。

【讨论】:

【参考方案2】:

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

我所做的是为我的导航栏创建了一个 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 是解开这个问题答案的关键....双关语:)

【讨论】:

我对此赞不绝口! lldb 中的“po...”是救命稻草!【参考方案3】:

app.staticTexts.element(boundBy: 1).label

【讨论】:

欢迎来到 SO,为了更好地展示你的答案,请参考这个:meta.***.com/a/251362/3519504

以上是关于如何获取 XCUIElement 的值?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 从 XCUIElement 获取 UI 元素

XCUIElement 获取底层元素对象,例如 WebView

当它不是可访问性元素时,是不是可以通过其 `accessibilityId` 获取`XCUIElement`?

iOS UITests - 如何区分两个不同的 XCUIElement?

如何查看 XCUIElement 树?

Xcode UI 测试:如何在继续测试之前检查下一个 XCUIElement 是啥