0

在本地运行测试时它成功,但在配置远程网格时,它失败了

1) Scenario: Login - features/api.feature:10
   Step: When he enters his credentials - features/api.feature:13
   Step Definition: node_modules/serenity-js/src/serenity-cucumber/webdriver_synchroniser.ts:46
   Message:
     function timed out after 5000 milliseconds

如何增加超时值?

谢谢 & Ciao Stefan

4

1 回答 1

1

嗨 Stefan,感谢您尝试 Serenity/JS!

这里有几个选项,具体取决于什么是超时。

由于负责超时的是量角器,因此您需要查看您的protractor.conf.js文件。

假设您的protractor.conf.js文件看起来或多或少类似于下面的代码段。为了简洁起见,我省略了 Serenity/JS 和 Cucumber.js 配置,因为它们在serenity-js.org中有描述:

exports.config = {

    baseUrl: 'http://your.webapp.com',

    // Serenity/JS config
    framework: ...

    specs: [ 'features/**/*.feature' ],

    cucumberOpts: {
      // ...
    },

};

0.增加整体超时

首先,您可能希望增加所有测试的总体超时时间(对于 Protractor 5.0.0,默认值设置为11s)。

为此,请将allScriptsTimeout条目添加到您的配置中:

exports.config = {

    allScriptsTimeout: <appropriate_timeout_in_millis>

    // ... rest of the config file
}

1.加载页面

如果被测 webapp 加载缓慢,您可以调整getPageTimeout属性(默认设置为10s):

exports.config = {

    getPageTimeout: <appropriate_timeout_in_millis>

    // ... rest of the config file
}

2.特定的Cucumber步骤

如果特定的 Cucumber 步骤超时(这很可能是这里的情况,因为 Cucumber.js 将黄瓜步骤超时的默认值设置为5s),您可以通过更改步骤定义(以毫秒为单位的值)来增加超时:

this.Given(/^When he enters his credentials$/, { timeout: 10 * 1000 }, () => {
    return stage.theActorInTheSpotlight().attemptsTo(
        Login.withTheirCredentials()
    );
});

请注意,在上面的答案中,我假设您使用 Serenity/JS 和 Cucumber 来测试 Angular 应用程序。如果您使用的是不同的 Web 框架(如 React),那么当 Protractor 等待 Angular 加载时,测试也可能会超时。

如果这描述了您的场景,您可能希望ignoreSynchronization

exports.config = {

    onPrepare: function() {
        browser.ignoreSynchronization = false;
    }

    // ... rest of the config file
}

要了解更多信息,请查看Protractor 文档和已经提到的Cucumber 文档。我还将在serenity-js.org上添加一篇文章来描述不同的选项,以便一切都在一个地方:-)

希望这可以帮助!

于 2017-01-28T01:28:27.970 回答