SlackTextViewController UI 测试录制:使用 XCUITest 自动化交互
测试环境准备
从项目结构分析,SlackTextViewController 提供了多种交互场景的示例工程,推荐使用 Examples/Messenger-Storyboard 作为测试宿主应用。该工程包含完整的界面布局文件 Base.lproj/Main.storyboard 和视图控制器 ViewController.m,可直接构建运行。
核心测试组件定位
通过分析 SLKTextView.h 和 SLKTextViewController.h 定义,关键 UI 元素的可访问性标识建议配置如下:
| 组件类型 | 类定义 | 建议 Accessibility ID |
|---|---|---|
| 文本输入框 | SLKTextView | "messageInputView" |
| 发送按钮 | SLKTextInputbar | "sendButton" |
| 消息列表 | UITableView/UICollectionView | "messagesCollectionView" |
测试用例录制步骤
-
启动测试录制
打开 Xcode 工程 Messenger.xcodeproj,在菜单栏选择Xcode > Open Developer Tool > Accessibility Inspector,连接测试设备后点击录制按钮。 -
基础交互录制
录制用户输入场景时,确保捕获以下操作序列:- 点击文本输入框触发键盘弹出
- 输入多行文本观察视图自动扩展(核心特性:SLKTextView+SLKAdditions.m)
- 点击发送按钮提交消息
-
特殊场景录制
针对编辑模式切换(SLKTextInputbar.h)和动态类型调整(screenshot_dynamic-type.png),需录制:- 双击消息气泡进入编辑状态
- 通过系统设置调整字体大小验证布局适配
测试代码生成与优化
XCUITest 录制会生成基础操作代码,需手动优化以适配 SlackTextViewController 的交互特性。以下是优化后的测试方法示例:
- (void)testMessageSendingFlow {
let app = XCUIApplication()
app.launch()
// 输入测试文本(验证自动扩展功能)
let inputView = app.textViews["messageInputView"]
inputView.tap()
inputView.typeText("Hello World\nThis is a multi-line message")
// 验证输入框高度变化(参考 SLKTextView 动态高度计算)
let initialHeight = inputView.frame.size.height
inputView.typeText("\nAnother line to trigger expansion")
XCTAssertGreaterThan(inputView.frame.size.height, initialHeight)
// 发送消息并验证列表更新
app.buttons["sendButton"].tap()
XCTAssertTrue(app.collectionViews["messagesCollectionView"].cells.count > 0)
}
测试套件集成
项目已包含基础单元测试 FrameworkTests.m,建议在同一测试目标中添加 UI 测试。配置路径:
File Templates/SlackTextView Controller.xctemplate/ 提供的模板文件可快速生成测试类,其中 UITableView/FILEBASENAME.m 包含列表交互基础代码。
测试结果验证
执行测试后,通过对比 Screenshots/ 目录中的参考图像验证 UI 一致性:
- 自动完成功能:screenshot_auto-completion.png
- Markdown 格式化:screenshot_markdown-formatting.png
- 输入框扩展动画:screenshot_auto-expanding.png
持续集成配置
将 UI 测试集成到 CI 流程时,需在测试计划中指定:
- 测试目标:
Messenger-StoryboardUITests - 设备配置:iPhone 14 (iOS 16)
- 关键指标:测试覆盖率需包含 SLKTextInput.m 中的核心方法
注意:项目已标记为 deprecated,所有测试应基于最新 commit 进行。完整测试代码可参考 SlackTextViewControllerTests 目录结构。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



