From d2771ebfea4b92459f9eddd354fec432371bf8e6 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Thu, 10 Sep 2020 18:09:17 -0700 Subject: [PATCH] test(screencast): always use chromium to replay the video (#3841) --- test/assets/player.html | 33 +++++++++++++++-------------- test/screencast.spec.ts | 46 ++++++++++++++--------------------------- 2 files changed, 33 insertions(+), 46 deletions(-) diff --git a/test/assets/player.html b/test/assets/player.html index ff74022bf7..866f5fe123 100644 --- a/test/assets/player.html +++ b/test/assets/player.html @@ -22,30 +22,31 @@ async function playNFrames(n) { await playOneFrame(); } +let _frameCount = -1; async function countFrames() { - const video = document.querySelector('video'); + if (_frameCount === -1) { + const video = document.querySelector('video'); - if (!video.duration) - return 0; + if (!video.duration) + return 0; - if (video.currentTime) - await playToTheEnd(); + if (video.currentTime) + await playToTheEnd(); - let count = 0; - while (true) { - ++count; - await playOneFrame(); - if (video.ended) - break; + let count = 0; + while (true) { + ++count; + await playOneFrame(); + if (video.ended) + break; + } + _frameCount = count; } - return count; + return _frameCount; } -async function seekLastFrame(isWPE) { +async function seekLastFrame() { let frameCount = await countFrames(); - // TODO: figure out why playing last frame in WPE resets the picture. - if (isWPE && frameCount > 1) - --frameCount; await playNFrames(frameCount); return frameCount; } diff --git a/test/screencast.spec.ts b/test/screencast.spec.ts index 24a7153a1a..b5d96b0db7 100644 --- a/test/screencast.spec.ts +++ b/test/screencast.spec.ts @@ -29,12 +29,11 @@ declare global { } registerFixture('videoPlayer', async ({playwright, context, server}, test) => { - let chromium; - if (options.WEBKIT && !LINUX) { - // WebKit on Mac & Windows cannot replay webm/vp8 video, so we launch chromium. - chromium = await playwright.chromium.launch(); - context = await chromium.newContext(); - } + // WebKit on Mac & Windows cannot replay webm/vp8 video, is unrelyable + // on Linux (times out) and in Firefox, so we always launch chromium for + // playback. + const chromium = await playwright.chromium.launch(); + context = await chromium.newContext(); const page = await context.newPage(); const player = new VideoPlayer(page, server); @@ -140,8 +139,7 @@ class VideoPlayer { } async seekLastFrame() { - const isWPE = LINUX && options.WEBKIT && options.HEADLESS; - return await this._page.evaluate(async x => await (window as any).seekLastFrame(x), isWPE); + return await this._page.evaluate(async x => await (window as any).seekLastFrame()); } async pixels(point = {x: 0, y: 0}) { @@ -162,13 +160,9 @@ class VideoPlayer { describe('screencast', suite => { suite.slow(); - suite.flaky(); suite.skip(options.WIRE); }, () => { - it('should capture static page', test => { - test.flaky(options.CHROMIUM && LINUX && !options.HEADLESS); - test.flaky(options.WEBKIT && LINUX); - }, async ({page, tmpDir, videoPlayer, toImpl}) => { + it('should capture static page', async ({page, tmpDir, videoPlayer, toImpl}) => { const videoFile = path.join(tmpDir, 'v.webm'); await page.evaluate(() => document.body.style.backgroundColor = 'red'); await toImpl(page)._delegate.startScreencast({outputFile: videoFile, width: 320, height: 240}); @@ -189,10 +183,7 @@ describe('screencast', suite => { }); it('should capture navigation', test => { - test.flaky(options.CHROMIUM && MAC); - test.flaky(options.FIREFOX); - test.flaky(options.WEBKIT); - test.fixme(options.WEBKIT && LINUX, 'Times out on bots'); + test.flaky(); }, async ({page, tmpDir, server, videoPlayer, toImpl}) => { const videoFile = path.join(tmpDir, 'v.webm'); await page.goto(server.PREFIX + '/background-color.html#rgb(0,0,0)'); @@ -221,7 +212,6 @@ describe('screencast', suite => { }); it('should capture css transformation', test => { - test.fixme(options.WEBKIT && LINUX, 'Times out on bots'); test.fail(options.WEBKIT && WIN, 'Does not work on WebKit Windows'); }, async ({page, tmpDir, server, videoPlayer, toImpl}) => { const videoFile = path.join(tmpDir, 'v.webm'); @@ -244,10 +234,8 @@ describe('screencast', suite => { } }); - it('should automatically start/finish when new page is created/closed', test => { - test.flaky(options.FIREFOX, 'Even slow is not slow enough'); - }, async ({browserType, tmpDir}) => { - const browser = await browserType.launch({_videosPath: tmpDir}); + it('should automatically start/finish when new page is created/closed', async ({browserType, defaultBrowserOptions, tmpDir}) => { + const browser = await browserType.launch({ ...defaultBrowserOptions, _videosPath: tmpDir }); const context = await browser.newContext({_recordVideos: {width: 320, height: 240}}); const [screencast, newPage] = await Promise.all([ new Promise(r => context.on('page', page => page.on('_videostarted', r))), @@ -263,8 +251,8 @@ describe('screencast', suite => { await browser.close(); }); - it('should finish when contex closes', async ({browserType, tmpDir}) => { - const browser = await browserType.launch({_videosPath: tmpDir}); + it('should finish when contex closes', async ({browserType, defaultBrowserOptions, tmpDir}) => { + const browser = await browserType.launch({ ...defaultBrowserOptions, _videosPath: tmpDir }); const context = await browser.newContext({_recordVideos: {width: 320, height: 240}}); const [video] = await Promise.all([ @@ -281,7 +269,7 @@ describe('screencast', suite => { await browser.close(); }); - it('should fire striclty after context.newPage', async ({browser, tmpDir}) => { + it('should fire striclty after context.newPage', async ({browser}) => { const context = await browser.newContext({_recordVideos: {width: 320, height: 240}}); const page = await context.newPage(); // Should not hang. @@ -289,8 +277,8 @@ describe('screencast', suite => { await context.close(); }); - it('should fire start event for popups', async ({browserType, tmpDir, server}) => { - const browser = await browserType.launch({_videosPath: tmpDir}); + it('should fire start event for popups', async ({browserType, defaultBrowserOptions, tmpDir, server}) => { + const browser = await browserType.launch({ ...defaultBrowserOptions, _videosPath: tmpDir }); const context = await browser.newContext({_recordVideos: {width: 320, height: 240}}); const [page] = await Promise.all([ @@ -312,9 +300,7 @@ describe('screencast', suite => { await browser.close(); }); - it('should scale frames down to the requested size ', test => { - test.fixme(options.WEBKIT && LINUX, 'Times out on bots'); - }, async ({page, videoPlayer, tmpDir, server, toImpl}) => { + 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'); await page.goto(server.PREFIX + '/checkerboard.html');