go-selenium

Selenium WebDriver client for Go

  • Owner: sourcegraph/go-selenium
  • Platform:
  • License:: Other
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

==============================================
go-selenium - Selenium WebDriver client for Go

go-selenium is a Selenium WebDriver client for Go.

Note: the public API is experimental and subject to change until further notice.

Usage

Documentation: go-selenium on Sourcegraph.

Example: see example_test.go:

package selenium_test

import (
	"fmt"
	"sourcegraph.com/sourcegraph/go-selenium"
)

func ExampleFindElement() {
	var webDriver selenium.WebDriver
	var err error
	caps := selenium.Capabilities(map[string]interface{}{"browserName": "firefox"})
	if webDriver, err = selenium.NewRemote(caps, "http://localhost:4444/wd/hub"); err != nil {
		fmt.Printf("Failed to open session: %s\n", err)
		return
	}
	defer webDriver.Quit()

	err = webDriver.Get("https://sourcegraph.com/sourcegraph/go-selenium")
	if err != nil {
		fmt.Printf("Failed to load page: %s\n", err)
		return
	}

	if title, err := webDriver.Title(); err == nil {
		fmt.Printf("Page title: %s\n", title)
	} else {
		fmt.Printf("Failed to get page title: %s", err)
		return
	}

	var elem selenium.WebElement
	elem, err = webDriver.FindElement(selenium.ByCSSSelector, ".repo .name")
	if err != nil {
		fmt.Printf("Failed to find element: %s\n", err)
		return
	}

	if text, err := elem.Text(); err == nil {
		fmt.Printf("Repository: %s\n", text)
	} else {
		fmt.Printf("Failed to get text of element: %s\n", err)
		return
	}

	// output:
	// Page title: go-selenium - Sourcegraph
	// Repository: go-selenium
}

The WebDriverT and WebElementT interfaces make test code cleaner. Each method in
WebDriver and WebElement has a corresponding method in the *T interfaces that omits the error
from the return values and instead calls t.Fatalf upon encountering an error. For example:

package mytest

import (
  "sourcegraph.com/sourcegraph/go-selenium"
  "testing"
)

var caps selenium.Capabilities
var executorURL = "http://localhost:4444/wd/hub"

// An example test using the WebDriverT and WebElementT interfaces. If you use the non-*T
// interfaces, you must perform error checking that is tangential to what you are testing,
// and you have to destructure results from method calls.
func TestWithT(t *testing.T) {
  wd, _ := selenium.NewRemote(caps, executor)

  // Call .T(t) to obtain a WebDriverT from a WebDriver (or to obtain a WebElementT from
  // a WebElement).
  wdt := wd.T(t)

  // Calls `t.Fatalf("Get: %s", err)` upon failure.
  wdt.Get("http://example.com")

  // Calls `t.Fatalf("FindElement(by=%q, value=%q): %s", by, value, err)` upon failure.
  elem := wdt.FindElement(selenium.ByCSSSelector, ".foo")

  // Calls `t.Fatalf("Text: %s", err)` if the `.Text()` call fails.
  if elem.Text() != "bar" {
    t.Fatalf("want elem text %q, got %q", "bar", elem.Text())
  }
}

See remote_test.go for more usage examples.

Running tests

Start Selenium WebDriver and run go test. To see all available options, run go test -test.h.

TODO

  • Support Firefox profiles

Contributors

License

go-selenium is distributed under the Eclipse Public License.

Main metrics

Overview
Name With Ownersourcegraph/go-selenium
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:Other
所有者活动
Created At2013-05-31 11:20:20
Pushed At2024-02-02 17:33:53
Last Commit At2017-01-13 08:52:44
Release Count11
Last Release Name0.6.0 (Posted on )
First Release Name0.1.0 (Posted on )
用户参与
Stargazers Count365
Watchers Count93
Fork Count73
Commits Count189
Has Issues Enabled
Issues Count25
Issue Open Count13
Pull Requests Count13
Pull Requests Open Count2
Pull Requests Close Count6
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private