Merge "Revert "Selenium: Use wdio-video-reporter to record videos of test run""
This commit is contained in:
commit
f8f275585d
4 changed files with 60 additions and 197 deletions
185
package-lock.json
generated
185
package-lock.json
generated
|
|
@ -276,70 +276,6 @@
|
|||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@ffmpeg-installer/darwin-x64": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz",
|
||||
"integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@ffmpeg-installer/ffmpeg": {
|
||||
"version": "1.0.20",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.0.20.tgz",
|
||||
"integrity": "sha512-wbgd//6OdwbFXYgV68ZyKrIcozEQpUKlvV66XHaqO2h3sFbX0jYLzx62Q0v8UcFWN21LoxT98NU2P+K0OWsKNA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@ffmpeg-installer/darwin-x64": "4.1.0",
|
||||
"@ffmpeg-installer/linux-arm": "4.1.3",
|
||||
"@ffmpeg-installer/linux-arm64": "4.1.4",
|
||||
"@ffmpeg-installer/linux-ia32": "4.1.0",
|
||||
"@ffmpeg-installer/linux-x64": "4.1.0",
|
||||
"@ffmpeg-installer/win32-ia32": "4.1.0",
|
||||
"@ffmpeg-installer/win32-x64": "4.1.0"
|
||||
}
|
||||
},
|
||||
"@ffmpeg-installer/linux-arm": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz",
|
||||
"integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@ffmpeg-installer/linux-arm64": {
|
||||
"version": "4.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.4.tgz",
|
||||
"integrity": "sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@ffmpeg-installer/linux-ia32": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz",
|
||||
"integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@ffmpeg-installer/linux-x64": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz",
|
||||
"integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@ffmpeg-installer/win32-ia32": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz",
|
||||
"integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@ffmpeg-installer/win32-x64": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz",
|
||||
"integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
|
||||
|
|
@ -427,27 +363,6 @@
|
|||
"integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@wdio/allure-reporter": {
|
||||
"version": "5.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@wdio/allure-reporter/-/allure-reporter-5.22.4.tgz",
|
||||
"integrity": "sha512-iE6LOlrkBSt6JsKxsI2tzaUjUJx+dz9yHVl0yoBW/NYBzxE0sn/0jr8OR+lUV35GdIi90D59MMIrZ/BYS1occA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@wdio/reporter": "5.22.4",
|
||||
"allure-js-commons": "^1.3.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@wdio/reporter": {
|
||||
"version": "5.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz",
|
||||
"integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs-extra": "^8.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@wdio/cli": {
|
||||
"version": "5.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-5.13.2.tgz",
|
||||
|
|
@ -705,33 +620,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"allure-js-commons": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/allure-js-commons/-/allure-js-commons-1.3.2.tgz",
|
||||
"integrity": "sha512-FTmoqP36ZjHFT4iLdYamyCFhyj1jqD6BIdiZ5pBlyafDJrFRV76XIXNxwRqbHpSw40o1vHzYi4vGpmREnhnHVw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"file-type": "^7.7.1",
|
||||
"fs-extra": "^6.0.1",
|
||||
"js2xmlparser": "^3.0.0",
|
||||
"mime": "^2.3.1",
|
||||
"object-assign": "^4.1.1",
|
||||
"uuid": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
|
||||
"integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ansi-align": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
|
||||
|
|
@ -3010,12 +2898,6 @@
|
|||
"integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=",
|
||||
"dev": true
|
||||
},
|
||||
"file-type": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/file-type/-/file-type-7.7.1.tgz",
|
||||
"integrity": "sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ==",
|
||||
"dev": true
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
|
|
@ -4476,15 +4358,6 @@
|
|||
"esprima": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"js2xmlparser": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
|
||||
"integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"xmlcreate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||
|
|
@ -5746,8 +5619,7 @@
|
|||
"minimist": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
||||
},
|
||||
"minimist-options": {
|
||||
"version": "4.0.2",
|
||||
|
|
@ -5771,7 +5643,6 @@
|
|||
"version": "0.5.5",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
||||
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.5"
|
||||
}
|
||||
|
|
@ -9302,54 +9173,6 @@
|
|||
"mwbot": "1.0.10"
|
||||
}
|
||||
},
|
||||
"wdio-video-reporter": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wdio-video-reporter/-/wdio-video-reporter-2.0.0.tgz",
|
||||
"integrity": "sha512-glMpAQJcvtGwXGLNxJB1U9B8+NvXzaiFn7aiIhlfcsCPUboPt51VaxLTHu+pPTbFIfPEHAf43a862soHLwA6LQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@ffmpeg-installer/ffmpeg": "^1.0.20",
|
||||
"@wdio/allure-reporter": "^5.16.16",
|
||||
"@wdio/reporter": "^5.15.2",
|
||||
"fs-extra": "^6.0.1",
|
||||
"mkdirp": "^0.5.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@wdio/reporter": {
|
||||
"version": "5.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz",
|
||||
"integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs-extra": "^8.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
||||
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
|
||||
"integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"webdriver": {
|
||||
"version": "5.13.2",
|
||||
"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.13.2.tgz",
|
||||
|
|
@ -9601,12 +9424,6 @@
|
|||
"integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==",
|
||||
"dev": true
|
||||
},
|
||||
"xmlcreate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
|
||||
"integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
|
||||
"dev": true
|
||||
},
|
||||
"xmldom": {
|
||||
"version": "0.1.19",
|
||||
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@
|
|||
"qunit": "2.10.0",
|
||||
"stylelint-config-wikimedia": "0.10.1",
|
||||
"wdio-mediawiki": "file:tests/selenium/wdio-mediawiki",
|
||||
"wdio-video-reporter": "2.0.0",
|
||||
"webdriverio": "5.13.2"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,13 @@ environments this is probably set already. On macOS, set it to a dummy value lik
|
|||
|
||||
#### Video recording
|
||||
|
||||
Starting from WebdriverIO v5, [wdio-video-reporter](https://www.npmjs.com/package/wdio-video-reporter) NPM package is used to record videos of test runs. By default, videos for all tests are recorded and saved under `tests/selenium/log` directory.
|
||||
To capture a video, the tests have to run in the context of an X11 server, with the `DISPLAY`
|
||||
environment variable set to its display name. If the shell has no X11 server or if you want
|
||||
to hide the output, you can also launch a virtual X11 display using Xvfb. Recording videos
|
||||
is currently supported only on Linux, and is triggered by the `DISPLAY` value starting with
|
||||
a colon (as Xvfb typically would). For example:
|
||||
|
||||
DISPLAY=:2 npm run selenium
|
||||
|
||||
#### Filter
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
const fs = require( 'fs' );
|
||||
const path = require( 'path' );
|
||||
const logPath = process.env.LOG_DIR || path.join( __dirname, '/log' );
|
||||
const video = require( 'wdio-video-reporter' );
|
||||
|
||||
let ffmpeg;
|
||||
|
||||
// get current test title and clean it, to use it as file name
|
||||
function fileName( title ) {
|
||||
|
|
@ -94,16 +95,7 @@ exports.config = {
|
|||
// See also: https://webdriver.io/docs/junit-reporter.html#configuration
|
||||
[ 'junit', {
|
||||
outputDir: logPath
|
||||
} ],
|
||||
[
|
||||
// See also: https://github.com/presidenten/wdio-video-reporter/blob/master/README.md
|
||||
video, {
|
||||
// If true, also saves videos for successful test cases. Default: false.
|
||||
saveAllVideos: true,
|
||||
// Path to directory where videos will be stored
|
||||
outputDir: logPath
|
||||
}
|
||||
]
|
||||
} ]
|
||||
],
|
||||
// See also: http://mochajs.org/
|
||||
mochaOpts: {
|
||||
|
|
@ -114,12 +106,61 @@ exports.config = {
|
|||
// =====
|
||||
// Hooks
|
||||
// =====
|
||||
/**
|
||||
* Executed before a Mocha test starts.
|
||||
* @param {Object} test Mocha Test object
|
||||
*/
|
||||
beforeTest: function ( test ) {
|
||||
if ( process.env.DISPLAY && process.env.DISPLAY.startsWith( ':' ) ) {
|
||||
const videoPath = filePath( test, logPath, 'mp4' );
|
||||
const { spawn } = require( 'child_process' );
|
||||
ffmpeg = spawn( 'ffmpeg', [
|
||||
'-f', 'x11grab', // grab the X11 display
|
||||
'-video_size', '1280x1024', // video size
|
||||
'-i', process.env.DISPLAY, // input file url
|
||||
'-loglevel', 'error', // log only errors
|
||||
'-y', // overwrite output files without asking
|
||||
'-pix_fmt', 'yuv420p', // QuickTime Player support, "Use -pix_fmt yuv420p for compatibility with outdated media players"
|
||||
videoPath // output file
|
||||
] );
|
||||
|
||||
const logBuffer = function ( buffer, prefix ) {
|
||||
const lines = buffer.toString().trim().split( '\n' );
|
||||
lines.forEach( function ( line ) {
|
||||
console.log( prefix + line );
|
||||
} );
|
||||
};
|
||||
|
||||
ffmpeg.stdout.on( 'data', ( data ) => {
|
||||
logBuffer( data, 'ffmpeg stdout: ' );
|
||||
} );
|
||||
|
||||
ffmpeg.stderr.on( 'data', ( data ) => {
|
||||
logBuffer( data, 'ffmpeg stderr: ' );
|
||||
} );
|
||||
|
||||
ffmpeg.on( 'close', ( code, signal ) => {
|
||||
console.log( '\n\tVideo location:', videoPath, '\n' );
|
||||
if ( code !== null ) {
|
||||
console.log( `\tffmpeg exited with code ${code} ${videoPath}` );
|
||||
}
|
||||
if ( signal !== null ) {
|
||||
console.log( `\tffmpeg received signal ${signal} ${videoPath}` );
|
||||
}
|
||||
} );
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Executed after a Mocha test ends.
|
||||
*
|
||||
* @param {Object} test Mocha Test object
|
||||
*/
|
||||
afterTest: function ( test ) {
|
||||
if ( ffmpeg ) {
|
||||
// stop video recording
|
||||
ffmpeg.kill( 'SIGINT' );
|
||||
}
|
||||
|
||||
// if test passed, ignore, else take and save screenshot
|
||||
if ( test.passed ) {
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in a new issue