increase timeout when running against remote grid

ぐ巨炮叔叔 提交于 2020-01-07 06:47:12

问题


when running a test locally it succeeds, but when configuring a remote grid, it fails with

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

How can I increase the timeout value?

Thanks & Ciao Stefan


回答1:


Hi Stefan and thanks for giving Serenity/JS a try!

You have a couple of options here, depending on what is timing out.

As it's Protractor that's in charge of the timeouts, you'll need to look into your protractor.conf.js file.

Let's assume that your protractor.conf.js file looks more or less like the snippet below. I omit the Serenity/JS and Cucumber.js config for brevity as they're described at serenity-js.org:

exports.config = {

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

    // Serenity/JS config
    framework: ...

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

    cucumberOpts: {
      // ...
    },

};

0. Increasing the overall timeout

To start with, you might want to increase the overall timeout of all the tests (for Protractor 5.0.0 the default value is set to 11s).

To do this, add the allScriptsTimeout entry to your config:

exports.config = {

    allScriptsTimeout: <appropriate_timeout_in_millis>

    // ... rest of the config file
}

1. Loading the page

If the webapp under test is slow to load, you can tweak the getPageTimeout property (default set to 10s):

exports.config = {

    getPageTimeout: <appropriate_timeout_in_millis>

    // ... rest of the config file
}

2. A specific Cucumber step

If a specific Cucumber step is timing out (which is most likely the case here, as Cucumber.js sets the default value of the cucumber step timeout to 5s), you can increase the timeout by changing the step definition (value in millis):

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

Please note that in the above answer I'm assuming that you're using Serenity/JS with Cucumber to test an Angular app. If you're using a different web framework (like React), the test might also time out when Protractor is waiting for Angular to load.

If this describes your scenario, you might want to ignoreSynchronization:

exports.config = {

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

    // ... rest of the config file
}

To find out more, check out the Protractor documentation and the already mentioned Cucumber docs. I'll also add an article on serenity-js.org shortly to describe the different options so everything is in one place :-)

Hope this helps!

Jan



来源:https://stackoverflow.com/questions/41806327/increase-timeout-when-running-against-remote-grid

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!