github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/webdriver/firefox.go (about) 1 package webdriver 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "path/filepath" 8 9 "github.com/tebeka/selenium" 10 "github.com/tebeka/selenium/firefox" 11 ) 12 13 var ( 14 geckoDriverPath = flag.String("geckodriver_path", "", "Path to the geckodriver binary") 15 firefoxPath = flag.String("firefox_path", "", "Path to the firefox binary") 16 ) 17 18 // FirefoxWebDriver starts up GeckoDriver on the given port. 19 func FirefoxWebDriver(port int, options []selenium.ServiceOption) (*selenium.Service, selenium.WebDriver, error) { 20 if *firefoxPath == "" { 21 panic("-firefox_path not specified") 22 } 23 if *geckoDriverPath == "" { 24 panic("-geckodriver_path not specified") 25 } 26 27 // Specify the path to GeckoDriver in order to use Firefox. 28 options = append(options, selenium.GeckoDriver(*geckoDriverPath)) 29 30 service, err := selenium.NewGeckoDriverService(*geckoDriverPath, port, options...) 31 if err != nil { 32 log.Println("Failed to start GeckoDriver service: " + err.Error()) 33 panic(err) 34 } 35 36 // Connect to the WebDriver instance running locally. 37 seleniumCapabilities := selenium.Capabilities{ 38 "browserName": "firefox", 39 } 40 41 firefoxCapabilities := firefox.Capabilities{} 42 firefoxAbsPath, err := filepath.Abs(*firefoxPath) 43 if err != nil { 44 panic(err) 45 } 46 firefoxCapabilities.Binary = firefoxAbsPath 47 seleniumCapabilities.AddFirefox(firefoxCapabilities) 48 49 // geckodriver does not have a URL prefix. 50 wd, err := selenium.NewRemote( 51 seleniumCapabilities, 52 fmt.Sprintf("http://127.0.0.1:%d", port)) 53 if err != nil { 54 log.Println("Failed to start selenium remote with capabilites:") 55 log.Printf("%v\n", seleniumCapabilities) 56 log.Println(err.Error()) 57 } 58 return service, wd, err 59 }