]>
Commit | Line | Data |
---|---|---|
b528582d | 1 | import { browser, by, element } from 'protractor' |
5f92c4dc C |
2 | |
3 | export class VideoWatchPage { | |
1fad099d | 4 | async goOnVideosList (isMobileDevice: boolean, isSafari: boolean) { |
0b33c520 C |
5 | let url: string |
6 | ||
1fad099d C |
7 | // We did not upload a file on a mobile device |
8 | if (isMobileDevice === true || isSafari === true) { | |
0b33c520 C |
9 | url = 'https://peertube2.cpy.re/videos/local' |
10 | } else { | |
11 | url = '/videos/recently-added' | |
12 | } | |
5f92c4dc C |
13 | |
14 | await browser.get(url) | |
d1bd87e0 C |
15 | |
16 | // Waiting the following element does not work on Safari... | |
17 | if (isSafari === true) return browser.sleep(3000) | |
18 | ||
19 | const elem = element.all(by.css('.videos .video-miniature .video-miniature-name')).first() | |
20 | return browser.wait(browser.ExpectedConditions.visibilityOf(elem)) | |
5f92c4dc C |
21 | } |
22 | ||
23 | getVideosListName () { | |
d1bd87e0 | 24 | return element.all(by.css('.videos .video-miniature .video-miniature-name')) |
0b33c520 C |
25 | .getText() |
26 | .then((texts: any) => texts.map(t => t.trim())) | |
5f92c4dc C |
27 | } |
28 | ||
1fad099d | 29 | waitWatchVideoName (videoName: string, isSafari: boolean) { |
5f92c4dc | 30 | const elem = element(by.css('.video-info .video-info-name')) |
1fad099d C |
31 | |
32 | if (isSafari) return browser.sleep(5000) | |
33 | ||
5f92c4dc C |
34 | return browser.wait(browser.ExpectedConditions.textToBePresentInElement(elem, videoName)) |
35 | } | |
36 | ||
37 | getWatchVideoPlayerCurrentTime () { | |
38 | return element(by.css('.video-js .vjs-current-time-display')) | |
39 | .getText() | |
40 | .then((t: string) => t.split(':')[1]) | |
41 | .then(seconds => parseInt(seconds, 10)) | |
42 | } | |
43 | ||
b528582d | 44 | async pauseVideo (isAutoplay: boolean) { |
d1bd87e0 C |
45 | if (isAutoplay === false) { |
46 | const playButton = element(by.css('.vjs-big-play-button')) | |
47 | await browser.wait(browser.ExpectedConditions.elementToBeClickable(playButton)) | |
48 | await playButton.click() | |
49 | } | |
50 | ||
d1bd87e0 | 51 | await browser.sleep(1000) |
cd4d7a2c C |
52 | await browser.wait(browser.ExpectedConditions.invisibilityOf(element(by.css('.vjs-loading-spinner')))) |
53 | ||
1fad099d C |
54 | const videojsEl = element(by.css('div.video-js')) |
55 | await browser.wait(browser.ExpectedConditions.elementToBeClickable(videojsEl)) | |
5f92c4dc | 56 | |
1fad099d | 57 | await browser.sleep(7000) |
cd4d7a2c | 58 | |
1fad099d | 59 | return videojsEl.click() |
5f92c4dc C |
60 | } |
61 | ||
cd4d7a2c C |
62 | async clickOnVideo (videoName: string) { |
63 | const video = element(by.css('.videos .video-miniature .video-thumbnail[title="' + videoName + '"]')) | |
0b33c520 C |
64 | await browser.wait(browser.ExpectedConditions.elementToBeClickable(video)) |
65 | await video.click() | |
66 | ||
67 | await browser.wait(browser.ExpectedConditions.urlContains('/watch/')) | |
68 | } | |
69 | ||
70 | async clickOnFirstVideo () { | |
1fad099d C |
71 | const video = element.all(by.css('.videos .video-miniature .video-thumbnail')).first() |
72 | const videoName = element.all(by.css('.videos .video-miniature .video-miniature-name')).first() | |
73 | ||
74 | // Don't know why but the expectation fails on Safari | |
0b33c520 | 75 | await browser.wait(browser.ExpectedConditions.elementToBeClickable(video)) |
5f92c4dc | 76 | |
1fad099d | 77 | const textToReturn = videoName.getText() |
5f92c4dc C |
78 | await video.click() |
79 | ||
80 | await browser.wait(browser.ExpectedConditions.urlContains('/watch/')) | |
0b33c520 | 81 | return textToReturn |
5f92c4dc C |
82 | } |
83 | ||
d1bd87e0 C |
84 | async goOnAssociatedEmbed () { |
85 | let url = await browser.getCurrentUrl() | |
86 | url = url.replace('/watch/', '/embed/') | |
87 | url = url.replace(':3333', ':9001') | |
88 | ||
89 | return browser.get(url) | |
5f92c4dc C |
90 | } |
91 | } |