1- import { Builder , By , until , Key , WebDriver } from "selenium-webdriver" ;
1+ import { Builder , By , until , WebDriver } from "selenium-webdriver" ;
22import * as Chrome from "selenium-webdriver/chrome" ;
33import * as Path from "path" ;
44
55test ( "Selenium Chrome test" , async ( ) => {
6+ const driver = await setup ( ) ;
7+
8+ try {
9+ await waitForInstall ( driver ) ;
10+ // This video has no ads
11+ await goToVideo ( driver , "jNQXAC9IVRw" ) ;
12+
13+ await createSegment ( driver , "4" , "10.33" , "0:04.000 to 0:10.330" ) ;
14+
15+ await editSegments ( driver , 0 , "0:04.000" , "0:10.330" , "5" , "13.211" , "0:05.000 to 0:13.211" , false ) ;
16+
17+ await autoskipSegment ( driver , 5 , 13.211 ) ;
18+ } finally {
19+ await driver . quit ( ) ;
20+ }
21+ } , 100_000 ) ;
22+
23+ async function setup ( ) : Promise < WebDriver > {
624 const options = new Chrome . Options ( ) ;
725 options . addArguments ( "--load-extension=" + Path . join ( __dirname , "../dist/" ) ) ;
826 options . addArguments ( "--mute-audio" ) ;
@@ -13,23 +31,22 @@ test("Selenium Chrome test", async () => {
1331 implicit : 5000
1432 } ) ;
1533
16- try {
17- // Selenium only knows about the one tab it's on,
18- // so we can't wait for the help page to appear
19- await driver . sleep ( 3000 ) ;
20- // This video has no ads
21- await driver . get ( "https://www.youtube.com/watch?v=jNQXAC9IVRw" ) ;
22- await driver . wait ( until . elementIsVisible ( await driver . findElement ( By . className ( "ytd-video-primary-info-renderer" ) ) ) ) ;
34+ return driver ;
35+ }
2336
24- await createSegment ( driver , "4" , "10.33" , "0:04.000 to 0:10.330" ) ;
37+ async function waitForInstall ( driver : WebDriver , startingTab = 0 ) : Promise < void > {
38+ // Selenium only knows about the one tab it's on,
39+ // so we can't wait for the help page to appear
40+ await driver . sleep ( 3000 ) ;
2541
26- await editSegments ( driver , 0 , "0:04.000" , "0:10.330" , "5" , "13.211" , "0:05.000 to 0:13.211" , false ) ;
42+ const handles = await driver . getAllWindowHandles ( ) ;
43+ await driver . switchTo ( ) . window ( handles [ startingTab ] ) ;
44+ }
2745
28- await skipSegment ( driver , 5 , 13.211 ) ;
29- } finally {
30- await driver . quit ( ) ;
31- }
32- } , 100_000 ) ;
46+ async function goToVideo ( driver : WebDriver , videoId : string ) : Promise < void > {
47+ await driver . get ( "https://www.youtube.com/watch?v=" + videoId ) ;
48+ await driver . wait ( until . elementIsVisible ( await driver . findElement ( By . className ( "ytd-video-primary-info-renderer" ) ) ) ) ;
49+ }
3350
3451async function createSegment ( driver : WebDriver , startTime : string , endTime : string , expectedDisplayedTime : string ) : Promise < void > {
3552 const startSegmentButton = await driver . findElement ( By . id ( "startSegmentButton" ) ) ;
@@ -89,13 +106,13 @@ async function editSegments(driver: WebDriver, index: number, expectedStartTimeB
89106 await driver . wait ( until . elementTextIs ( sponsorTimeDisplay , expectedDisplayedTime ) ) ;
90107}
91108
92- async function skipSegment ( driver : WebDriver , startTime : number , endTime : number ) : Promise < void > {
109+ async function autoskipSegment ( driver : WebDriver , startTime : number , endTime : number ) : Promise < void > {
93110 const video = await driver . findElement ( By . css ( "video" ) ) ;
94111
95112 await driver . executeScript ( "document.querySelector('video').currentTime = " + ( startTime - 0.5 ) ) ;
96113 await driver . executeScript ( "document.querySelector('video').play()" ) ;
97114
98- await driver . sleep ( 1000 ) ;
115+ await driver . sleep ( 1300 ) ;
99116
100117 expect ( parseFloat ( await video . getAttribute ( "currentTime" ) ) ) . toBeGreaterThan ( endTime ) ;
101118 await driver . executeScript ( "document.querySelector('video').pause()" ) ;
0 commit comments