javascript - 测试具有多个连续页面的 webapp 时出错
问题描述
我正在测试一个 ASP.NET webapp(我无权访问的代码),它具有多个连续页面,在 Cypress 脚本中具有以下相关部分:
describe("Calculation", function() {
// ...
context("Pages", function() {
// ...
// Page 1
it("With all inputs", function() {
cy.visit(url)
// ... setting input fields ...
cy.get(next).click()
cy.get('.stg-error-mark').should('have.length', 0)
})
// Page 2
it("No selection", function() {
cy.get(next).click()
cy.get('.stg-error-mark').should('have.length', 2)
})
})
})
Page 2it(...)
的命令日志包含:
...
- CLICK
(FORM SUB) -- 提交表单-- ← 第 2 页在赛普拉斯的应用预览中看起来不错。
(PAGE LOAD) --page loaded-- ← webapp 在 App Preview 中显示以下错误。
...
错误
输入事务被自动取消,因为它没有持续太久。请重新开始。
如果Page 1
没有visit()
在. it(...)
_Page 2
我知道将所有相关的页面代码部分放入 ( describe
-global)中function
并越来越多地调用它们,并且总是从Page 1
每个测试开始。但是,由于这个应用程序有 33 个不同的功能路径和 5 到 6 个连续页面(取决于用户在前一页上的输入),我想避免这种代码膨胀、混乱、容易出错和耗时的函数链接——并且全球人是魔鬼。
更新
从理论到实践,这是功能路径图:
+------ Seite 1 -------+----- Seite 2 -----+------ Seite 3 ------+------ Seite 4 ------+- Seite 5.1 -+- Seite 5.2 -+
| Wohneinheiten | Fördermodell | 1. Wohneinheit | 2. Wohneinheit | Berechnung | Berechnung |
| 2/4 | 8/2 | 12/10 | 6/5 | Input | Output |
| | | | | | |
| Wohneinheiten: | ▼ Modell | Heizwärmebedarf: | | | |
| +- <no> --->(X) | +-▼ Passiv ------>-- HWB: ----------------------------------->-------------> |
| | | | | +- !]0..10] | | | |
| +- WE1: --->(X) | | | +--->(X) | | | |
| | | | | | | | |
| +- WE2: --->(X) | +-▼ Punkte ------>-- HWB: ----------------------------------->-------------> |
| | | | | +- !]10..49] | | | |
| +- WE1: | | | +--->(X) | | | |
| | +- AV-V: -------->--+ | | | | |
| | | | | +-▼ PV ---------------------------------->-------------> |
>--+ | | | +-▼ Solar ------------------------------->-------------> |
| | | +-▼ Niedrig ----->--+-x WRL --------------------------------->-------------> |
| | | | | +- <no> --->(X) | | | |
| +- WE2: | | | | | | |
| | +- AV-V: --->(X) | +-▼ Niedrigst --->--▼ Heizsystem ---------------------------->-------------> |
| | | | | +-▼ Elektrisch | | | |
| | | +-▼ <no> --->(X) | +-▼ PV2kWp | | | |
| | | | | +--->(X) | | | |
| | | | +-o WRL | | | |
| | | | +--->(X) | | | |
| +- WE1: | | | | | |
| +- WE2: | ▼ Modell | Heizwärmebedarf: | Heizwärmebedarf: | | |
| +- AV-V: ----->--+-▼ Passiv ------>-- HWB: ------------->-- HWB: ------------->-------------> |
| | | | +- !]0..10] | +- !]0..10] | | |
+----------------------+ | | +--->(X) | +--->(X) | | |
| | | | | | |
| +-▼ Punkte ------>-- HWB: ------------->-- HWB: ------------->-------------> |
| | | +- !]10..49] | +- !]10..49] | | |
| | | +--->(X) | +--->(X) | | |
| | | | | | |
| +-▼ Niedrig ----->--+-▼ PV ----------->--+-▼ PV ----------->-------------> |
| | | +-▼ Solar ---------> +-▼ Solar --------->-------------> |
| | | +-x WRL -----------> +-x WRL ----------->-------------> |
| | | +- <no> --->(X) | +- <no> --->(X) | | |
| | | | | | |
| +-▼ Niedrigst --->--▼ Heizsystem ------>--▼ Heizsystem ------>-------------> |
| | | +-▼ Elektrisch | +-▼ Elektrisch | | |
| +-▼ <no> --->(X) | +-▼ PV2kWp | +-▼ PV2kWp | | |
| | | +--->(X) | | +--->(X) | | |
| | +-x WRL | +-x WRL | | |
| | +--->(X) | +--->(X) | | |
+-------------------+---------------------+---------------------+-------------+-------------+
Legend:
: ...... Textbox
.. ..... Interval
▼ ...... Dropdown-Listbox or selection
x,o .... Checkbox (checked, unchecked)
<no> ... No input or selection
! ...... Not
(X) .... Error
> ...... Proceed to page or error
现在一切都清楚了,不是吗?(:好的,它在绿色中看起来不那么压倒性,在编辑器中看起来更高更宽。)
在输入 on的情况下,它的Seite 3
和Seite 4
在下部相同和重复WE2
Seite 1
解决方案
(我不是反对者)
我不确定您的问题到底是什么-您需要提供更多信息:
- 错误来自哪里以及触发它的原因是什么?
- 你确定你不拆除状态/cookies/等吗?测试用例之间?
无论哪种方式,通常您不应该在一个测试用例依赖于前一个测试用例的测试用例之间共享状态,并且测试用例必须按给定顺序运行。测试用例 ( it
) 应该相互独立并且自给自足。
不遵守此最佳实践会导致难以维护的复杂测试用例。您也无法切换it.only
以测试单个案例,依此类推。
当您不拥有整个代码库(在团队项目中)时,这一点尤其重要,因为有人可能会更改测试的运行方式(例如,清除测试之间的状态;随机化测试顺序...)。
推荐阅读
- css - 如何仅使用 CSS 将 content:"NEW" 添加到第 2 和第 3 段?
- perl - 在 Windows 10 上的 Active perl 中安装 Switch.pm
- java - 为什么会这样。
或这个。 在 Parent Class 有没有影响?爪哇 - php - laravel 中的多提供者关系用户表
- python-3.x - Python 3.X : rglob with FileNotFoundError: [WinError 3] 系统找不到指定的路径
- java - 我可以“保存”Graphics2D 绘制的图像,它不会受到随后使用 DstOut 复合材料的影响吗?
- java - 复选框未显示在 android 的弹出窗口中
- python - 使用 Anaconda 上的 Flask 在 IIS 上进行 Dash 加载时出现“加载资源失败”错误
- mysql - 如何从 bash 脚本正确查询 mysql 数据库?
- sql - 在字符串连接之间添加字符的函数