提问人:Ben_R 提问时间:10/30/2023 最后编辑:Aladin SpazBen_R 更新时间:10/31/2023 访问量:36
Cypress Gherkin 不应在 afterEach-hook 中出现错误时停止套件执行
Cypress Gherkin should not stop suite execution on error in afterEach-hook
问:
上下文: 我有一个使用 cypress-cucumber-preprocessor 的 Cypress 项目。在功能文件中,我定义了多个方案。每个方案在受测页面上执行一个操作,并截取屏幕截图(有时是多个屏幕截图)。然后,我使用afterEach钩子将场景中拍摄的所有屏幕截图与各自的基础图像进行比较。
Feature: Example
Scenario 1
Given logged user
When goes to homepage
Then take a screenshot
# Now a hook compares the screenshot to the base
Scenario 2
Given logged user
When user makes a deposit
Then take a screenshot
# Now a hook compares the screenshot to the base
Scenario 3
... etc. ...
钩子在文件中实现,其中实现了不同视觉验证的所有后续步骤。
Example:
Then('Then take a screenshot', () => {...})
Then('Then take a screenshot of element xyz and blackout the background', () => {...})
// The hook is implemented in this same file
afterEach(() => {
cy.checkVisualResults();
});
预期行为: 如果上一个方案失败,我需要 Cypress 继续执行功能文件中的下一个方案。
观察到的行为:
如果在其中一个场景后将屏幕截图与其基本图像进行比较失败,则 Cypress 将停止执行“套件”(表示功能文件)。错误是这样的:在每个之后。Because this error occurred during a
hook we are skipping the remaining tests in the current suite
也许我需要把钩子放在另一个地方。据我观察,它是在每个场景之后执行的,而不是在拍摄每个屏幕截图之后执行的。我还有其他功能文件,它们不使用场景,只是截取多个屏幕截图。在我添加钩子之前,Cypress 会直接将当前映像与基础映像进行比较,并停止运行这些功能文件中的其余步骤。钩子就位并且捕获和比较分开后,我看到对于这些类型的功能文件,它可以工作。我现在需要的是调整它以使其适用于使用方案的功能文件。
答:
你能再迈出一步而不是使用钩子吗?afterEach()
Feature: Example
Scenario 1
Given logged user
When goes to homepage
Then take a screenshot
Then compare the screenshot to the base
步
Then('Then compare the screenshot to the base', () => {
cy.checkVisualResults()
})
或合并到屏幕截图步骤中
Then('Then take a screenshot', () => {
cy.screenshot()
cy.checkVisualResults()
})
这两种方法都应将失败与特定的失败测试隔离开来。
替换黄瓜 After()
After() 钩子在失败时表现不同 - 文档在这里
方案挂钩
Before() 和 After() 类似于 Cypress 的 beforeEach() 和 afterEach(),但可以根据每个场景的标签选择它们有条件地运行,如下所示。
此外,这些钩子中的失败不会导致跳过剩余的测试。这与 Cypress 的 beforeEach 和 afterEach 相反。
评论
afterEach()
afterEach()
After()
评论