HTML-Encoding UTF-8 Characters
April 24th, 2013
It happens sometimes that a web page isnt using UTF-8, but theres a need to display UTF-8 data. Thankfully HTML offers encoding that allows displaying any arbitrary UTF-8 characters.
You have an extensive suite of Geb functional tests running against Firefox and it takes a long time to run. You switch your tests over to PhantomJS; now they run twice as fast!
But five percent of the tests intermittently fail. After spending a few hours trying to figure it out, you still don’t know why they are failing — just that they fail sometimes, and you don’t want to spend the next week trying to figure out a workaround. As it stands, it’s not practical to switch to PhantomJS at this time.
Why not use both? Add the Poly Driver plugin to your project and configure it in GebConfig.groovy:
driver = {
FirefoxDriver firefoxDriver = new FirefoxDriver()
PhantomJSDriver phantomJSDriver = getPhantomDriver()
new PolyDriver(mainDriver: phantomJSDriver, alternateDrivers: ['firefox' : firefoxDriver])
}
private PhantomJSDriver getPhantomDriver() {
// see Tomás Lin’s excellent blog post on configuring drivers for Geb:
// http://fbflex.wordpress.com/2013/03/18/how-to-configure-webdriver-in-grails-for-your-geb-tests/
}
Change the class inheritance of your problem test and annotate it:
class MyGebSpecCase extends GebReportingSpec {
...
}
becomes
import com.polydriver.spec.PolyDriverGebReportingSpec
@PreferredDriver('firefox')
class MyGebSpecCase extends PolyDriverGebReportingSpec {
...
}
When you run your tests, you will see a Firefox window open but only the FooGebSpecCase (and any others with the @PreferredDriver(‘firefox’) annotation) will use it. The rest of your tests will run quickly in PhantomJS.
The driver allows you to specify as many drivers as you want — you can even declare multiple instances of the same browser, so if you want to run a subset of tests against different Firefox profiles, you can do that:
driver = {
FirefoxDriver firefoxDriver = new FirefoxDriver()
FirefoxProfile ffProfile = new FirefoxProfile()
// setup the other profile
FirefoxDriver altFirefoxDriver = new FirefoxDriver(ffProfile)
PhantomJSDriver phantomJSDriver = getPhantomDriver()
new PolyDriver(
mainDriver: phantomJSDriver,
alternateDrivers: [
'firefox': firefoxDriver,
'ff-alt': altFirefoxDrive
]
)
}
Hopefully this eases the pain of transitioning your test suites to PhantomJS.
It happens sometimes that a web page isnt using UTF-8, but theres a need to display UTF-8 data. Thankfully HTML offers encoding that allows displaying any arbitrary UTF-8 characters.
When refactoring, be sure to check your application settings as they may no longer make sense.
When externalizing grails app configurations for multiple environments I want to ensure values are provided for all the required/expected properties. So I wrote a plugin to help.
Insert bio here