UI测试iOS,选择安全文本输入textField

17

我有一个密码和确认密码的文本框,我已经应用了“安全文本输入”来掩盖密码。然而,当我运行UI测试时,这些字段不能被找到。

UI测试失败-找不到匹配的“密码”文本框

我正在尝试这样选择字段:

let passwordTextField = app.textFields["password"]

但是当我尝试点击时,它就失败了:

passwordTextField.tap()

你有没有任何关于我如何访问该字段的想法?


失败信息是什么? - Joe Masilotti
失败具体表现为“UI 测试失败 - 未找到“密码”文本框”。但是当我取消“安全输入文本”选项后,它可以轻松找到。 - sebradloff
你能打开辅助功能检查器,看看文本字段的标识符是什么吗?当其变成一个安全输入字段时,它可能不是密码。 - Joe Masilotti
3
另外,您可以尝试使用“secureTextFields”而不是“textFields”吗? - Joe Masilotti
刚刚重新检查了一下,辅助功能检查器中的标识符是“password”。 - sebradloff
3个回答

47

如评论中所讨论的,在访问安全文本字段时,请使用 secureTextFields 选择器。

let passwordTextField = app.secureTextFields["password"]
passwordTextField.tap()
passwordTextField.typeText("my secure password")

1
哇,我看了好几篇关于UI测试的文章,这是我第一次听说secureTextFields选择器。谢谢! - TylerJames

7

如果您需要输入到安全文本字段(secureTextField),请注意:

如果“菜单-输入输出-硬件键盘”功能已打开,则无法使用typeText方法输入到安全文本字段。

请参考下图操作,可成功向安全文本字段输入文字:

enter image description here

请使用以下方法向安全文本字段输入文字:

        password.tap()

        app.keys["t"].tap()
        app.keys["e"].tap()
        app.keys["s"].tap()
        app.keys["t"].tap()

0

乔的回答很好,但对于我的使用情况来说不够充分。我必须通过索引找到所有文本字段,无论是普通文本字段还是安全文本字段。我在网上找不到任何有关此的信息。

这就是我得出的结论:

// elementType must be specified as integer
//
// See:
//  * https://developer.apple.com/documentation/xctest/xcuielementtype/xcuielementtypetextfield
//  * https://developer.apple.com/documentation/xctest/xcuielementtype/xcuielementtypesecuretextfield
let textFieldPredicate = NSPredicate(format: "elementType == 49")
let secureTextFieldPredicate = NSPredicate(format: "elementType == 50")
let predicate = NSCompoundPredicate(
    orPredicateWithSubpredicates: [
        textFieldPredicate,
        secureTextFieldPredicate
    ]
)

let textFields = app.descendants(matching: .any).matching(predicate)
let textField = textFields.firstMatch
textField.tap()
textField.typeText('yeah boi')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接