From c8bc2a1af698c21ea16ba56f077e507412f6b6ab Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 26 Aug 2020 14:38:34 +0200 Subject: Fix e2e tests --- client/e2e/protractor.conf.js | 6 ++++-- client/e2e/src/po/player.po.ts | 29 ++++++++++++----------------- client/e2e/src/utils.ts | 8 ++++++-- client/e2e/src/videos.e2e-spec.ts | 17 +++++++++++------ 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/client/e2e/protractor.conf.js b/client/e2e/protractor.conf.js index 47585afc5..be303bce4 100644 --- a/client/e2e/protractor.conf.js +++ b/client/e2e/protractor.conf.js @@ -5,7 +5,7 @@ const {SpecReporter} = require('jasmine-spec-reporter') exports.config = { allScriptsTimeout: 25000, - specs: ['./src/**/*.e2e-spec.ts'], + specs: [ './src/**/*.e2e-spec.ts' ], seleniumAddress: 'http://hub-cloud.browserstack.com/wd/hub', commonCapabilities: { @@ -85,7 +85,9 @@ exports.config = { require('ts-node').register({ project: require('path').join(__dirname, './tsconfig.e2e.json') }) - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })) + jasmine.getEnv().addReporter(new SpecReporter({ + spec: { displayStacktrace: 'raw' } + })) } } diff --git a/client/e2e/src/po/player.po.ts b/client/e2e/src/po/player.po.ts index bc61704fb..d18d81f16 100644 --- a/client/e2e/src/po/player.po.ts +++ b/client/e2e/src/po/player.po.ts @@ -1,5 +1,5 @@ -import { browser, by, element, ExpectedConditions } from 'protractor' -import { browserSleep, isIOS, isMobileDevice } from '../utils' +import { browser, by, element } from 'protractor' +import { browserSleep, isIOS, isMobileDevice, isSafari } from '../utils' export class PlayerPage { @@ -17,27 +17,22 @@ export class PlayerPage { } async playAndPauseVideo (isAutoplay: boolean) { - // Autoplay is disabled on iOS - if (isAutoplay === false || await isIOS()) { + const videojsEl = element(by.css('div.video-js')) + await browser.wait(browser.ExpectedConditions.elementToBeClickable(videojsEl)) + + // Autoplay is disabled on iOS and Safari + if (await isIOS() || await isSafari() || await isMobileDevice()) { + // We can't play the video using protractor if it is not muted + await browser.executeScript(`document.querySelector('video').muted = true`) + await this.clickOnPlayButton() + } else if (isAutoplay === false) { await this.clickOnPlayButton() } await browserSleep(2000) await browser.wait(browser.ExpectedConditions.invisibilityOf(element(by.css('.vjs-loading-spinner')))) - const videojsEl = element(by.css('div.video-js')) - await browser.wait(browser.ExpectedConditions.elementToBeClickable(videojsEl)) - - if (await isMobileDevice()) { - await browserSleep(5000) - - // On Android, we need to click twice on "play" (BrowserStack particularity) - if (!await isIOS()) await videojsEl.click() - } - - browser.ignoreSynchronization = false - await browserSleep(7000) - browser.ignoreSynchronization = true + await browserSleep(2000) await videojsEl.click() } diff --git a/client/e2e/src/utils.ts b/client/e2e/src/utils.ts index e19da6402..a9d30c03a 100644 --- a/client/e2e/src/utils.ts +++ b/client/e2e/src/utils.ts @@ -1,11 +1,15 @@ import { browser } from 'protractor' async function browserSleep (amount: number) { - if (await isIOS()) browser.ignoreSynchronization = false + const oldValue = await browser.waitForAngularEnabled() + + // iOS does not seem to work with protractor + // https://github.com/angular/protractor/issues/2840 + if (await isIOS()) browser.waitForAngularEnabled(true) await browser.sleep(amount) - if (await isIOS()) browser.ignoreSynchronization = true + if (await isIOS()) browser.waitForAngularEnabled(oldValue) } async function isMobileDevice () { diff --git a/client/e2e/src/videos.e2e-spec.ts b/client/e2e/src/videos.e2e-spec.ts index d8af1885f..d9d2cb9b9 100644 --- a/client/e2e/src/videos.e2e-spec.ts +++ b/client/e2e/src/videos.e2e-spec.ts @@ -43,7 +43,7 @@ describe('Videos workflow', () => { if (await isIOS()) { // iOS does not seem to work with protractor // https://github.com/angular/protractor/issues/2840 - browser.ignoreSynchronization = true + browser.waitForAngularEnabled(false) console.log('iOS detected') } else if (await isMobileDevice()) { @@ -111,6 +111,7 @@ describe('Videos workflow', () => { }) it('Should watch the associated embed video', async () => { + const oldValue = await browser.waitForAngularEnabled() await browser.waitForAngularEnabled(false) await videoWatchPage.goOnAssociatedEmbed() @@ -118,10 +119,11 @@ describe('Videos workflow', () => { await playerPage.playAndPauseVideo(false) expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2) - await browser.waitForAngularEnabled(true) + await browser.waitForAngularEnabled(oldValue) }) it('Should watch the p2p media loader embed video', async () => { + const oldValue = await browser.waitForAngularEnabled() await browser.waitForAngularEnabled(false) await videoWatchPage.goOnP2PMediaLoaderEmbed() @@ -129,7 +131,7 @@ describe('Videos workflow', () => { await playerPage.playAndPauseVideo(false) expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2) - await browser.waitForAngularEnabled(true) + await browser.waitForAngularEnabled(oldValue) }) it('Should update the video', async () => { @@ -185,11 +187,12 @@ describe('Videos workflow', () => { await myAccountPage.playPlaylist() + const oldValue = await browser.waitForAngularEnabled() await browser.waitForAngularEnabled(false) await videoWatchPage.waitUntilVideoName(video2Name, 20000 * 1000) - await browser.waitForAngularEnabled(true) + await browser.waitForAngularEnabled(oldValue) }) it('Should watch the webtorrent playlist in the embed', async () => { @@ -198,6 +201,7 @@ describe('Videos workflow', () => { const accessToken = await browser.executeScript(`return window.localStorage.getItem('access_token');`) const refreshToken = await browser.executeScript(`return window.localStorage.getItem('refresh_token');`) + const oldValue = await browser.waitForAngularEnabled() await browser.waitForAngularEnabled(false) await myAccountPage.goOnAssociatedPlaylistEmbed() @@ -212,10 +216,11 @@ describe('Videos workflow', () => { await playerPage.waitUntilPlaylistInfo('2/2') - await browser.waitForAngularEnabled(true) + await browser.waitForAngularEnabled(oldValue) }) it('Should watch the HLS playlist in the embed', async () => { + const oldValue = await browser.waitForAngularEnabled() await browser.waitForAngularEnabled(false) await videoWatchPage.goOnP2PMediaLoaderPlaylistEmbed() @@ -224,7 +229,7 @@ describe('Videos workflow', () => { await playerPage.waitUntilPlaylistInfo('2/2') - await browser.waitForAngularEnabled(true) + await browser.waitForAngularEnabled(oldValue) }) it('Should delete the video 2', async () => { -- cgit v1.2.3