1 import { browserSleep, FIXTURE_URLS, go } from '../utils'
3 export class VideoWatchPage {
5 constructor (private isMobileDevice: boolean, private isSafari: boolean) {
9 waitWatchVideoName (videoName: string) {
10 if (this.isSafari) return browserSleep(5000)
12 // On mobile we display the first node, on desktop the second
13 const index = this.isMobileDevice ? 0 : 1
15 return browser.waitUntil(async () => {
16 return (await $$('.video-info .video-info-name')[index].getText()).includes(videoName)
21 return this.getVideoNameElement().then(e => e.getText())
25 return $('.attribute-privacy .attribute-value').getText()
29 return $('.attribute-licence .attribute-value').getText()
32 async isDownloadEnabled () {
33 await this.clickOnMoreDropdownIcon()
35 return $('.dropdown-item .icon-download').isExisting()
38 areCommentsEnabled () {
39 return $('my-video-comment-add').isExisting()
42 isPrivacyWarningDisplayed () {
43 return $('my-privacy-concerns').isDisplayed()
46 async goOnAssociatedEmbed () {
47 let url = await browser.getUrl()
48 url = url.replace('/w/', '/videos/embed/')
49 url = url.replace(':3333', ':9001')
52 await this.waitEmbedForDisplayed()
55 waitEmbedForDisplayed () {
56 return $('.vjs-big-play-button').waitForDisplayed()
59 isEmbedWarningDisplayed () {
60 return $('.peertube-dock-description').isDisplayed()
63 goOnP2PMediaLoaderEmbed () {
64 return go(FIXTURE_URLS.HLS_EMBED)
67 goOnP2PMediaLoaderPlaylistEmbed () {
68 return go(FIXTURE_URLS.HLS_PLAYLIST_EMBED)
71 async clickOnUpdate () {
72 await this.clickOnMoreDropdownIcon()
74 const items = await $$('.dropdown-menu.show .dropdown-item')
76 for (const item of items) {
77 const href = await item.getAttribute('href')
79 if (href?.includes('/update/')) {
87 return $('.action-button-save').click()
90 async createPlaylist (name: string) {
91 const newPlaylistButton = () => $('.new-playlist-button')
93 await newPlaylistButton().waitForClickable()
94 await newPlaylistButton().click()
96 const displayName = () => $('#displayName')
98 await displayName().waitForDisplayed()
99 await displayName().setValue(name)
101 return $('.new-playlist-block input[type=submit]').click()
104 async saveToPlaylist (name: string) {
105 const playlist = () => $('my-video-add-to-playlist').$(`.playlist=${name}`)
107 await playlist().waitForDisplayed()
109 return playlist().click()
112 waitUntilVideoName (name: string, maxTime: number) {
113 return browser.waitUntil(async () => {
114 return (await this.getVideoName()) === name
115 }, { timeout: maxTime })
118 async clickOnMoreDropdownIcon () {
119 const dropdown = $('my-video-actions-dropdown .action-button')
120 await dropdown.click()
122 await $('.dropdown-menu.show .dropdown-item').waitForDisplayed()
125 private async getVideoNameElement () {
126 // We have 2 video info name block, pick the first that is not empty
127 const elem = async () => {
128 const elems = await $$('.video-info-first-row .video-info-name').filter(e => e.isDisplayed())
133 await browser.waitUntil(async () => {
134 const e = await elem()
136 return e?.isDisplayed()