@@ -2,42 +2,47 @@ import path from "path";
22import { Browser , Builder } from "selenium-webdriver" ;
33import { GenericContainer } from "testcontainers" ;
44import tmp from "tmp" ;
5+ import { getImage } from "../../../testcontainers/src/utils/test-helper" ;
56import { SELENIUM_VIDEO_IMAGE , SeleniumContainer } from "./selenium-container" ;
67
7- describe ( "SeleniumContainer" , { timeout : 180_000 } , ( ) => {
8- const browsers = [
9- [ "CHROME" , process . arch === "arm64" ? `seleniarm/standalone-chromium:112.0` : `selenium/standalone-chrome:112.0` ] ,
10- [ "FIREFOX" , process . arch === "arm64" ? `seleniarm/standalone-firefox:112.0` : `selenium/standalone-firefox:112.0` ] ,
11- ] as const ;
12-
13- browsers . forEach ( async ( [ browser , image ] ) => {
14- it ( `should work for ${ browser } ` , async ( ) => {
15- await using container = await new SeleniumContainer ( image ) . start ( ) ;
16- const driver = await new Builder ( ) . forBrowser ( Browser [ browser ] ) . usingServer ( container . getServerUrl ( ) ) . build ( ) ;
17-
18- await driver . get ( "https://testcontainers.com" ) ;
19- expect ( await driver . getTitle ( ) ) . toEqual ( "Testcontainers" ) ;
20-
21- await driver . quit ( ) ;
22- } ) ;
23-
24- it ( `should record video and save to disk for ${ browser } ` , async ( ) => {
25- const container = await new SeleniumContainer ( image ) . withRecording ( ) . start ( ) ;
26- const driver = await new Builder ( ) . forBrowser ( Browser [ browser ] ) . usingServer ( container . getServerUrl ( ) ) . build ( ) ;
27- await driver . get ( "https://testcontainers.com" ) ;
28- await driver . quit ( ) ;
29- const stoppedContainer = await container . stop ( ) ;
30-
31- const videoFilePath = tmp . fileSync ( { keep : false , prefix : `video-${ browser } ` , postfix : ".mp4" } ) . name ;
32- const videoFileName = path . basename ( videoFilePath ) ;
33- await stoppedContainer . saveRecording ( videoFilePath ) ;
34-
35- await using ffmpegContainer = await new GenericContainer ( SELENIUM_VIDEO_IMAGE )
36- . withCommand ( [ "sleep" , "infinity" ] )
37- . start ( ) ;
38- await ffmpegContainer . copyFilesToContainer ( [ { source : videoFilePath , target : `/tmp/${ videoFileName } ` } ] ) ;
39- const { exitCode } = await ffmpegContainer . exec ( [ "ffprobe" , `/tmp/${ videoFileName } ` ] ) ;
40- expect ( exitCode ) . toBe ( 0 ) ;
41- } ) ;
8+ const browsers = [
9+ [ "CHROME" , process . arch === "arm64" ? getImage ( __dirname , 1 ) : getImage ( __dirname , 0 ) ] ,
10+ [ "FIREFOX" , process . arch === "arm64" ? getImage ( __dirname , 3 ) : getImage ( __dirname , 2 ) ] ,
11+ ] as const ;
12+
13+ describe . for ( browsers ) ( "SeleniumContainer" , { timeout : 30_000 } , ( [ browser , image ] ) => {
14+ it ( `should work for ${ browser } ` , async ( ) => {
15+ // seleniumExample {
16+ await using container = await new SeleniumContainer ( image ) . start ( ) ;
17+
18+ const driver = await new Builder ( ) . forBrowser ( Browser [ browser ] ) . usingServer ( container . getServerUrl ( ) ) . build ( ) ;
19+ await driver . get ( "https://testcontainers.com" ) ;
20+ expect ( await driver . getTitle ( ) ) . toEqual ( "Testcontainers" ) ;
21+
22+ await driver . quit ( ) ;
23+ // }
24+ } ) ;
25+
26+ it ( `should record video and save to disk for ${ browser } ` , async ( ) => {
27+ // seleniumVideoExample {
28+ const container = await new SeleniumContainer ( image ) . withRecording ( ) . start ( ) ;
29+
30+ const driver = await new Builder ( ) . forBrowser ( Browser [ browser ] ) . usingServer ( container . getServerUrl ( ) ) . build ( ) ;
31+ await driver . get ( "https://testcontainers.com" ) ;
32+
33+ await driver . quit ( ) ;
34+ const stoppedContainer = await container . stop ( ) ;
35+
36+ const videoFilePath = tmp . fileSync ( { keep : false , prefix : `video-${ browser } ` , postfix : ".mp4" } ) . name ;
37+ const videoFileName = path . basename ( videoFilePath ) ;
38+ await stoppedContainer . saveRecording ( videoFilePath ) ;
39+
40+ await using ffmpegContainer = await new GenericContainer ( SELENIUM_VIDEO_IMAGE )
41+ . withCommand ( [ "sleep" , "infinity" ] )
42+ . start ( ) ;
43+ await ffmpegContainer . copyFilesToContainer ( [ { source : videoFilePath , target : `/tmp/${ videoFileName } ` } ] ) ;
44+ const { exitCode } = await ffmpegContainer . exec ( [ "ffprobe" , `/tmp/${ videoFileName } ` ] ) ;
45+ expect ( exitCode ) . toBe ( 0 ) ;
46+ // }
4247 } ) ;
4348} ) ;
0 commit comments