Verified Commit c8bc2a1a authored by Chocobozzz's avatar Chocobozzz
Browse files

Fix e2e tests

parent 2199aaef
......@@ -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' }
}))
}
}
......
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()
}
......
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 () {
......
......@@ -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 () => {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment