使用Xcode UI测试时如何获取secureTextField的明文而非圆点内容
实现方案
当密码输入框切换为明文状态(即secureTextEntry属性为false)时,直接读取输入框的value属性就能拿到明文内容,直接断言即可。
基础实现(适用系统原生UISecureTextField场景)
直接在点击眼睛图标后调用原有取值逻辑断言:
// 执行点击切换明文的操作 eyeToggleButton.tap() // 直接读取密码框的值,此时已返回明文而非圆点 let plainPasswordValue = getValueOf(passwordTextField) XCTAssertEqual(plainPasswordValue, "password")
更严谨的校验实现
可以先断言密码框确实处于明文状态,再校验值,避免切换逻辑失效导致的用例误判:
eyeToggleButton.tap() // 校验密码框的加密状态已切换为关闭 XCTAssertFalse(passwordTextField.secureTextEntry) // 校验明文内容 let actualPassword = passwordTextField.value as? String ?? "" XCTAssertEqual(actualPassword, "password")
自定义密码输入框兼容方案
如果你使用的是自定义封装的密码输入组件,切换明文后value仍然返回圆点,可以用以下两种方案处理:
- 读取
accessibilityValue属性:多数自定义组件会将实际明文存储在该无障碍属性中,方便自动化测试取值 - 剪贴板取值:选中输入框全部内容后复制,读取剪贴板内容进行校验,用完清空剪贴板避免影响其他测试用例,示例代码如下:
eyeToggleButton.tap() // 选中全部内容并复制 passwordTextField.doubleTap() app.menuItems["全选"].tap() app.menuItems["拷贝"].tap() // 断言剪贴板内容 let copiedPassword = UIPasteboard.general.string ?? "" XCTAssertEqual(copiedPassword, "password") // 清空剪贴板 UIPasteboard.general.string = ""
内容的提问来源于stack exchange,提问作者Person 16489461
相关产品推荐
相关产品推荐

