diff --git a/scripts/e2e-ci.sh b/scripts/e2e-ci.sh index b86edb319..5e0bf00b3 100755 --- a/scripts/e2e-ci.sh +++ b/scripts/e2e-ci.sh @@ -6,6 +6,9 @@ CIRCLE_BRANCH=${CIRCLE_BRANCH:-master} # Amount of retries before failure. E2E_MAX_RETRIES=${E2E_MAX_RETRIES:-1} +# Timeout for WaitForConditions. +E2E_WAIT_FOR_TIMEOUT=${E2E_WAIT_FOR_TIMEOUT:-5000} + # Safari >= 8 has issues connecting to browserstack-local. Safari < 8 is too old. # IE 64bit has issues with receiving keyboard input. Let's wait for them to fix it. @@ -15,7 +18,7 @@ BROWSERS="chrome" if [[ "${CIRCLE_BRANCH}" == "master" && -n "$BROWSERSTACK_KEY" ]]; then echo Testing on browserstack - yarn e2e --reports-folder "$REPORTS_FOLDER" --bs-key "$BROWSERSTACK_KEY" --retries "$E2E_MAX_RETRIES" --browsers $BROWSERS + yarn e2e --reports-folder "$REPORTS_FOLDER" --bs-key "$BROWSERSTACK_KEY" --retries "$E2E_MAX_RETRIES" --timeout "$E2E_WAIT_FOR_TIMEOUT" --browsers $BROWSERS else # When browserstack is not available test locally using chrome headless. echo Testing locally diff --git a/scripts/e2e.js b/scripts/e2e.js index 97e321310..2f99bc5d9 100755 --- a/scripts/e2e.js +++ b/scripts/e2e.js @@ -59,7 +59,7 @@ function seleniumInstall() { }); } -function nightwatch(env, config, reportsFolder, browserstack) { +function nightwatch(env, config, reportsFolder, browserstack, timeout) { return new Promise((resolve, reject) => { try { const nw = childProcess.spawn( @@ -71,6 +71,7 @@ function nightwatch(env, config, reportsFolder, browserstack) { 'BROWSERSTACK_KEY': browserstack.key, 'BROWSERSTACK_USER': browserstack.user, 'REPORTS_FOLDER': `${reportsFolder}/${env}`, + 'WAIT_FOR_TIMEOUT': timeout, }), stdio: 'inherit', }); @@ -111,13 +112,13 @@ function printSection(txt) { console.log('*****************************'.magenta); } -async function runBrowserTests(browsers, config, retries = 1, reportsFolder, browserstack) { +async function runBrowserTests(browsers, config, retries = 1, reportsFolder, browserstack, timeout) { const succeeded = {}; for (let browser of browsers) { for (let t = 0; t < retries + 1; t++) { try { printSection(`e2e test for ${browser} #${t}`); - await nightwatch(browser, config, reportsFolder, browserstack); + await nightwatch(browser, config, reportsFolder, browserstack, timeout); succeeded[browser] = t; console.log(`\n==> Succeeded e2e for ${browser} #${t}\n`.green); break; @@ -143,6 +144,7 @@ async function start(program) { const date = new Date().toISOString() .replace(/[T.]/g, '-') .replace(/:/g, ''); + const timeout = program.timeout; const reportsFolder = `${program.reportsFolder}/${date}`; let exitCode = 0; let config = 'nightwatch.conf.js'; @@ -175,6 +177,7 @@ async function start(program) { retries, reportsFolder, browserstack, + timeout, ); if (!succeeded) { exitCode = 1; @@ -202,6 +205,7 @@ program .option('-r, --retries [number]', 'Number of retries before failing', '1') .option('--headless', 'Start in headless mode for local e2e') .option('--reports-folder [folder]', 'Reports folder', './test/e2e/reports') + .option('--timeout [number]', 'Timeout for WaitForConditions', '5000') .parse(process.argv); start(program); diff --git a/test/e2e/globals.js b/test/e2e/globals.js index 4d2740404..10549e2e7 100644 --- a/test/e2e/globals.js +++ b/test/e2e/globals.js @@ -11,7 +11,7 @@ module.exports = { shutdown(); done(); }, - waitForConditionTimeout: 5000, + waitForConditionTimeout: parseInt(process.env.WAIT_FOR_TIMEOUT) || 5000, testData: { admin: { email: 'admin@test.com',