背景: 我有一个使用 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. ...
挂钩在文件中实现,其中实现了不同视觉验证的所有 then 步骤。
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 继续功能文件中的下一个场景。
观察到的行为: 如果在其中一种情况后屏幕截图与其基本图像的比较失败,赛普拉斯将停止“套件”(这意味着功能文件)的执行。错误是这样的:
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()
})
两种方法都应该将失败隔离到特定的失败测试。