From 677a6c1d3f849ade58ec9aceb304e4219d0cf59b Mon Sep 17 00:00:00 2001 From: LeeDr Date: Fri, 17 Jun 2016 17:32:15 -0500 Subject: [PATCH] Switch from Firefox to Chrome --- CONTRIBUTING.md | 14 +---- package.json | 4 +- tasks/config/run.js | 27 ++++----- tasks/downloadSelenium.js | 60 ------------------- tasks/test.js | 7 +-- .../functional/apps/discover/_shared_links.js | 8 +-- test/intern.js | 2 +- test/support/pages/common.js | 7 +-- 8 files changed, 27 insertions(+), 102 deletions(-) delete mode 100644 tasks/downloadSelenium.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 02cd6298cbafc..7288710afc8c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -111,26 +111,18 @@ The standard `npm run test` task runs several sub tasks and can take several min #### Running tests using npm task: -*The Selenium server that is started currently only runs the tests in Firefox* +*The ChromeDriver that is started currently only runs the tests in Chrome browser* -To runt the functional UI tests, execute the following command: +To run the functional UI tests, execute the following command: `npm run test:ui` The task above takes a little time to start the servers. You can also start the servers and leave them running, and then run the tests separately: -`npm run test:ui:server` will start the server required to run the selenium tests, leave this open +`npm run test:ui:server` will start the server required to run the UI tests, leave this open `npm run test:ui:runner` will run the frontend tests and close when complete -#### Running tests locally with your existing (and already running) ElasticSearch, Kibana, and Selenium Server: - -Set your es and kibana ports in `test/intern.js` to 9220 and 5620, respectively. You can configure your Selenium server to run the tests on Chrome,IE, or other browsers here. - -Once you've got the services running, execute the following: - -`npm run test:ui:runner` - #### General notes: - Using Page Objects pattern (https://theintern.github.io/intern/#writing-functional-test) diff --git a/package.json b/package.json index 818c5b054536e..bf45e2b87e442 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "Court Ewing ", "Joe Fleming ", "Khalah Jones-Golden ", + "Lee Drengenberg ", "Lukas Olson ", "Juan Thomassie ", "Shelby Sturgis ", @@ -142,6 +143,7 @@ "auto-release-sinon": "1.0.3", "babel-eslint": "4.1.7", "chokidar": "1.0.5", + "chromedriver": "2.21.2", "eslint": "1.5.1", "eslint-plugin-mocha": "1.0.0", "expect.js": "0.3.1", @@ -160,7 +162,7 @@ "gruntify-eslint": "1.0.1", "html-entities": "1.1.3", "husky": "0.8.1", - "intern": "3.0.1", + "intern": "3.2.3", "istanbul-instrumenter-loader": "0.1.3", "karma": "0.13.9", "karma-chrome-launcher": "0.2.0", diff --git a/tasks/config/run.js b/tasks/config/run.js index 0739bdc44128d..08bd12a356303 100644 --- a/tasks/config/run.js +++ b/tasks/config/run.js @@ -5,6 +5,7 @@ module.exports = function (grunt) { let root = p => resolve(__dirname, '../../', p); let binScript = /^win/.test(platform) ? '.\\bin\\kibana.bat' : './bin/kibana'; let uiConfig = require(root('test/serverConfig')); + let chromedriver = require('chromedriver'); return { testServer: { @@ -78,35 +79,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', - 'selenium/selenium-server-standalone-2.53.0.jar', - '-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', - 'selenium/selenium-server-standalone-2.53.0.jar', - '-port', - uiConfig.servers.webdriver.port + `--port=${uiConfig.servers.webdriver.port}`, + '--url-base=wd/hub' ] }, diff --git a/tasks/downloadSelenium.js b/tasks/downloadSelenium.js deleted file mode 100644 index 62840493ee2a8..0000000000000 --- a/tasks/downloadSelenium.js +++ /dev/null @@ -1,60 +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 SELENIUM_FILE_PATH = path.join(config.selenium.directory, config.selenium.filename); - const SELENIUM_DOWNLOAD_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 ${SELENIUM_DOWNLOAD_URL}...`); - request.get(SELENIUM_DOWNLOAD_URL) - .pipe(fs.createWriteStream(SELENIUM_FILE_PATH)) - .on('error', function downloadError(err) { - grunt.fail.warn(err); - }) - .on('finish', function downloadFinish() { - grunt.log.writeln('done'); - validateDownload(SELENIUM_FILE_PATH, config.selenium.md5, success); - }); - } - - function start() { - try { - fs.mkdirSync(config.selenium.directory); - } catch (err) { - if (err && err.code !== 'EEXIST') grunt.fail.warn(err); - } - - if (fs.existsSync(SELENIUM_FILE_PATH)) { - validateDownload(SELENIUM_FILE_PATH, config.selenium.md5, done); - } else { - downloadSelenium(done); - } - } - - start(); - - }); -}; diff --git a/tasks/test.js b/tasks/test.js index 8d3170d327b28..74d3296ee541b 100644 --- a/tasks/test.js +++ b/tasks/test.js @@ -18,9 +18,7 @@ module.exports = function (grunt) { grunt.registerTask('test:ui', [ 'esvm:ui', 'run:testUIServer', - 'downloadSelenium', - 'run:seleniumServer', - 'intern:dev', + 'run:chromeDriver', 'esvm_shutdown:ui', 'stop:seleniumServer', 'stop:testUIServer' @@ -29,8 +27,7 @@ module.exports = function (grunt) { 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/discover/_shared_links.js b/test/functional/apps/discover/_shared_links.js index f590cc2dd44c6..a61fd78fe7620 100644 --- a/test/functional/apps/discover/_shared_links.js +++ b/test/functional/apps/discover/_shared_links.js @@ -74,10 +74,10 @@ define(function (require) { var expectedUrl = baseUrl + '/app/kibana?_t=1453775307251#' + '/discover?_g=(refreshInterval:(display:Off,pause:!f,value:0),time' - + ':(from:%272015-09-19T06:31:44.000Z%27,mode:absolute,to:%272015-09' - + '-23T18:31:44.000Z%27))&_a=(columns:!(_source),index:%27logstash-' - + '*%27,interval:auto,query:(query_string:(analyze_wildcard:!t,query' - + ':%27*%27)),sort:!(%27@timestamp%27,desc))'; + + ':(from:\'2015-09-19T06:31:44.000Z\',mode:absolute,to:\'2015-09' + + '-23T18:31:44.000Z\'))&_a=(columns:!(_source),index:\'logstash-' + + '*\',interval:auto,query:(query_string:(analyze_wildcard:!t,query' + + ':\'*\')),sort:!(\'@timestamp\',desc))'; return discoverPage.getSharedUrl() .then(function (actualUrl) { // strip the timestamp out of each URL diff --git a/test/intern.js b/test/intern.js index dc256a83494db..74a9f50443e8f 100644 --- a/test/intern.js +++ b/test/intern.js @@ -9,7 +9,7 @@ define(function (require) { 'idle-timeout': 99 }, environments: [{ - browserName: 'firefox' + browserName: 'chrome' }], tunnelOptions: serverConfig.servers.webdriver, functionalSuites: [ diff --git a/test/support/pages/common.js b/test/support/pages/common.js index 60212a0c9982e..b3e065f973b90 100644 --- a/test/support/pages/common.js +++ b/test/support/pages/common.js @@ -57,11 +57,8 @@ define(function (require) { navigateToApp: function (appName, testStatusPage) { var self = this; - // navUrl includes user:password@ for use with Shield - // appUrl excludes user:password@ to match what getCurrentUrl returns - var navUrl = getUrl(config.servers.kibana, config.apps[appName]); var appUrl = getUrl.noAuth(config.servers.kibana, config.apps[appName]); - self.debug('navigating to ' + appName + ' url: ' + navUrl); + self.debug('navigating to ' + appName + ' url: ' + appUrl); var doNavigation = function (url) { return self.tryForTime(defaultTimeout, function () { @@ -106,7 +103,7 @@ define(function (require) { }); }; - return doNavigation(navUrl) + return doNavigation(appUrl) .then(function (currentUrl) { var lastUrl = currentUrl; return self.tryForTime(defaultTimeout, function () {