Skip to content
This repository has been archived by the owner on May 17, 2018. It is now read-only.

anotherchrisberry/poly-driver

Repository files navigation

#PolyDriver - a flexible WebDriver implementation

This Grails plugin provides an easily configured multi-browser WebDriver implementation, along with simple mechanisms to declare browser preference and allow browser switching between tests.

To configure multiple drivers, declare them in your GebConfig.groovy script:

import org.openqa.selenium.*

driver = {
    FirefoxDriver firefoxDriver = new FirefoxDriver()
    SafariDriver safariDriver = new SafariDriver()
    new PolyDriver(mainDriver: firefoxDriver, alternateDrivers: ['safari' : safariDriver])
}

When you run your tests, they will execute using the main driver.

This plugin is written specifically with Spock and Geb in mind.

Most Geb specifications extend the GebReportingSpec. To enable automatic driver selection, your specification class should extend PolyDriverGebReportingSpec:

class SomeFeatureFunctionalSpec extends GebReportingSpec {
	...
}

becomes:

import com.polydriver.spec.PolyDriverGebReportingSpec

class SomeFeatureFunctionalSpec extends PolyDriverGebReportingSpec {
	...
}

If you want this test to run in Safari, annotate it with @PreferredDriver:

import com.polydriver.spec.PolyDriverGebReportingSpec
import com.polydriver.driver.PreferredDriver
import com.polydriver.driver.Driver

@PreferredDriver('safari')
class SomeFeatureFunctionalSpec extends PolyDriverGebReportingSpec {
	...
}

Now, all tests in this class will run in Safari.

You can specify a list of preferred browsers - the driver will try to match them in the order specified, falling back to the mainDriver if no preferred drivers are configured:

import com.polydriver.spec.PolyDriverGebReportingSpec
import com.polydriver.driver.PreferredDriver
import com.polydriver.driver.Driver

@PreferredDriver(['safari', 'chrome' 'phantomJS'])
class SomeFeatureFunctionalSpec extends PolyDriverGebReportingSpec {
	// depending on which drivers are configured, will try Safari, then Chrome, then PhantomJS
	...
}

##Notes on included WebDriver implementations To provide the configuration mechanism, the plugin includes a number of WebDriver implementations. You may want to exclude these dependencies from your application and include different versions of them. I will try to keep this up to date with the latest versions, but they change frequently. Feel free to submit a pull request if they seem out of date.

The 0.1 release of this plugin included a bunch of drivers, which was brittle and kinda dumb. The driver matching in 0.2 is a lot more flexible - it's just a map of keys to drivers. You could even include multiple instances of the same browser, with slightly different configurations.

This version includes Selenium 2.32. If you want to use a newer (or older) version, just exclude it in your build.config:

test(':poly-driver:0.2') {
    exclude 'selenium-support'
}

If you tried the 0.1 version and by some stroke of luck were able to install and configure it with no trouble, you should find upgrading to 0.2 pretty painless - just convert the alternateDrivers to a map, using the Driver values as your keys. I changed the Driver enum to a class with constants, so all your imports should be fine.

##What is implemented Just three interfaces: WebDriver, JavascriptExecutor, TakesScreenshot. Those are the only three I've used but it's trivial to add support for additional interfaces. Let me know (or submit a pull request) if you want one.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published