Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5976911
index.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
index.js
View Options
'use strict'
;
const
fs
=
require
(
'fs'
);
/**
* @since 1.1.0
* @return {string} File name friendly version of ISO 8601 date and time
*/
function
makeFilenameDate
()
{
return
new
Date
().
toISOString
().
replace
(
/[:.]/g
,
'-'
);
}
/**
* @since 1.1.0
* @param {string} title Test title
* @return {string} File name friendly version of the test title
*/
function
testTitle
(
title
)
{
return
encodeURIComponent
(
title
.
replace
(
/\s+/g
,
'-'
)
);
}
/**
* @since 1.1.0
* @param {string} title Test title
* @param {string} extension png for screenshots, mp4 for videos
* @return {string} Full path of screenshot/video file
*/
function
filePath
(
title
,
extension
)
{
return
`
${
browser
.
config
.
screenshotPath
}
/
${
testTitle
(
title
)
}
-
${
makeFilenameDate
()
}
.
${
extension
}
`
;
}
/**
* Based on <https://github.com/webdriverio/webdriverio/issues/269#issuecomment-306342170>
*
* @since 1.0.0
* @param {string} title Description (will be sanitised and used as file name)
* @return {string} File path
*/
async
function
saveScreenshot
(
title
)
{
// Create sensible file name for current test title
const
path
=
filePath
(
title
,
'png'
);
// Ensure directory exists, based on WebDriverIO#saveScreenshotSync()
try
{
// eslint-disable-next-line security/detect-non-literal-fs-filename
fs
.
statSync
(
browser
.
config
.
screenshotPath
);
}
catch
(
err
)
{
// eslint-disable-next-line security/detect-non-literal-fs-filename
fs
.
mkdirSync
(
browser
.
config
.
screenshotPath
);
}
// Create and save screenshot
await
browser
.
saveScreenshot
(
path
);
return
path
;
}
/**
* @since 1.1.0
* @param {Object} ffmpeg
* @param {string} title Test title
* @return {Object} ffmpeg object is returned so it could be used in stopVideo()
*/
function
startVideo
(
ffmpeg
,
title
)
{
if
(
process
.
env
.
DISPLAY
&&
process
.
env
.
DISPLAY
.
startsWith
(
':'
)
)
{
const
videoPath
=
filePath
(
title
,
'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
(
(
line
)
=>
{
console
.
log
(
prefix
+
line
);
}
);
};
ffmpeg
.
stdout
.
on
(
'data'
,
(
data
)
=>
{
logBuffer
(
data
,
'ffmpeg stdout: '
);
}
);
ffmpeg
.
stderr
.
on
(
'data'
,
(
data
)
=>
{
logBuffer
(
data
,
'ffmpeg stderr: '
);
}
);
}
return
ffmpeg
;
}
/**
* @since 1.1.0
* @param {Object} ffmpeg
*/
function
stopVideo
(
ffmpeg
)
{
if
(
ffmpeg
)
{
ffmpeg
.
kill
(
'SIGINT'
);
}
}
module
.
exports
=
{
makeFilenameDate
,
saveScreenshot
,
startVideo
,
stopVideo
};
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 3, 19:31 (2 d, 14 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
74/6d/738368463e956ee773a9752387e1
Default Alt Text
index.js (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment