diff --git a/package.json b/package.json index 258c979a31ddb..0081eaa791f20 100644 --- a/package.json +++ b/package.json @@ -153,6 +153,7 @@ "auto-release-sinon": "1.0.3", "babel-eslint": "4.1.8", "chokidar": "1.4.3", + "chromedriver": "2.21.2", "elasticdump": "2.1.1", "eslint": "1.10.3", "eslint-plugin-mocha": "1.1.0", @@ -173,7 +174,7 @@ "html-entities": "1.1.3", "husky": "0.8.1", "image-diff": "1.6.0", - "intern": "3.0.1", + "intern": "3.1.1", "istanbul-instrumenter-loader": "0.1.3", "karma": "0.13.9", "karma-chrome-launcher": "0.2.0", diff --git a/tasks/config/downloadSelenium.js b/tasks/config/downloadSelenium.js deleted file mode 100644 index 6a5f593685ec4..0000000000000 --- a/tasks/config/downloadSelenium.js +++ /dev/null @@ -1,20 +0,0 @@ -var path = require('path'); -import { resolve as resolveUrl } from 'url'; - -const URL = 'https://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jar'; -// must match selenium-version in test/intern.js -const DIR = resolveUrl(URL, './'); -const FILE = URL.replace(DIR, ''); - -module.exports = function (grunt) { - return { - options: { - selenium: { - filename: FILE, - server: DIR, - md5: '774efe2d84987fb679f2dea038c2fa32', - path: path.join(grunt.config.get('root'), 'selenium', FILE) - } - } - }; -}; diff --git a/tasks/config/intern.js b/tasks/config/intern.js index cfe96661c18e3..3a56007072dfc 100644 --- a/tasks/config/intern.js +++ b/tasks/config/intern.js @@ -6,6 +6,7 @@ module.exports = function (grunt) { options: { runType: 'runner', config: 'test/intern', + bail: true, reporters: ['Console'] }, dev: {}, diff --git a/tasks/config/run.js b/tasks/config/run.js index c2df1422f3b8a..ed5eb9c16a1a2 100644 --- a/tasks/config/run.js +++ b/tasks/config/run.js @@ -6,6 +6,7 @@ module.exports = function (grunt) { let binScript = /^win/.test(platform) ? '.\\bin\\kibana.bat' : './bin/kibana'; let buildScript = /^win/.test(platform) ? '.\\build\\kibana\\bin\\kibana.bat' : './build/kibana/bin/kibana'; let uiConfig = require(root('test/server_config')); + let chromedriver = require('chromedriver'); const stdDevArgs = [ '--env.name=development', @@ -113,35 +114,31 @@ module.exports = function (grunt) { ] }, - seleniumServer: { + chromeDriver: { options: { wait: false, - ready: /Selenium Server is up and running/, - quiet: true, + ready: /Starting ChromeDriver/, + quiet: false, failOnError: false }, - cmd: 'java', + cmd: chromedriver.path, args: [ - '-jar', - '<%= downloadSelenium.options.selenium.path %>', - '-port', - uiConfig.servers.webdriver.port, + `--port=${uiConfig.servers.webdriver.port}`, + '--url-base=wd/hub', ] }, - devSeleniumServer: { + devChromeDriver: { options: { wait: false, - ready: /Selenium Server is up and running/, + ready: /Starting ChromeDriver/, quiet: false, failOnError: false }, - cmd: 'java', + cmd: chromedriver.path, args: [ - '-jar', - '<%= downloadSelenium.options.selenium.path %>', - '-port', - uiConfig.servers.webdriver.port, + `--port=${uiConfig.servers.webdriver.port}`, + '--url-base=wd/hub', ] }, diff --git a/tasks/download_selenium.js b/tasks/download_selenium.js deleted file mode 100644 index cdce3e0ade211..0000000000000 --- a/tasks/download_selenium.js +++ /dev/null @@ -1,61 +0,0 @@ -var _ = require('lodash'); -var request = require('request'); -var fs = require('fs'); -var path = require('path'); -var colors = require('ansicolors'); -var crypto = require('crypto'); -var {spawn} = require('child_process'); - -module.exports = function (grunt) { - grunt.registerTask('downloadSelenium', 'Download selenium standalone', function (keepalive) { - const done = this.async(); - const config = this.options(); - - const FILE = config.selenium.path; - const DIR = path.dirname(config.selenium.path); - const URL = config.selenium.server + config.selenium.filename; - - function validateDownload(path, expectedHash, success) { - grunt.log.write('Validating hash...'); - fs.readFile(path, function checkHash(err, data) { - if (err) grunt.fail.warn(err); - - const calculatedHash = crypto.createHash('md5').update(data).digest('hex'); - if (calculatedHash !== expectedHash) return grunt.fail.warn('Selenium download has an invalid hash'); - - grunt.log.writeln('done'); - success(); - }); - } - - function downloadSelenium(success) { - grunt.log.write(`Downloading ${URL}...`); - request.get(URL) - .pipe(fs.createWriteStream(FILE)) - .on('error', function downloadError(err) { - grunt.fail.warn(err); - }) - .on('finish', function downloadFinish() { - grunt.log.writeln('done'); - validateDownload(FILE, config.selenium.md5, success); - }); - } - - function start() { - try { - fs.mkdirSync(DIR); - } catch (err) { - if (err && err.code !== 'EEXIST') grunt.fail.warn(err); - } - - if (fs.existsSync(FILE)) { - validateDownload(FILE, config.selenium.md5, done); - } else { - downloadSelenium(done); - } - } - - start(); - - }); -}; diff --git a/tasks/test.js b/tasks/test.js index 7fab931c0d508..13ef2208a4a52 100644 --- a/tasks/test.js +++ b/tasks/test.js @@ -19,19 +19,17 @@ module.exports = function (grunt) { grunt.registerTask('test:ui', [ 'esvm:ui', 'run:testUIServer', - 'downloadSelenium', - 'run:seleniumServer', + 'run:chromeDriver', 'intern:dev', 'esvm_shutdown:ui', - 'stop:seleniumServer', + 'stop:chromeDriver', 'stop:testUIServer' ]); grunt.registerTask('test:ui:server', [ 'esvm:ui', 'run:testUIServer', - 'downloadSelenium', - 'run:devSeleniumServer:keepalive' + 'run:devChromeDriver:keepalive' ]); grunt.registerTask('test:ui:runner', [ diff --git a/test/functional/apps/dashboard/_dashboard.js b/test/functional/apps/dashboard/_dashboard.js index 7c045ac614a26..d81682b6b2eb2 100644 --- a/test/functional/apps/dashboard/_dashboard.js +++ b/test/functional/apps/dashboard/_dashboard.js @@ -65,8 +65,8 @@ bdd.describe('dashboard tab', function describeIndexTests() { // .then(function () { common.debug('Set absolute time range from \"' + fromTime + '\" to \"' + toTime + '\"'); return headerPage.setAbsoluteRange(fromTime, toTime) - .then(function sleep() { - return common.sleep(4000); + .then(function () { + return headerPage.getSpinnerDone(); }) .then(function takeScreenshot() { common.debug('Take screenshot'); diff --git a/test/functional/apps/discover/_discover.js b/test/functional/apps/discover/_discover.js index abb8f8e5bd9cb..ceda45056a25c 100644 --- a/test/functional/apps/discover/_discover.js +++ b/test/functional/apps/discover/_discover.js @@ -33,6 +33,9 @@ bdd.describe('discover app', function describeIndexTests() { .then(function () { common.debug('setAbsoluteRange'); return headerPage.setAbsoluteRange(fromTime, toTime); + }) + .then(function () { + return headerPage.getSpinnerDone(); }); }); @@ -74,13 +77,18 @@ bdd.describe('discover app', function describeIndexTests() { bdd.it('load query should show query name', function () { return discoverPage.loadSavedSearch(queryName1) .then(function () { - return common.sleep(3000); + return headerPage.getSpinnerDone(); }) .then(function () { - return discoverPage.getCurrentQueryName(); + return common.try(function () { + return discoverPage.getCurrentQueryName() + .then(function (actualQueryNameString) { + expect(actualQueryNameString).to.be(queryName1); + }); + }); }) - .then(function (actualQueryNameString) { - expect(actualQueryNameString).to.be(queryName1); + .then(function () { + return headerPage.getSpinnerDone(); }); }); @@ -101,7 +109,7 @@ bdd.describe('discover app', function describeIndexTests() { '61.862', '15.487', '2.362', '2.800', '15.312', '61.862', '123.2', '118.562', '63.524', '17.587', '2.537' ]; - return common.sleep(4000) + return headerPage.getSpinnerDone() .then(function () { return verifyChartData(expectedBarChartData); }); @@ -140,7 +148,7 @@ bdd.describe('discover app', function describeIndexTests() { ]; return discoverPage.setChartInterval(chartInterval) .then(function () { - return common.sleep(4000); + return headerPage.getSpinnerDone(); }) .then(function () { return verifyChartData(expectedBarChartData); @@ -154,7 +162,7 @@ bdd.describe('discover app', function describeIndexTests() { ]; return discoverPage.setChartInterval(chartInterval) .then(function () { - return common.sleep(4000); + return headerPage.getSpinnerDone(); }) .then(function () { return verifyChartData(expectedBarChartData); @@ -166,7 +174,7 @@ bdd.describe('discover app', function describeIndexTests() { var expectedBarChartData = [ '66.598', '129.458']; return discoverPage.setChartInterval(chartInterval) .then(function () { - return common.sleep(2000); + return headerPage.getSpinnerDone(); }) .then(function () { return verifyChartData(expectedBarChartData); @@ -179,6 +187,9 @@ bdd.describe('discover app', function describeIndexTests() { '133.196', '129.192', '129.724' ]; return this.remote.goBack() + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function () { return common.try(function tryingForTime() { return discoverPage.getChartInterval() @@ -197,7 +208,7 @@ bdd.describe('discover app', function describeIndexTests() { var expectedBarChartData = [ '122.535']; return discoverPage.setChartInterval(chartInterval) .then(function () { - return common.sleep(2000); + return headerPage.getSpinnerDone(); }) .then(function () { return verifyChartData(expectedBarChartData); @@ -209,7 +220,7 @@ bdd.describe('discover app', function describeIndexTests() { var expectedBarChartData = [ '122.535']; return discoverPage.setChartInterval(chartInterval) .then(function () { - return common.sleep(2000); + return headerPage.getSpinnerDone(); }) .then(function () { return verifyChartData(expectedBarChartData); @@ -226,7 +237,7 @@ bdd.describe('discover app', function describeIndexTests() { ]; return discoverPage.setChartInterval(chartInterval) .then(function () { - return common.sleep(4000); + return headerPage.getSpinnerDone(); }) .then(function () { return verifyChartData(expectedBarChartData); @@ -249,26 +260,29 @@ bdd.describe('discover app', function describeIndexTests() { function verifyChartData(expectedBarChartData) { return common.try(function tryingForTime() { - return discoverPage.getBarChartData() - .then(function compareData(paths) { - // the largest bars are over 100 pixels high so this is less than 1% tolerance - var barHeightTolerance = 1; - var stringResults = ''; - var hasFailure = false; - for (var y = 0; y < expectedBarChartData.length; y++) { - stringResults += y + ': expected = ' + expectedBarChartData[y] + ', actual = ' + paths[y] + - ', Pass = ' + (Math.abs(expectedBarChartData[y] - paths[y]) < barHeightTolerance) + '\n'; - if ((Math.abs(expectedBarChartData[y] - paths[y]) > barHeightTolerance)) { - hasFailure = true; + return headerPage.getSpinnerDone() + .then(function () { + return discoverPage.getBarChartData() + .then(function compareData(paths) { + // the largest bars are over 100 pixels high so this is less than 1% tolerance + var barHeightTolerance = 1; + var stringResults = ''; + var hasFailure = false; + for (var y = 0; y < expectedBarChartData.length; y++) { + stringResults += y + ': expected = ' + expectedBarChartData[y] + ', actual = ' + paths[y] + + ', Pass = ' + (Math.abs(expectedBarChartData[y] - paths[y]) < barHeightTolerance) + '\n'; + if ((Math.abs(expectedBarChartData[y] - paths[y]) > barHeightTolerance)) { + hasFailure = true; + }; }; - }; - if (hasFailure) { - common.log(stringResults); - common.log(paths); - } - for (var x = 0; x < expectedBarChartData.length; x++) { - expect(Math.abs(expectedBarChartData[x] - paths[x]) < barHeightTolerance).to.be.ok(); - } + if (hasFailure) { + common.log(stringResults); + common.log(paths); + } + for (var x = 0; x < expectedBarChartData.length; x++) { + expect(Math.abs(expectedBarChartData[x] - paths[x]) < barHeightTolerance).to.be.ok(); + } + }); }); }); diff --git a/test/functional/apps/discover/_field_data.js b/test/functional/apps/discover/_field_data.js index eac33162b91bf..6434193947cdf 100644 --- a/test/functional/apps/discover/_field_data.js +++ b/test/functional/apps/discover/_field_data.js @@ -45,6 +45,9 @@ bdd.describe('discover app', function describeIndexTests() { bdd.it('search php should show the correct hit count', function () { var expectedHitCount = '445'; return discoverPage.query('php') + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function () { return common.try(function tryingForTime() { return discoverPage.getHitCount() @@ -68,6 +71,9 @@ bdd.describe('discover app', function describeIndexTests() { bdd.it('search _type:apache should show the correct hit count', function () { var expectedHitCount = '11,156'; return discoverPage.query('_type:apache') + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function () { return common.try(function tryingForTime() { return discoverPage.getHitCount() @@ -213,10 +219,7 @@ bdd.describe('discover app', function describeIndexTests() { + ' 14:26:41.000'; return discoverPage.clickDocSortDown() .then(function () { - // we don't technically need this sleep here because the tryForTime will retry and the - // results will match on the 2nd or 3rd attempt, but that debug output is huge in this - // case and it can be avoided with just a few seconds sleep. - return common.sleep(2000); + return headerPage.getSpinnerDone(); }) .then(function () { return common.try(function tryingForTime() { diff --git a/test/functional/apps/discover/_shared_links.js b/test/functional/apps/discover/_shared_links.js index dbbe940b115fc..1c3862ed5e43a 100644 --- a/test/functional/apps/discover/_shared_links.js +++ b/test/functional/apps/discover/_shared_links.js @@ -44,9 +44,7 @@ bdd.describe('shared links', function describeIndexTests() { return headerPage.setAbsoluteRange(fromTime, toTime); }) .then(function () { - //After hiding the time picker, we need to wait for - //the refresh button to hide before clicking the share button - return common.sleep(1000); + return headerPage.getSpinnerDone(); }); }); diff --git a/test/functional/apps/settings/_index_pattern_popularity.js b/test/functional/apps/settings/_index_pattern_popularity.js index f7bb041db67f3..d34da1a8b25cf 100644 --- a/test/functional/apps/settings/_index_pattern_popularity.js +++ b/test/functional/apps/settings/_index_pattern_popularity.js @@ -3,6 +3,7 @@ import { common, scenarioManager, settingsPage, + headerPage, esClient } from '../../../support'; @@ -33,7 +34,7 @@ bdd.describe('index result popularity', function describeIndexTests() { function fix5030() { return settingsPage.setPageSize('All') .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }); } @@ -41,7 +42,7 @@ bdd.describe('index result popularity', function describeIndexTests() { // increase Popularity of geo.coordinates return settingsPage.setPageSize('All') .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function openControlsByName() { common.debug('Starting openControlsByName (' + fieldName + ')'); diff --git a/test/functional/apps/settings/_index_pattern_results_sort.js b/test/functional/apps/settings/_index_pattern_results_sort.js index 5f2fc88a52ac7..5f8ca3851cc5b 100644 --- a/test/functional/apps/settings/_index_pattern_results_sort.js +++ b/test/functional/apps/settings/_index_pattern_results_sort.js @@ -3,6 +3,7 @@ import { common, defaultTimeout, settingsPage, + headerPage, scenarioManager, esClient } from '../../../support'; @@ -109,7 +110,7 @@ bdd.describe('index result field sort', function describeIndexTests() { return chain.then(function () { return settingsPage.goToPage(val) .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function () { return settingsPage.getPageFieldCount(); diff --git a/test/functional/apps/visualize/_area_chart.js b/test/functional/apps/visualize/_area_chart.js index b95c5275b85b6..1f2f20f86b79e 100644 --- a/test/functional/apps/visualize/_area_chart.js +++ b/test/functional/apps/visualize/_area_chart.js @@ -79,11 +79,8 @@ bdd.describe('visualize app', function describeIndexTests() { .then(function () { return visualizePage.waitForVisualization(); }) - // We have to sleep sometime between loading the saved visTitle - // and trying to access the chart below with getXAxisLabels - // otherwise it hangs. - .then(function sleep() { - return common.sleep(2000); + .then(function () { + return headerPage.getSpinnerDone(); }); }); @@ -158,6 +155,9 @@ bdd.describe('visualize app', function describeIndexTests() { .then(function setPageSize() { return settingsPage.setPageSize('All'); }) + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function getDataTableData() { return visualizePage.getDataTableData(); }) diff --git a/test/functional/apps/visualize/_line_chart.js b/test/functional/apps/visualize/_line_chart.js index 0382f070bf4ac..876ea645f3fc0 100644 --- a/test/functional/apps/visualize/_line_chart.js +++ b/test/functional/apps/visualize/_line_chart.js @@ -73,6 +73,9 @@ bdd.describe('visualize app', function describeIndexTests() { }) .then(function waitForVisualization() { return visualizePage.waitForVisualization(); + }) + .then(function waitForVisualization() { + return headerPage.getSpinnerDone(); }); }); @@ -85,8 +88,7 @@ bdd.describe('visualize app', function describeIndexTests() { // it could also check the legend to verify the extensions var expectedChartData = ['jpg 9,109', 'css 2,159', 'png 1,373', 'gif 918', 'php 445']; - // sleep a bit before trying to get the chart data - return common.sleep(3000) + return headerPage.getSpinnerDone() .then(function () { return visualizePage.getLineChartData('fill="#57c17b"') .then(function showData(data) { diff --git a/test/functional/apps/visualize/_pie_chart.js b/test/functional/apps/visualize/_pie_chart.js index 424f855698a32..1a043205f47ad 100644 --- a/test/functional/apps/visualize/_pie_chart.js +++ b/test/functional/apps/visualize/_pie_chart.js @@ -42,8 +42,8 @@ bdd.describe('visualize app', function describeIndexTests() { .then(function () { return headerPage.getSpinnerDone(); }) - .then(function sleep() { - return common.sleep(1003); + .then(function () { + return headerPage.getSpinnerDone(); }) .then(function () { common.debug('setNumericInterval 4000'); @@ -82,9 +82,8 @@ bdd.describe('visualize app', function describeIndexTests() { .then(function waitForVisualization() { return visualizePage.waitForVisualization(); }) - // sleep a bit before trying to get the pie chart data below - .then(function sleep() { - return common.sleep(2000); + .then(function () { + return headerPage.getSpinnerDone(); }); }); @@ -92,11 +91,13 @@ bdd.describe('visualize app', function describeIndexTests() { var remote = this.remote; var expectedPieChartSliceCount = 10; - return visualizePage.getPieChartData() - .then(function (pieData) { - var barHeightTolerance = 1; - common.debug('pieData.length = ' + pieData.length); - expect(pieData.length).to.be(expectedPieChartSliceCount); + return common.try(function () { + return visualizePage.getPieChartData() + .then(function (pieData) { + var barHeightTolerance = 1; + common.debug('pieData.length = ' + pieData.length); + expect(pieData.length).to.be(expectedPieChartSliceCount); + }); }) .then(function takeScreenshot() { common.debug('Take screenshot'); diff --git a/test/functional/apps/visualize/_tile_map.js b/test/functional/apps/visualize/_tile_map.js index 3693fbc888367..6a6fa11991b87 100644 --- a/test/functional/apps/visualize/_tile_map.js +++ b/test/functional/apps/visualize/_tile_map.js @@ -73,9 +73,8 @@ bdd.describe('visualize app', function describeIndexTests() { .then(function waitForVisualization() { return visualizePage.waitForVisualization(); }) - // sleep a bit before taking the screenshot or it won't show data - .then(function sleep() { - return common.sleep(4000); + .then(function () { + return headerPage.getSpinnerDone(); }) .then(function takeScreenshot() { common.debug('Take screenshot'); diff --git a/test/functional/apps/visualize/_vertical_bar_chart.js b/test/functional/apps/visualize/_vertical_bar_chart.js index ec399a32879b5..47dd0778c01d1 100644 --- a/test/functional/apps/visualize/_vertical_bar_chart.js +++ b/test/functional/apps/visualize/_vertical_bar_chart.js @@ -84,7 +84,10 @@ bdd.describe('visualize app', function describeIndexTests() { // Most recent failure on Jenkins usually indicates the bar chart is still being drawn? // return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function // try sleeping a bit before getting that data - return common.sleep(5000) + return common.sleep(1000) + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function () { return visualizePage.getBarChartData(); }) diff --git a/test/intern.js b/test/intern.js index 661b74037e15b..29599e6997913 100644 --- a/test/intern.js +++ b/test/intern.js @@ -10,7 +10,7 @@ define(function (require) { 'idle-timeout': 99 }, environments: [{ - browserName: 'firefox' + browserName: 'chrome' }], tunnelOptions: serverConfig.servers.webdriver, functionalSuites: [ diff --git a/test/support/pages/dashboard_page.js b/test/support/pages/dashboard_page.js index 88b8cb8f9a127..8ae46a5454166 100644 --- a/test/support/pages/dashboard_page.js +++ b/test/support/pages/dashboard_page.js @@ -1,4 +1,4 @@ -import { remote, common, defaultFindTimeout } from '../'; +import { remote, common, defaultFindTimeout, headerPage } from '../'; export default (function () { var thisTime; @@ -54,7 +54,7 @@ export default (function () { // 'stale element reference: element is not attached to the page document' // on the next step .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function () { // but wrap in a try loop since it can still happen @@ -75,7 +75,7 @@ export default (function () { .findByCssSelector('button.ng-scope[aria-label="Save Dashboard"]') .click() .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function () { common.debug('saveButton button clicked'); @@ -85,9 +85,11 @@ export default (function () { }) // click save button .then(function () { - return thisTime - .findByCssSelector('.btn-primary') - .click(); + return common.try(function () { + return thisTime + .findByCssSelector('.btn-primary') + .click(); + }); }) // verify that green message at the top of the page. // it's only there for about 5 seconds @@ -119,7 +121,7 @@ export default (function () { .type(dashName.replace('-',' ')); }) .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function clickDashboardByLinkedText() { return self diff --git a/test/support/pages/settings_page.js b/test/support/pages/settings_page.js index 5ac4b080d0e3e..06b5f361466b2 100644 --- a/test/support/pages/settings_page.js +++ b/test/support/pages/settings_page.js @@ -1,5 +1,5 @@ import Bluebird from 'bluebird'; -import { common, remote, defaultFindTimeout } from '../'; +import { common, remote, defaultFindTimeout, headerPage } from '../'; export default (function () { function SettingsPage() { @@ -31,7 +31,7 @@ export default (function () { return common.findTestSubject('advancedSetting&' + propertyName + ' editButton') .click() .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function setAdvancedSettingsClickPropertyValue(selectList) { return self.remote.setFindTimeout(defaultFindTimeout) @@ -88,9 +88,15 @@ export default (function () { // close dropdown, keep focus return self.getTimeFieldNameField().click(); }) + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function () { return common.try(function () { return self.getTimeFieldOption(selection).click() + .then(function () { + return headerPage.getSpinnerDone(); + }) .then(function () { return self.getTimeFieldOption(selection).isSelected(); }) @@ -245,6 +251,9 @@ export default (function () { .findByCssSelector('button.btn.btn-default[aria-label="Plus"]') .then(function (button) { return button.click(); + }) + .then(function () { + return headerPage.getSpinnerDone(); }); }, @@ -269,6 +278,9 @@ export default (function () { .findByCssSelector('button.btn.btn-success.ng-binding[aria-label="Update Field"]') .then(function (button) { return button.click(); + }) + .then(function () { + return headerPage.getSpinnerDone(); }); }, @@ -287,6 +299,9 @@ export default (function () { return self.selectTimeFieldOption('@timestamp') .then(function () { return self.getCreateButton().click(); + }) + .then(function () { + return headerPage.getSpinnerDone(); }); }) .then(function () { diff --git a/test/support/pages/visualize_page.js b/test/support/pages/visualize_page.js index 4e47f2d79497e..4fe0adefa65d0 100644 --- a/test/support/pages/visualize_page.js +++ b/test/support/pages/visualize_page.js @@ -1,4 +1,4 @@ -import { common, defaultFindTimeout, remote } from '../'; +import { common, defaultFindTimeout, headerPage, remote } from '../'; export default (function () { function VisualizePage() { @@ -296,7 +296,7 @@ export default (function () { .findByCssSelector('button[aria-label="Save Visualization"]') .click() .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function () { common.debug('saveButton button clicked'); @@ -370,7 +370,7 @@ export default (function () { var self = this; return self.filterVisByName(vizName) .then(function () { - return common.sleep(1000); + return headerPage.getSpinnerDone(); }) .then(function clickDashboardByLinkedText() { return self.clickVisualizationByLinkText(vizName);