Skip to content

SerhiiMaksymiv/gost

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gost

Testing framework based on W3C Driver Protocol

flowchart LR
    Browser["`
      Chrome
      Firefox
    `"]
    Webdriver["`
      Chromedriver
      Geckodriver
    `"]
    WebService["`Web Service`"]
    WebClient["`Web Client`"]
    Tests["`Tests`"]
    Browser<-->Webdriver;
    Webdriver<-->WebService;
    WebService<-->WebClient;
    WebClient<-->Tests;
Loading

Support

Chrome and Firefox

So far, browser/driver versioning done manually. In order to run tests you need to have chromedriver/geckodriver. In my case, chromedriver and geckodriver binaries added to the PATH.

var GeckoDriverPath string = "geckodriver"
var ChromeDriverPath string = "chromedriver"
...
...
...
if cap.Capabilities.AlwaysMatch.BrowserName == "firefox" {
    cmdArgs = append(cmdArgs, GeckoDriverPath, "--port", "4444", "--log", "trace")
} else {
    cmdArgs = append(cmdArgs, ChromeDriverPath, fmt.Sprintf("--port=%s", "4444"))
}

Configuration

Congifuration is done through .config file in the root directory. This file can be named anything, e.g.: ".env", "settings", "driver.conf", as long as it's name is set in config package and it's variables are correctly referenced.

If no '.config' file defined, default values will be set:

func DefaultConfig() *WebConfig {
  return &WebConfig{

    // WebServer default address
    WebServerAddr:    "http://localhost:8080",

    // WebDriver default address
    WebDriverAddr:    "http://localhost:4444",

    // File name in the root of project where webdriver logs stored
    // Each new test run will override previous one
    DriverLogsFile:   "../driver.logs",

    // When set to 'true' screenshot will be made
    // on each failed 'find element' call
    ScreenshotOnFail: true,

    // Defines explicit timeout in seconds to wait for webelement
    // WebService will retry to find element
    // within this timeframe, i.e. 20 seconds
    WaitForTimeout:   20,

    // Defines a pause in milliseconds
    // between each retry calls to POST /session/{sessionId}/element
    WaitForInterval:  200,

    // Directory (in this case a root)
    // where you can store .js scripts
    JsFilesPath:      "../",

    // Directory where screenshots will be stored
    // after each failed attempt to find element
    ScreenshotsPath:  "../",

    // Directory where Chrome record.json files are stored
    RecordsPath:      "../",
  }
}

Usage

Run test with go test command:

go test -v -count=1 test/driver.go -run TestDriver

-v, shows test output in verbose mode
-count=1, discards test cache
test/driver/driver_test.go, specifies test directory
-run, pattern for test name

Run tests with Makefile:

make driver

TestDriver

func TestDriver(t *testing.T) {

    // initializes service, client, config, and starts driver
    d, tear := gost.Gost(
        capabilities.Browser("chrome"),
    )

    // quits driver and gracefully shuts down service
    defer tear()

    // opens new tab
    d.Open("https://www.google.com")

    // finds and clicks on element 
    // with text/value/aria-label "Gmail" if exists,
    // otherwise will panic and make a screenshot of the page
    d.Cl("Gmail")
}

Other tests:

test
|-- actions_test.go
|-- click_test.go
|-- command_test.go
|-- error_test.go
|-- find_test.go
|-- home_test.go
|-- keys_test.go
|-- quit_test.go
|-- record_test.go
|-- screenshot_test.go
|-- script_test.go
|-- service_test.go
|-- session_test.go
|-- status_test.go
|-- steps_test.go
|-- tab_test.go
|-- text_test.go
`-- url_test.go

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published