diff --git a/test/helpers/selenium-helper.js b/test/helpers/selenium-helper.js index 99320f577..ddafe8704 100644 --- a/test/helpers/selenium-helper.js +++ b/test/helpers/selenium-helper.js @@ -8,6 +8,11 @@ const {By, until, Button} = webdriver; const USE_HEADLESS = process.env.USE_HEADLESS !== 'no'; +// The main reason for this timeout is so that we can control the timeout message and report details; +// if we hit the Jasmine default timeout then we get a terse message that we can't control. +// The Jasmine default timeout is 30 seconds so make sure this is lower. +const DEFAULT_TIMEOUT_MILLISECONDS = 20 * 1000; + class SeleniumHelper { constructor () { bindAll(this, [ @@ -26,8 +31,8 @@ class SeleniumHelper { ]); } - elementIsVisible (element) { - return this.driver.wait(until.elementIsVisible(element)); + elementIsVisible (element, timeoutMessage = 'elementIsVisible timed out') { + return this.driver.wait(until.elementIsVisible(element), DEFAULT_TIMEOUT_MILLISECONDS, timeoutMessage); } get scope () { @@ -79,8 +84,8 @@ class SeleniumHelper { return this.driver; } - findByXpath (xpath) { - return this.driver.wait(until.elementLocated(By.xpath(xpath), 5 * 1000)); + findByXpath (xpath, timeoutMessage = `findByXpath timed out for path: ${xpath}`) { + return this.driver.wait(until.elementLocated(By.xpath(xpath)), DEFAULT_TIMEOUT_MILLISECONDS, timeoutMessage); } findByText (text, scope) { @@ -120,8 +125,8 @@ class SeleniumHelper { return this.clickXpath(`//button//*[contains(text(), '${text}')]`); } - waitUntilGone (element) { - return this.driver.wait(until.stalenessOf(element)); + waitUntilGone (element, timeoutMessage = 'waitUntilGone timed out') { + return this.driver.wait(until.stalenessOf(element), DEFAULT_TIMEOUT_MILLISECONDS, timeoutMessage); } getLogs (whitelist) {