You need to enable JavaScript to run this app. 使用Xcode UI测试时如何获取secureTextField的明文而非圆点内容
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:45:01