Hashar has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/341528 )

Change subject: Draft to enhance webdriver.io integration
......................................................................

Draft to enhance webdriver.io integration

For Ibe7a004a120e82af637ab3e31b725de743134c99

Change-Id: I15bd422cf899aa48698e1614aec0fdb8927b6913
---
M Gruntfile.js
M package.json
A wdio.conf.default.js
M wdio.conf.jenkins.js
M wdio.conf.vagrant.js
5 files changed, 235 insertions(+), 198 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/28/341528/1

diff --git a/Gruntfile.js b/Gruntfile.js
index 495107b..38904be 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -3,6 +3,8 @@
 var WebdriverIOconfigFile;
 if ( process.env.JENKINS_HOME ) {
        WebdriverIOconfigFile = './wdio.conf.jenkins.js';
+} else if ( process.env.MW_SERVER !== undefined && process.env.MW_SCRIPT_PATH 
!== undefined ) {
+       WebdriverIOconfigFile = './wdio.conf.default.js';
 } else {
        WebdriverIOconfigFile = './wdio.conf.vagrant.js';
 }
diff --git a/package.json b/package.json
index 6dd6acd..dc2205b 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
     "test": "grunt test",
     "doc": "jsduck",
     "postdoc": "grunt copy:jsduck",
-    "selenium": "chromedriver --url-base=/wd/hub --port=4444 & grunt 
webdriver; pkill chromedriver"
+    "selenium": "grunt webdriver"
   },
   "devDependencies": {
     "deepmerge": "^1.3.2",
diff --git a/wdio.conf.default.js b/wdio.conf.default.js
new file mode 100644
index 0000000..c1ed59d
--- /dev/null
+++ b/wdio.conf.default.js
@@ -0,0 +1,226 @@
+/* eslint no-undef: "error"*/
+/* eslint no-console: 0 */
+/* eslint-env node*/
+'use strict';
+var seleniumServers = [];
+
+exports.config = {
+
+       //
+       // ======
+       //
+       // ======
+       // Custom
+       // ======
+       // Define any custom variables.
+       // Example:
+       // username: 'Admin',
+       // Use if from tests with:
+       // browser.options.username
+       username: 'Admin',
+       password: 'vagrant',
+       //
+       // ==================
+       // Specify Test Files
+       // ==================
+       // Define which test specs should run. The pattern is relative to the 
directory
+       // from which `wdio` was called. Notice that, if you are calling `wdio` 
from an
+       // NPM script (see https://docs.npmjs.com/cli/run-script) then the 
current working
+       // directory is where your package.json resides, so `wdio` will be 
called from there.
+       //
+       specs: [
+               './tests/selenium/**/*.js',
+               './extensions/*/tests/selenium/**/*.js',
+               './extensions/VisualEditor/modules/ve-mw/tests/selenium/**/*.js'
+       ],
+       // Patterns to exclude.
+       exclude: [
+       // 'path/to/excluded/files'
+       ],
+       //
+       // ============
+       // Capabilities
+       // ============
+       // Define your capabilities here. WebdriverIO can run multiple 
capabilities at the same
+       // time. Depending on the number of capabilities, WebdriverIO launches 
several test
+       // sessions. Within your capabilities you can overwrite the spec and 
exclude options in
+       // order to group specific specs to a specific capability.
+       //
+       // First, you can define how many instances should be started at the 
same time. Let's
+       // say you have 3 different capabilities (Chrome, Firefox, and Safari) 
and you have
+       // set maxInstances to 1; wdio will spawn 3 processes. Therefore, if 
you have 10 spec
+       // files and you set maxInstances to 10, all spec files will get tested 
at the same time
+       // and 30 processes will get spawned. The property handles how many 
capabilities
+       // from the same test should run tests.
+       //
+       maxInstances: 1,
+       //
+       // If you have trouble getting all important capabilities together, 
check out the
+       // Sauce Labs platform configurator - a great tool to configure your 
capabilities:
+       // https://docs.saucelabs.com/reference/platforms-configurator
+       //
+       capabilities: [ {
+               // maxInstances can get overwritten per capability. So if you 
have an in-house Selenium
+               // grid with only 5 firefox instances available you can make 
sure that not more than
+               // 5 instances get started at a time.
+               maxInstances: 1,
+               //
+               browserName: 'chrome'
+       } ],
+       //
+       // ===================
+       // Test Configurations
+       // ===================
+       // Define all options that are relevant for the WebdriverIO instance 
here
+       //
+       // By default WebdriverIO commands are executed in a synchronous way 
using
+       // the wdio-sync package. If you still want to run your tests in an 
async way
+       // e.g. using promises you can set the sync option to false.
+       sync: true,
+       //
+       // Level of logging verbosity: silent | verbose | command | data | 
result | error
+       logLevel: 'error',
+       //
+       // Enables colors for log output.
+       coloredLogs: true,
+       //
+       // Saves a screenshot to a given path if a command fails.
+       screenshotPath: './log/',
+       //
+       // Set a base URL in order to shorten url command calls. If your url 
parameter starts
+       // with "/", then the base url gets prepended.
+       baseUrl: process.env.MW_SERVER + process.env.MW_SCRIPT_PATH,
+       //
+       // Default timeout for all waitFor* commands.
+       waitforTimeout: 20000,
+       //
+       // Default timeout in milliseconds for request
+       // if Selenium Grid doesn't send response
+       connectionRetryTimeout: 90000,
+       //
+       // Default request retries count
+       connectionRetryCount: 3,
+       //
+       // Initialize the browser instance with a WebdriverIO plugin. The 
object should have the
+       // plugin name as key and the desired plugin options as properties. 
Make sure you have
+       // the plugin installed before running any tests. The following plugins 
are currently
+       // available:
+       // WebdriverCSS: https://github.com/webdriverio/webdrivercss
+       // WebdriverRTC: https://github.com/webdriverio/webdriverrtc
+       // Browserevent: https://github.com/webdriverio/browserevent
+       // plugins: {
+       //     webdrivercss: {
+       //         screenshotRoot: 'my-shots',
+       //         failedComparisonsRoot: 'diffs',
+       //         misMatchTolerance: 0.05,
+       //         screenWidth: [320,480,640,1024]
+       //     },
+       //     webdriverrtc: {},
+       //     browserevent: {}
+       // },
+       //
+       // Test runner services
+       // Services take over a specific job you don't want to take care of. 
They enhance
+       // your test setup with almost no effort. Unlike plugins, they don't 
add new
+       // commands. Instead, they hook themselves up into the test process.
+       // services: [],//
+       // Framework you want to run your specs with.
+       // The following are supported: Mocha, Jasmine, and Cucumber
+       // see also: http://webdriver.io/guide/testrunner/frameworks.html
+       //
+       // Make sure you have the wdio adapter package for the specific 
framework installed
+       // before running any tests.
+       framework: 'mocha',
+
+       // Test reporter for stdout.
+       // The only one supported by default is 'dot'
+       // see also: http://webdriver.io/guide/testrunner/reporters.html
+       reporters: [ 'spec' ],
+       //
+       // Options to be passed to Mocha.
+       // See the full list at http://mochajs.org/
+       mochaOpts: {
+               ui: 'bdd',
+               timeout: 20000
+       },
+       //
+       // =====
+       // Hooks
+       // =====
+       // WebdriverIO provides several hooks you can use to interfere with the 
test process in order to enhance
+       // it and to build services around it. You can either apply a single 
function or an array of
+       // methods to it. If one of them returns with a promise, WebdriverIO 
will wait until that promise got
+       // resolved to continue.
+       //
+       // Gets executed once before all workers get launched.
+       onPrepare: function ( config, capabilities ) {
+               var wants, spawn;
+
+               wants = capabilities.map( function( capability ) {
+                       return capability.browserName;
+               } );
+               spawn = require( 'child_process' ).spawn;
+
+               if ( wants.includes( 'chrome' ) ) {
+                       console.log( 'Spawing a chromedriver' );
+                       seleniumServers.push(
+                               spawn( 'chromedriver',
+                                       [ '--url-base=/wd/hub', '--port=4444' ],
+                                       { env: process.env, detached: true, 
stdio: 'inherit' }
+                               )
+                       );
+               }
+               process.on( 'exit', function () {
+                       seleniumServers.forEach( function ( server ) {
+                               server.kill();
+                       } );
+               } );
+       }
+       //
+       // Gets executed before test execution begins. At this point you can 
access all global
+       // variables, such as `browser`. It is the perfect place to define 
custom commands.
+       // before: function (capabilities, specs) {
+       // },
+       //
+       // Hook that gets executed before the suite starts
+       // beforeSuite: function (suite) {
+       // },
+       //
+       // Hook that gets executed _before_ a hook within the suite starts 
(e.g. runs before calling
+       // beforeEach in Mocha)
+       // beforeHook: function () {
+       // },
+       //
+       // Hook that gets executed _after_ a hook within the suite starts (e.g. 
runs after calling
+       // afterEach in Mocha)
+       //
+       // Function to be executed before a test (in Mocha/Jasmine) or a step 
(in Cucumber) starts.
+       // beforeTest: function (test) {
+       // },
+       //
+       // Runs before a WebdriverIO command gets executed.
+       // beforeCommand: function (commandName, args) {
+       // },
+       //
+       // Runs after a WebdriverIO command gets executed
+       // afterCommand: function (commandName, args, result, error) {
+       // },
+       //
+       // Function to be executed after a test (in Mocha/Jasmine) or a step 
(in Cucumber) starts.
+       // afterTest: function (test) {
+       // },
+       //
+       // Hook that gets executed after the suite has ended
+       // afterSuite: function (suite) {
+       // },
+       //
+       // Gets executed after all tests are done. You still have access to all 
global variables from
+       // the test.
+       // after: function (result, capabilities, specs) {
+       // },
+       //
+       // Gets executed after all workers got shut down and the process is 
about to exit. It is not
+       // possible to defer the end of the process using a promise.
+       // onComplete: function(exitCode) {
+       // }
+};
diff --git a/wdio.conf.jenkins.js b/wdio.conf.jenkins.js
index 6ef36b0..1c51819 100644
--- a/wdio.conf.jenkins.js
+++ b/wdio.conf.jenkins.js
@@ -2,7 +2,7 @@
 /* eslint-env node*/
 'use strict';
 var merge = require( 'deepmerge' ),
-       wdioConf = require( './wdio.conf.vagrant.js' );
+       wdioConf = require( './wdio.conf.default.js' );
 // have main config file as default but overwrite environment specific 
information
 exports.config = merge( wdioConf.config, {
        // Define any custom variables.
diff --git a/wdio.conf.vagrant.js b/wdio.conf.vagrant.js
index 7e3ece2..c3b793e 100644
--- a/wdio.conf.vagrant.js
+++ b/wdio.conf.vagrant.js
@@ -1,202 +1,11 @@
 /* eslint no-undef: "error"*/
 /* eslint-env node*/
 'use strict';
-exports.config = {
-
-       //
-       // ======
-       //
-       // ======
-       // Custom
-       // ======
-       // Define any custom variables.
-       // Example:
-       // username: 'Admin',
-       // Use if from tests with:
-       // browser.options.username
+var merge = require( 'deepmerge' ),
+       wdioConf = require( './wdio.conf.default.js' );
+exports.config = merge( wdioConf.config, {
        username: 'Admin',
        password: 'vagrant',
-       //
-       // ==================
-       // Specify Test Files
-       // ==================
-       // Define which test specs should run. The pattern is relative to the 
directory
-       // from which `wdio` was called. Notice that, if you are calling `wdio` 
from an
-       // NPM script (see https://docs.npmjs.com/cli/run-script) then the 
current working
-       // directory is where your package.json resides, so `wdio` will be 
called from there.
-       //
-       specs: [
-               './tests/selenium/**/*.js',
-               './extensions/*/tests/selenium/**/*.js',
-               './extensions/VisualEditor/modules/ve-mw/tests/selenium/**/*.js'
-       ],
-       // Patterns to exclude.
-       exclude: [
-       // 'path/to/excluded/files'
-       ],
-       //
-       // ============
-       // Capabilities
-       // ============
-       // Define your capabilities here. WebdriverIO can run multiple 
capabilities at the same
-       // time. Depending on the number of capabilities, WebdriverIO launches 
several test
-       // sessions. Within your capabilities you can overwrite the spec and 
exclude options in
-       // order to group specific specs to a specific capability.
-       //
-       // First, you can define how many instances should be started at the 
same time. Let's
-       // say you have 3 different capabilities (Chrome, Firefox, and Safari) 
and you have
-       // set maxInstances to 1; wdio will spawn 3 processes. Therefore, if 
you have 10 spec
-       // files and you set maxInstances to 10, all spec files will get tested 
at the same time
-       // and 30 processes will get spawned. The property handles how many 
capabilities
-       // from the same test should run tests.
-       //
-       maxInstances: 1,
-       //
-       // If you have trouble getting all important capabilities together, 
check out the
-       // Sauce Labs platform configurator - a great tool to configure your 
capabilities:
-       // https://docs.saucelabs.com/reference/platforms-configurator
-       //
-       capabilities: [ {
-               // maxInstances can get overwritten per capability. So if you 
have an in-house Selenium
-               // grid with only 5 firefox instances available you can make 
sure that not more than
-               // 5 instances get started at a time.
-               maxInstances: 1,
-               //
-               browserName: 'chrome'
-       } ],
-       //
-       // ===================
-       // Test Configurations
-       // ===================
-       // Define all options that are relevant for the WebdriverIO instance 
here
-       //
-       // By default WebdriverIO commands are executed in a synchronous way 
using
-       // the wdio-sync package. If you still want to run your tests in an 
async way
-       // e.g. using promises you can set the sync option to false.
-       sync: true,
-       //
-       // Level of logging verbosity: silent | verbose | command | data | 
result | error
-       logLevel: 'error',
-       //
-       // Enables colors for log output.
-       coloredLogs: true,
-       //
-       // Saves a screenshot to a given path if a command fails.
        screenshotPath: './log/',
-       //
-       // Set a base URL in order to shorten url command calls. If your url 
parameter starts
-       // with "/", then the base url gets prepended.
-       baseUrl: 'http://127.0.0.1:8080/w',
-       //
-       // Default timeout for all waitFor* commands.
-       waitforTimeout: 20000,
-       //
-       // Default timeout in milliseconds for request
-       // if Selenium Grid doesn't send response
-       connectionRetryTimeout: 90000,
-       //
-       // Default request retries count
-       connectionRetryCount: 3,
-       //
-       // Initialize the browser instance with a WebdriverIO plugin. The 
object should have the
-       // plugin name as key and the desired plugin options as properties. 
Make sure you have
-       // the plugin installed before running any tests. The following plugins 
are currently
-       // available:
-       // WebdriverCSS: https://github.com/webdriverio/webdrivercss
-       // WebdriverRTC: https://github.com/webdriverio/webdriverrtc
-       // Browserevent: https://github.com/webdriverio/browserevent
-       // plugins: {
-       //     webdrivercss: {
-       //         screenshotRoot: 'my-shots',
-       //         failedComparisonsRoot: 'diffs',
-       //         misMatchTolerance: 0.05,
-       //         screenWidth: [320,480,640,1024]
-       //     },
-       //     webdriverrtc: {},
-       //     browserevent: {}
-       // },
-       //
-       // Test runner services
-       // Services take over a specific job you don't want to take care of. 
They enhance
-       // your test setup with almost no effort. Unlike plugins, they don't 
add new
-       // commands. Instead, they hook themselves up into the test process.
-       // services: [],//
-       // Framework you want to run your specs with.
-       // The following are supported: Mocha, Jasmine, and Cucumber
-       // see also: http://webdriver.io/guide/testrunner/frameworks.html
-       //
-       // Make sure you have the wdio adapter package for the specific 
framework installed
-       // before running any tests.
-       framework: 'mocha',
-
-       // Test reporter for stdout.
-       // The only one supported by default is 'dot'
-       // see also: http://webdriver.io/guide/testrunner/reporters.html
-       reporters: [ 'spec' ],
-       //
-       // Options to be passed to Mocha.
-       // See the full list at http://mochajs.org/
-       mochaOpts: {
-               ui: 'bdd',
-               timeout: 20000
-       }
-       //
-       // =====
-       // Hooks
-       // =====
-       // WebdriverIO provides several hooks you can use to interfere with the 
test process in order to enhance
-       // it and to build services around it. You can either apply a single 
function or an array of
-       // methods to it. If one of them returns with a promise, WebdriverIO 
will wait until that promise got
-       // resolved to continue.
-       //
-       // Gets executed once before all workers get launched.
-       // onPrepare: function (config, capabilities) {
-       // },
-       //
-       // Gets executed before test execution begins. At this point you can 
access all global
-       // variables, such as `browser`. It is the perfect place to define 
custom commands.
-       // before: function (capabilities, specs) {
-       // },
-       //
-       // Hook that gets executed before the suite starts
-       // beforeSuite: function (suite) {
-       // },
-       //
-       // Hook that gets executed _before_ a hook within the suite starts 
(e.g. runs before calling
-       // beforeEach in Mocha)
-       // beforeHook: function () {
-       // },
-       //
-       // Hook that gets executed _after_ a hook within the suite starts (e.g. 
runs after calling
-       // afterEach in Mocha)
-       //
-       // Function to be executed before a test (in Mocha/Jasmine) or a step 
(in Cucumber) starts.
-       // beforeTest: function (test) {
-       // },
-       //
-       // Runs before a WebdriverIO command gets executed.
-       // beforeCommand: function (commandName, args) {
-       // },
-       //
-       // Runs after a WebdriverIO command gets executed
-       // afterCommand: function (commandName, args, result, error) {
-       // },
-       //
-       // Function to be executed after a test (in Mocha/Jasmine) or a step 
(in Cucumber) starts.
-       // afterTest: function (test) {
-       // },
-       //
-       // Hook that gets executed after the suite has ended
-       // afterSuite: function (suite) {
-       // },
-       //
-       // Gets executed after all tests are done. You still have access to all 
global variables from
-       // the test.
-       // after: function (result, capabilities, specs) {
-       // },
-       //
-       // Gets executed after all workers got shut down and the process is 
about to exit. It is not
-       // possible to defer the end of the process using a promise.
-       // onComplete: function(exitCode) {
-       // }
-};
+       baseUrl: 'http://127.0.0.1:8080/w'
+} );

-- 
To view, visit https://gerrit.wikimedia.org/r/341528
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I15bd422cf899aa48698e1614aec0fdb8927b6913
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Hashar <has...@free.fr>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to