在远程网格上运行时增加超时

时间:2017-01-23 12:24:53

标签: serenity-js

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

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

如何增加超时值?

谢谢&再见 斯蒂芬

1 个答案:

答案 0 :(得分: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.js将default value of the cucumber step timeout设置为 5s ),您可以通过更改步骤定义(以毫秒为单位):

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

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

如果这描述了您的方案,您可能需要ignoreSynchronization

exports.config = {

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

    // ... rest of the config file
}

要了解详情,请查看Protractor documentation和已提及的Cucumber docs。我还会在serenity-js.org上添加一篇文章来描述不同的选项,所以一切都在一个地方: - )

希望这有帮助!