Day15 综合实战
适用人群:想看完一整天的内容如何串联使用
目标:综合运用前 14 天所学的核心技能
一、实战场景
综合实战模拟了 4 个真实业务场景,覆盖日常自动化测试中最常用的技能:
--- | --- | --- |
登录表单 | input、check、click、getText、assert | 7 步 |
注册表单 | input、selectByText、radio check、click、getText、assert | 8 步 |
交互元素 | rangeValue、hover、click、getText、assert | 7 步 |
工具断言 | getText、getAttribute、JSON提取、随机生成、存储变量 | 8 步 |
二、登录表单(loginTest)
1. 打开测试页
- 动作方法:navigateTo
- 说明:打开 day15_test.html 综合实战页面
2. 输入用户名
- 定位方法:getByPlaceholder(请输入用户名)
- 动作方法:input
- 动作值:admin
- 说明:通过 placeholder 定位用户名输入框并输入内容
3. 输入密码
- 定位方法:getByPlaceholder(密码)
- 动作方法:input
- 动作值:pass123
- 说明:输入密码,模拟登录表单填写
4. 勾选记住我
- 定位方法:getBylocator(#remember)
- 动作方法:check
- 说明:通过 CSS 选择器定位复选框并勾选
5. 点击登录
- 定位方法:getBylocator(#loginBtn)
- 动作方法:click
- 说明:点击登录按钮,触发 onclick 更新结果文本
6. 获取结果并存储
- 定位方法:getBylocator(#loginResult)
- 动作方法:getText
- 特殊方法:存储变量 → loginResult
- 说明:获取登录结果文本并存入变量,供后续断言使用
7. 断言含登录成功
- 定位方法:assert
- 定位值:@loginResult||登录成功
- 说明:断言存储的变量值包含"登录成功"
三、注册表单(registerTest)
8. 打开测试页
- 动作方法:navigateTo
- 说明:重新打开页面
9. 输入姓名
- 定位方法:getByPlaceholder(请输入姓名)
- 动作方法:input
- 动作值:张三
10. 输入邮箱
- 定位方法:getByPlaceholder(email@example.com)
- 动作方法:input
- 动作值:zhang@test.com
11. 选择国家
- 定位方法:getBylocator(#country)
- 动作方法:selectByText
- 动作值:#country||中国
- 说明:定位下拉框,按可见文本选择"中国"。注意参数格式:选择器||文本
12. 选中男性
- 定位方法:getBylocator(#genderM)
- 动作方法:check
- 说明:通过 CSS ID 选中 radio 选项
13. 点击注册
- 定位方法:getBylocator(#registerBtn)
- 动作方法:click
14. 获取注册结果
- 定位方法:getBylocator(#result)
- 动作方法:getText
- 特殊方法:存储变量 → regResult
15. 断言含注册成功
- 定位方法:assert
- 定位值:@regResult||注册成功
四、交互元素(interactTest)
16. 打开测试页
17. 滑块设值80
- 定位方法:getBylocator(#slider)
- 动作方法:rangeValue
- 动作值:80
- 说明:通过 boundingBox 计算坐标,鼠标点击滑块对应位置
18. 悬停按钮
- 定位方法:getBylocator(#hoverBtn)
- 动作方法:hover
- 说明:模拟鼠标悬停,触发 onmouseover 事件
19. 显示隐藏区域
- 定位方法:getBylocator(#showBtn)
- 动作方法:click
- 说明:点击按钮显示原本隐藏的 div
20. 设置动态文本
- 定位方法:getBylocator(#setTextBtn)
- 动作方法:click
- 说明:点击按钮通过 JS 设置文本内容
21. 验证动态文本
- 定位方法:getBylocator(#dynamicText)
- 动作方法:getText
- 特殊方法:存储变量 → dt
22. 断言动态文本
- 定位方法:assert
- 定位值:@dt||动态设置的文本
五、工具与断言(toolTest)
23. 打开测试页
24. 获取 h1 文本
- 定位方法:getBylocator(h1)
- 动作方法:getText
- 特殊方法:存储变量 → h1text
- 说明:获取页面标题文本,验证页面加载正确
25. 断言标题含 Day15
- 定位方法:assert
- 定位值:@h1text||Day15
26. 获取 placeholder 值
- 定位方法:getByPlaceholder(请输入用户名)
- 动作方法:getAttribute
- 动作值:placeholder
- 特殊方法:存储变量 → ph
- 说明:获取输入框的 placeholder 属性值,验证属性读取
27. 断言 placeholder
- 定位方法:assert
- 定位值:@ph||请输入
28. JSON 提取 code
- 动作方法:getValueByJsonPath
- 动作值:{"code":200}||$.code
- 特殊方法:存储变量 → code
- 说明:从 JSON 对象中按 JSONPath 提取值,验证 JSON 解析
29. 断言 code=200
- 定位方法:assert
- 定位值:@code||200
30. 随机生成 6 位
- 动作方法:randomUpperNum
- 动作值:6
- 特殊方法:存储变量 → rand
- 说明:生成随机字母数字混合字符串,验证工具方法
六、实用技巧总结
定位技巧
--- | --- | --- |
唯一 ID | getBylocator(#id) | 最快、最稳定 |
输入框 | getByPlaceholder | 语义化、不易变 |
表单标签 | getByLabel | HTML 关联,无歧义 |
按钮/链接 | getByRoleByButton / getByText | 语义化定位 |
下拉框 | getBylocator(#id) + selectByText/Value | 精确控制选项 |
复选框/单选框 | getBylocator(#id) + check/uncheck | 直接操作状态 |
变量存储与复用
#存储步骤
step("获取结果", actM="getText", specM="存储变量", specV="myVar")
#使用步骤(@变量名引用)
step("断言结果", locM="assert", locV="@myVar||期望值")
常见断言类型
--- | --- | --- | |
assert | 包含断言(contains) | @var | 期望文本 |
assertEquals | 等于断言(equals) | @var | 完全匹配 |
assertNot | 不包含断言(!contains) | @var | 不期望文本 |
assertEqualsNot | 不等于断言(!equals) | @var | 不匹配文本 |
参数分隔约定
所有多参定位/动作值统一使用 `||` 分割:
- `selectByText`:`#country||中国`(选择器 + 文本)
- `getByPlaceholderNth`:`请输入用户名||0`(文本 + 索引)
- `dragTo`:`getBylocator||#drop-target`(定位方式 + 定位值)
注意事项
1. `evaluate()` 返回 void,返回值无法存储。要获取 JS 结果请改用 `getText` 等有返回值的方法
2. 断言使用 `@变量名` 引用已存储的值,`paramDeal` 会自动解析
3. `failureIsGo="是"` 控制步骤失败后的行为:是 = 继续执行,否 = 跳出循环
4. 超时时间统一设为 3000ms,避免单个步骤等待 30 秒
七、运行结果总结
--- | --- | --- |
登录表单 | 7 步 | ✅ 全部通过 |
注册表单 | 8 步 | ✅ 全部通过 |
交互元素 | 7 步 | ✅ 全部通过 |
工具断言 | 8 步 | ✅ 全部通过 |
**总计** | **30 步** | **✅ 0 失败** |
全部 30 步通过,覆盖了表单操作、交互元素、变量断言、工具方法等核心实战技能。