fix(video): set default size to fit into 800x800 (#5333)
This commit is contained in:
parent
7e757cd531
commit
bb0af314ba
|
|
@ -414,6 +414,20 @@ export function validateBrowserContextOptions(options: types.BrowserContextOptio
|
||||||
throw new Error(`"isMobile" option is not supported with null "viewport"`);
|
throw new Error(`"isMobile" option is not supported with null "viewport"`);
|
||||||
if (!options.viewport && !options.noDefaultViewport)
|
if (!options.viewport && !options.noDefaultViewport)
|
||||||
options.viewport = { width: 1280, height: 720 };
|
options.viewport = { width: 1280, height: 720 };
|
||||||
|
if (options.recordVideo && !options.recordVideo.size) {
|
||||||
|
if (options.noDefaultViewport) {
|
||||||
|
options.recordVideo.size = { width: 800, height: 600 };
|
||||||
|
} else {
|
||||||
|
const size = options.viewport!;
|
||||||
|
const scale = 800 / Math.max(size.width, size.height);
|
||||||
|
if (scale < 1) {
|
||||||
|
options.recordVideo.size = {
|
||||||
|
width: Math.floor(size.width * scale),
|
||||||
|
height: Math.floor(size.height * scale)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (options.proxy) {
|
if (options.proxy) {
|
||||||
if (!browserOptions.proxy)
|
if (!browserOptions.proxy)
|
||||||
throw new Error(`Browser needs to be launched with the global proxy. If all contexts override the proxy, global proxy will be never used and can be any string, for example "launch({ proxy: { server: 'per-context' } })"`);
|
throw new Error(`Browser needs to be launched with the global proxy. If all contexts override the proxy, global proxy will be never used and can be any string, for example "launch({ proxy: { server: 'per-context' } })"`);
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,8 @@ export class VideoPlayer {
|
||||||
|
|
||||||
const lines = this.output.split('\n');
|
const lines = this.output.split('\n');
|
||||||
let framesLine = lines.find(l => l.startsWith('frame='))!;
|
let framesLine = lines.find(l => l.startsWith('frame='))!;
|
||||||
|
if (!framesLine)
|
||||||
|
throw new Error(`No frame data in the output:\n${this.output}`);
|
||||||
framesLine = framesLine.substring(framesLine.lastIndexOf('frame='));
|
framesLine = framesLine.substring(framesLine.lastIndexOf('frame='));
|
||||||
const framesMatch = framesLine.match(/frame=\s+(\d+)/);
|
const framesMatch = framesLine.match(/frame=\s+(\d+)/);
|
||||||
const streamLine = lines.find(l => l.trim().startsWith('Stream #0:0'));
|
const streamLine = lines.find(l => l.trim().startsWith('Stream #0:0'));
|
||||||
|
|
@ -398,8 +400,8 @@ describe('screencast', suite => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should use viewport as default size', async ({browser, testInfo}) => {
|
it('should use viewport scaled down to fit into 800x800 as default size', async ({browser, testInfo}) => {
|
||||||
const size = {width: 800, height: 600};
|
const size = {width: 1600, height: 1200};
|
||||||
const context = await browser.newContext({
|
const context = await browser.newContext({
|
||||||
recordVideo: {
|
recordVideo: {
|
||||||
dir: testInfo.outputPath(''),
|
dir: testInfo.outputPath(''),
|
||||||
|
|
@ -413,11 +415,11 @@ describe('screencast', suite => {
|
||||||
|
|
||||||
const videoFile = await page.video().path();
|
const videoFile = await page.video().path();
|
||||||
const videoPlayer = new VideoPlayer(videoFile);
|
const videoPlayer = new VideoPlayer(videoFile);
|
||||||
expect(videoPlayer.videoWidth).toBe(size.width);
|
expect(videoPlayer.videoWidth).toBe(800);
|
||||||
expect(videoPlayer.videoHeight).toBe(size.height);
|
expect(videoPlayer.videoHeight).toBe(600);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be 1280x720 by default', async ({browser, testInfo}) => {
|
it('should be 800x450 by default', async ({browser, testInfo}) => {
|
||||||
const context = await browser.newContext({
|
const context = await browser.newContext({
|
||||||
recordVideo: {
|
recordVideo: {
|
||||||
dir: testInfo.outputPath(''),
|
dir: testInfo.outputPath(''),
|
||||||
|
|
@ -430,8 +432,28 @@ describe('screencast', suite => {
|
||||||
|
|
||||||
const videoFile = await page.video().path();
|
const videoFile = await page.video().path();
|
||||||
const videoPlayer = new VideoPlayer(videoFile);
|
const videoPlayer = new VideoPlayer(videoFile);
|
||||||
expect(videoPlayer.videoWidth).toBe(1280);
|
expect(videoPlayer.videoWidth).toBe(800);
|
||||||
expect(videoPlayer.videoHeight).toBe(720);
|
expect(videoPlayer.videoHeight).toBe(450);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be 800x600 with null viewport', (test, { headful, browserName }) => {
|
||||||
|
test.fixme(browserName === 'firefox' && !headful, 'Fails in headless on bots');
|
||||||
|
}, async ({ browser, testInfo }) => {
|
||||||
|
const context = await browser.newContext({
|
||||||
|
recordVideo: {
|
||||||
|
dir: testInfo.outputPath(''),
|
||||||
|
},
|
||||||
|
viewport: null
|
||||||
|
});
|
||||||
|
|
||||||
|
const page = await context.newPage();
|
||||||
|
await new Promise(r => setTimeout(r, 1000));
|
||||||
|
await context.close();
|
||||||
|
|
||||||
|
const videoFile = await page.video().path();
|
||||||
|
const videoPlayer = new VideoPlayer(videoFile);
|
||||||
|
expect(videoPlayer.videoWidth).toBe(800);
|
||||||
|
expect(videoPlayer.videoHeight).toBe(600);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should capture static page in persistent context', async ({launchPersistent, testInfo}) => {
|
it('should capture static page in persistent context', async ({launchPersistent, testInfo}) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue