1 import { by, element, browser } from 'protractor'
3 export class VideoWatchPage {
4 async goOnVideosList (isIphoneDevice: boolean, isSafari: boolean) {
7 if (isIphoneDevice === true) {
8 // Local testing is buggy :/
9 url = 'https://peertube2.cpy.re/videos/local'
11 url = '/videos/recently-added'
14 await browser.get(url)
16 // Waiting the following element does not work on Safari...
17 if (isSafari === true) return browser.sleep(3000)
19 const elem = element.all(by.css('.videos .video-miniature .video-miniature-name')).first()
20 return browser.wait(browser.ExpectedConditions.visibilityOf(elem))
23 getVideosListName () {
24 return element.all(by.css('.videos .video-miniature .video-miniature-name'))
26 .then((texts: any) => texts.map(t => t.trim()))
29 waitWatchVideoName (videoName: string) {
30 const elem = element(by.css('.video-info .video-info-name'))
31 return browser.wait(browser.ExpectedConditions.textToBePresentInElement(elem, videoName))
34 getWatchVideoPlayerCurrentTime () {
35 return element(by.css('.video-js .vjs-current-time-display'))
37 .then((t: string) => t.split(':')[1])
38 .then(seconds => parseInt(seconds, 10))
41 async pauseVideo (pauseAfterMs: number, isAutoplay: boolean, isSafari: boolean) {
42 if (isAutoplay === false) {
43 const playButton = element(by.css('.vjs-big-play-button'))
44 await browser.wait(browser.ExpectedConditions.elementToBeClickable(playButton))
45 await playButton.click()
48 if (isSafari === true) {
49 await browser.sleep(1000)
50 await element(by.css('.vjs-play-control')).click()
53 await browser.sleep(1000)
54 await browser.wait(browser.ExpectedConditions.invisibilityOf(element(by.css('.vjs-loading-spinner'))))
56 const el = element(by.css('div.video-js'))
57 await browser.wait(browser.ExpectedConditions.elementToBeClickable(el))
59 await browser.sleep(pauseAfterMs)
64 async clickOnVideo (videoName: string) {
65 const video = element(by.css('.videos .video-miniature .video-thumbnail[title="' + videoName + '"]'))
66 await browser.wait(browser.ExpectedConditions.elementToBeClickable(video))
69 await browser.wait(browser.ExpectedConditions.urlContains('/watch/'))
72 async clickOnFirstVideo () {
73 const video = element.all(by.css('.videos .video-miniature .video-miniature-name')).first()
74 await browser.wait(browser.ExpectedConditions.elementToBeClickable(video))
75 const textToReturn = video.getText()
79 await browser.wait(browser.ExpectedConditions.urlContains('/watch/'))
83 async goOnAssociatedEmbed () {
84 let url = await browser.getCurrentUrl()
85 url = url.replace('/watch/', '/embed/')
86 url = url.replace(':3333', ':9001')
88 return browser.get(url)