X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fe2e%2Fsrc%2Fpo%2Fvideo-watch.po.ts;h=cecda3a8b941a1092d558294ccf10bda4952acc6;hb=a9bfa85d2cdf13670aaced740da5b493fbeddfce;hp=6d91d241e19d391f4d7a913e710924abbc9e8493;hpb=cf21b2cbef61929177b9c09b5e017c3b7eb8535d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/e2e/src/po/video-watch.po.ts b/client/e2e/src/po/video-watch.po.ts index 6d91d241e..cecda3a8b 100644 --- a/client/e2e/src/po/video-watch.po.ts +++ b/client/e2e/src/po/video-watch.po.ts @@ -1,131 +1,139 @@ -import { browser, by, element, ElementFinder, ExpectedConditions } from 'protractor' -import { browserSleep, isMobileDevice } from '../utils' +import { browserSleep, FIXTURE_URLS, go } from '../utils' export class VideoWatchPage { - async goOnVideosList (isMobileDevice: boolean, isSafari: boolean) { - let url: string - - // We did not upload a file on a mobile device - if (isMobileDevice === true || isSafari === true) { - url = 'https://peertube2.cpy.re/videos/local' - } else { - url = '/videos/recently-added' - } - - await browser.get(url, 20000) - // Waiting the following element does not work on Safari... - if (isSafari) return browserSleep(3000) - - const elem = element.all(by.css('.videos .video-miniature .video-miniature-name')).first() - return browser.wait(browser.ExpectedConditions.visibilityOf(elem)) - } + constructor (private isMobileDevice: boolean, private isSafari: boolean) { - getVideosListName () { - return element.all(by.css('.videos .video-miniature .video-miniature-name')) - .getText() - .then((texts: any) => texts.map((t: any) => t.trim())) } - waitWatchVideoName (videoName: string, isMobileDevice: boolean, isSafari: boolean) { - if (isSafari) return browserSleep(5000) + waitWatchVideoName (videoName: string) { + if (this.isSafari) return browserSleep(5000) // On mobile we display the first node, on desktop the second - const index = isMobileDevice ? 0 : 1 + const index = this.isMobileDevice ? 0 : 1 - const elem = element.all(by.css('.video-info .video-info-name')).get(index) - return browser.wait(browser.ExpectedConditions.textToBePresentInElement(elem, videoName)) + return browser.waitUntil(async () => { + return (await $$('.video-info .video-info-name')[index].getText()).includes(videoName) + }) } getVideoName () { - return this.getVideoNameElement().getText() + return this.getVideoNameElement().then(e => e.getText()) } - async goOnAssociatedEmbed () { - let url = await browser.getCurrentUrl() - url = url.replace('/w/', '/embed/') - url = url.replace(':3333', ':9001') + getPrivacy () { + return $('.attribute-privacy .attribute-value').getText() + } - return browser.get(url) + getLicence () { + return $('.attribute-licence .attribute-value').getText() } - async goOnP2PMediaLoaderEmbed () { - return browser.get('https://peertube2.cpy.re/videos/embed/969bf103-7818-43b5-94a0-de159e13de50') + async isDownloadEnabled () { + await this.clickOnMoreDropdownIcon() + + return $('.dropdown-item .icon-download').isExisting() } - async goOnP2PMediaLoaderPlaylistEmbed () { - return browser.get('https://peertube2.cpy.re/video-playlists/embed/73804a40-da9a-40c2-b1eb-2c6d9eec8f0a') + areCommentsEnabled () { + return $('my-video-comment-add').isExisting() } - async clickOnVideo (videoName: string) { - const video = element.all(by.css('.videos .video-miniature .video-miniature-name')) - .filter(e => e.getText().then(t => t === videoName )) - .first() + isPrivacyWarningDisplayed () { + return $('my-privacy-concerns').isDisplayed() + } - await browser.wait(browser.ExpectedConditions.elementToBeClickable(video)) - await video.click() + async goOnAssociatedEmbed () { + let url = await browser.getUrl() + url = url.replace('/w/', '/videos/embed/') + url = url.replace(':3333', ':9001') - await browser.wait(browser.ExpectedConditions.urlContains('/w/')) + await go(url) + await $('.vjs-big-play-button').waitForDisplayed() } - async clickOnFirstVideo () { - const video = element.all(by.css('.videos .video-miniature .video-thumbnail')).first() - const videoName = element.all(by.css('.videos .video-miniature .video-miniature-name')).first() + async isEmbedWarningDisplayed () { + const text = await $('.vjs-dock-description').getText() - // Don't know why but the expectation fails on Safari - await browser.wait(browser.ExpectedConditions.elementToBeClickable(video)) + return !!text.trim() + } - const textToReturn = videoName.getText() - await video.click() + goOnP2PMediaLoaderEmbed () { + return go(FIXTURE_URLS.HLS_EMBED) + } - await browser.wait(browser.ExpectedConditions.urlContains('/w/')) - return textToReturn + goOnP2PMediaLoaderPlaylistEmbed () { + return go(FIXTURE_URLS.HLS_PLAYLIST_EMBED) } async clickOnUpdate () { - const dropdown = element(by.css('my-video-actions-dropdown .action-button')) - await dropdown.click() + await this.clickOnMoreDropdownIcon() - const items: ElementFinder[] = await element.all(by.css('.dropdown-menu.show .dropdown-item')) + const items = await $$('.dropdown-menu.show .dropdown-item') for (const item of items) { const href = await item.getAttribute('href') - if (href && href.includes('/update/')) { + if (href?.includes('/update/')) { await item.click() return } } } - async clickOnSave () { - return element(by.css('.action-button-save')).click() + clickOnSave () { + return $('.action-button-save').click() } async createPlaylist (name: string) { - await element(by.css('.new-playlist-button')).click() + const newPlaylistButton = () => $('.new-playlist-button') + + await newPlaylistButton().waitForClickable() + await newPlaylistButton().click() - await element(by.css('#displayName')).sendKeys(name) + const displayName = () => $('#displayName') - return element(by.css('.new-playlist-block input[type=submit]')).click() + await displayName().waitForDisplayed() + await displayName().setValue(name) + + return $('.new-playlist-block input[type=submit]').click() } async saveToPlaylist (name: string) { - return element.all(by.css('my-video-add-to-playlist .playlist')) - .filter(p => p.getText().then(t => t === name)) - .click() + const playlist = () => $('my-video-add-to-playlist').$(`.playlist=${name}`) + + await playlist().waitForDisplayed() + + return playlist().click() } waitUntilVideoName (name: string, maxTime: number) { - const elem = this.getVideoNameElement() + return browser.waitUntil(async () => { + return (await this.getVideoName()) === name + }, { timeout: maxTime }) + } - return browser.wait(ExpectedConditions.textToBePresentInElement(elem, name), maxTime) + async clickOnMoreDropdownIcon () { + const dropdown = $('my-video-actions-dropdown .action-button') + await dropdown.click() + + await $('.dropdown-menu.show .dropdown-item').waitForDisplayed() } - private getVideoNameElement () { + private async getVideoNameElement () { // We have 2 video info name block, pick the first that is not empty - return element.all(by.css('.video-info-first-row .video-info-name')) - .filter(e => e.getText().then(t => !!t)) - .first() + const elem = async () => { + const elems = await $$('.video-info-first-row .video-info-name').filter(e => e.isDisplayed()) + + return elems[0] + } + + await browser.waitUntil(async () => { + const e = await elem() + + return e?.isDisplayed() + }) + + return elem() } }