async _startBrowser(runner) { runner .src(this.dummyTestcafeFile) .screenshots(global.output_dir, !this.options.disableScreenshots) // .video(global.output_dir) // TODO Make this configurable .browsers(this.options.show ? this.options.browser : `${this.options.browser}:headless`) .reporter('minimal') .run({ skipJsErrors: true, skipUncaughtErrors: true, quarantineMode: false, // debugMode: true, // debugOnFail: true, // developmentMode: true, pageLoadTimeout: this.options.getPageTimeout, selectorTimeout: this.options.waitForTimeout, assertionTimeout: this.options.waitForTimeout, takeScreenshotsOnFails: true, }) .catch((err) => { this.debugSection('_before', `Error ${err.toString()}`); this.isRunning = false; this.testcafe.close(); }); }
app.screenshots.map(assertValidUrl); app.comments.map(assert.isString); }));
['1', '2', '3', '4', '5'].map((v) => assert.property(app.histogram, v)); assert(app.screenshots.length); app.screenshots.map(assertValidUrl);
app.screenshots.map(assertValidUrl); app.comments.map(assert.isString); });
if ((config.screenshots && config.screenshots.captureAll && !/^(closeWindow):/.test(title)) || currentTest.state === 'failed') { const casePath = path.dirname(caseName); const filepath = `${self.screenshotPath}/${self.caseName}_${self.stepId}`;
function screenshots(path,des) { ffmpeg(path) .screenshots({ count:4, filename: "%i.jpg", folder:des }); }
addScreenshot (url) { let screenshot = { url: url, timestamp: utils.getTimestamp(true) } this.screenshots.push(screenshot) db.get('screenshots') .push({ url: screenshot }) .write() }
// ------------------------------------------------------------- // Archives. // ------------------------------------------------------------- // Export archives for screenshots and logos. function exportArchives (images, source, target) { if (!images) return createArchive('images.zip', target, source, images.screenshots) createArchive('logo.zip', target, source, images.logos) }
/* Done */ router.get('/thumbnail', function (req, res) { probe('videos/input.mp4', function (err, probeData) { var proc = new ffmpeg('videos/input.mp4'); proc.screenshots({ timestamps: ['50%', '80%'], folder: 'videos', size: '392x220' }).on('end', function () { console.log('Screenshots taken'); res.send('Done Thumbnail'); }); }); });
ffmpeg(`${uploadDirectory}/file/${file.filename}`) .on('end', () => { return resolve(); }) .on('error', function(err, stdout, stderr) { return reject(err); }) .screenshots({ timestamps: [(frames === 'N/A' ? 0 : '1%')],//1% should remedy black first frames or fade-ins count: 1, filename: `thumb-${file.hash}${file.thumbextension}`, folder: `${uploadDirectory}/file/`, size: geometry.width > geometry.height ? `${thumbSize}x?` : `?x${thumbSize}` //keep aspect ratio, but also making sure taller/wider thumbs dont exceed thumbSize in either dimension });
function exportSlide(plugin) { // TODO: better logging when slide is skipped and move it to the main loop system.stdout.write('\r' + progressBar(plugin)); if (options.slides && !options.slides[plugin.currentSlide]) return Promise.resolve(plugin); var decktape = Promise.resolve(plugin).then(printSlide); if (options.screenshots) decktape = (options.screenshotSize || [options.size]).reduce(function (decktape, resolution) { return decktape.then(function () { page.viewportSize = resolution }) // Delay page rendering to wait for the resize event to complete, // e.g. for impress.js (may be needed to be configurable) .then(delay(1000)) .then(function () { page.render(options.screenshotDirectory + '/' + options.filename.replace('.pdf', '_' + plugin.currentSlide + '_' + resolution.width + 'x' + resolution.height + '.' + options.screenshotFormat), { onlyViewport: true }); }) }, decktape) .then(function () { page.viewportSize = options.size }) .then(delay(1000)); return decktape.then(value(plugin)); }
function screenshots(path, des) { Setting.find() .exec(function (err, setting) { if (err) { console.log(err); } ffmpeg(path) .screenshots({ count: setting[0].screenshots, filename: "%i.jpg", folder: des }) .on('end', function () { thumbnails(des,path); }); }); }
function encodeScreenshot(options) { if (!options.screenshots) { return undefined; } return fs.readdirSync(options.screenshots).map(function (file) { if (file[0] === '.') { return undefined; } var name = file.split('.'); var extension = name.pop(); extension === 'svg' ? extension = 'svg+xml' : false; return { name: name.join('.').replace(/\s/, '_'), url: 'data:image/' + extension + ';base64,' + getDataUri(options.screenshots + '/' + file) }; }).filter(function (image) { return image; }); // why? }
function encodeScreenshot (options) { if (!options.screenshots) { return undefined } return fs.readdirSync(options.screenshots).map(file => { if (file[0] === '.') { return undefined } let name = file.split('.') let extension = name.pop() extension === 'svg' ? extension = 'svg+xml' : false return { name: name.join('.').replace(/\s/, '_'), url: 'data:image/' + extension + ';base64,' + getDataUri(options.screenshots + '/' + file) } }).filter(image => image) // why? }
function screenshots(path, des) { Setting.find() .exec(function(err, setting) { if(err) { console.log(err); } ffmpeg(path) .screenshots({ count: setting[0].screenshots, filename: "%i.jpg", folder: des }) .on('end', function () { thumbnails(des, path); }); }); }