test(screencast): use public API for pixel tests (#3858)

This commit is contained in:
Yury Semikhatsky 2020-09-11 18:58:53 -07:00 committed by GitHub
parent 40323aa94d
commit 02275f2414
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 22 deletions

View file

@ -13,7 +13,7 @@
},
{
"name": "webkit",
"revision": "1343",
"revision": "1344",
"download": true
}
]

View file

@ -122,7 +122,9 @@ class VideoPlayer {
if (ended)
throw new Error('All frames are empty');
const pixels = await this.pixels();
if (!pixels.every(p => p === 255))
// Quick check if all pixels are almost white. In Firefox blank page is not
// truly white so whe check approximately.
if (!pixels.every(p => p > 245))
return;
}
}
@ -159,14 +161,17 @@ class VideoPlayer {
describe('screencast', suite => {
suite.slow();
suite.skip(options.WIRE);
}, () => {
it('should capture static page', async ({page, tmpDir, videoPlayer, toImpl}) => {
const videoFile = path.join(tmpDir, 'v.webm');
it('should capture static page', async ({browser, videoPlayer}) => {
const context = await browser.newContext({ _recordVideos: true, _videoSize: { width: 320, height: 240 } });
const page = await context.newPage();
const video = await page.waitForEvent('_videostarted') as any;
await page.evaluate(() => document.body.style.backgroundColor = 'red');
await toImpl(page)._delegate.startScreencast({outputFile: videoFile, width: 320, height: 240});
await new Promise(r => setTimeout(r, 1000));
await toImpl(page)._delegate.stopScreencast();
await page.close();
const videoFile = await video.path();
expect(fs.existsSync(videoFile)).toBe(true);
await videoPlayer.load(videoFile);
@ -183,14 +188,18 @@ describe('screencast', suite => {
it('should capture navigation', (test, parameters) => {
test.flaky();
}, async ({page, tmpDir, server, videoPlayer, toImpl}) => {
const videoFile = path.join(tmpDir, 'v.webm');
}, async ({browser, server, videoPlayer}) => {
const context = await browser.newContext({ _recordVideos: true, _videoSize: { width: 1280, height: 720 } });
const page = await context.newPage();
const video = await page.waitForEvent('_videostarted') as any;
await page.goto(server.PREFIX + '/background-color.html#rgb(0,0,0)');
await toImpl(page)._delegate.startScreencast({outputFile: videoFile, width: 320, height: 240});
await new Promise(r => setTimeout(r, 1000));
await page.goto(server.CROSS_PROCESS_PREFIX + '/background-color.html#rgb(100,100,100)');
await new Promise(r => setTimeout(r, 1000));
await toImpl(page)._delegate.stopScreencast();
await page.close();
const videoFile = await video.path();
expect(fs.existsSync(videoFile)).toBe(true);
await videoPlayer.load(videoFile);
@ -212,14 +221,18 @@ describe('screencast', suite => {
it('should capture css transformation', (test, parameters) => {
test.fail(options.WEBKIT(parameters) && WIN, 'Does not work on WebKit Windows');
}, async ({page, tmpDir, server, videoPlayer, toImpl}) => {
const videoFile = path.join(tmpDir, 'v.webm');
}, async ({browser, server, videoPlayer}) => {
const size = {width: 320, height: 240};
// Set viewport equal to screencast frame size to avoid scaling.
await page.setViewportSize({width: 320, height: 240});
const context = await browser.newContext({ _recordVideos: true, _videoSize: size, viewport: size });
const page = await context.newPage();
const video = await page.waitForEvent('_videostarted') as any;
await page.goto(server.PREFIX + '/rotate-z.html');
await toImpl(page)._delegate.startScreencast({outputFile: videoFile, width: 320, height: 240});
await new Promise(r => setTimeout(r, 1000));
await toImpl(page)._delegate.stopScreencast();
await page.close();
const videoFile = await video.path();
expect(fs.existsSync(videoFile)).toBe(true);
await videoPlayer.load(videoFile);
@ -299,12 +312,17 @@ describe('screencast', suite => {
await browser.close();
});
it('should scale frames down to the requested size ', async ({page, videoPlayer, tmpDir, server, toImpl}) => {
await page.setViewportSize({width: 640, height: 480});
const videoFile = path.join(tmpDir, 'v.webm');
it('should scale frames down to the requested size ', async ({browser, videoPlayer, server}) => {
const context = await browser.newContext({
viewport: {width: 640, height: 480},
// Set size to 1/2 of the viewport.
_recordVideos: true,
_videoSize: { width: 320, height: 240 },
});
const page = await context.newPage();
const video = await page.waitForEvent('_videostarted') as any;
await page.goto(server.PREFIX + '/checkerboard.html');
// Set size to 1/2 of the viewport.
await toImpl(page)._delegate.startScreencast({outputFile: videoFile, width: 320, height: 240});
// Update the picture to ensure enough frames are generated.
await page.$eval('.container', container => {
container.firstElementChild.classList.remove('red');
@ -314,7 +332,9 @@ describe('screencast', suite => {
container.firstElementChild.classList.add('red');
});
await new Promise(r => setTimeout(r, 1000));
await toImpl(page)._delegate.stopScreencast();
await page.close();
const videoFile = await video.path();
expect(fs.existsSync(videoFile)).toBe(true);
await videoPlayer.load(videoFile);