首页 > 解决方案 > 量角器:如果一个场景失败,如何解决承诺并停止跳过场景

问题描述

我有一个 Protarctor-CucumberJS 框架和一套测试场景。当我执行整个套件时,一个脚本在期望(ChaiJS)语句处失败。

Scenario 1  : Passed
Scenario 2  : Passed
Scenario 3  : Failed (Unresolved Promise)
Scenario 4  : Skipped
Scenario 5  : Skipped
Scenario 6  : Skipped
Scenario 7  : Skipped
Scenario 8  : Skipped
Scenario 9  : Skipped
Scenario 10 : Skipped

该特定步骤的步骤定义如下所示:

Then('I verify if valid success message received as {string}', function (successMessage) {
    expect($(.abc).getText()).to.eventually.equal(successMessage);
});

由于存在缺陷,应用程序未显示错误,元素:$(".abc") 未显示在屏幕上,并且此场景在函数超时 30 秒后失败。完整的错误粘贴在下面。但问题是在此之后的所有其他情况都被相同的错误消息跳过。

错误:函数超时,确保承诺在 Timeout._time.default.setTimeout [as _onTimeout] (C:\bla\bla\node_modules\cucumber\lib\user_code_runner.js:81:20) 在 ontimeout ( timers.js:436:11) 在 tryOnTimeout (timers.js:300:5) 在 listOnTimeout (timers.js:263:5) 在 Timer.processTimers (timers.js:223:10)

问题:

  1. 如果一个场景失败,我如何避免跳过前面的场景?
  2. 如何在上述情况下解决承诺。

标签: javascriptprotractorcucumberjs

解决方案


你会使用async函数吗?如果是这样,您可以尝试使用元素是否存在的条件,如下所示:

    Then('I verify if valid success message received as {string}', async function (successMessage, done) {
        const abcElement = await $(.abc).isPresent();
        if (abcElement) {
            expect(await $(.abc).getText()).to.eventually.equal(successMessage);
            done();
        } else {
            done();
        }
    });

推荐阅读