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  }