Switch Test Runner Browsers Easily

The Problem

I recently got frustrated with having to comment in and out settings in the “twist.properties” file in order to switch browsers when debugging scenarios.  However, luck found its way to a relatively neat solution to my problem.

Whilst looking at various ways of managing different browser and application properties for the “build.xml” target, I found that I could switch between between twist.properties files by setting system properties at the command line.  This ended up looking a little something like this for firing off the ant target:

ant twist-scenarios -Dbrowser=firefox

This ended up taking a couple of fairly simple changes to implement, as follows:

Optional Overriding of “twist.properties” using Property Placeholder Configurer

Because of the way in which Twist uses Spring to inject constructor arguments in to the browser bean using placeholders, it was possible to add in a few extra lines to make the bean override the default “twist.properties’ file dynamically.  I’ve highlighted these changes to the “applicationContext-suite.xml” file below in bold italics.

<bean id=”propertiesConfigurer”> class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
<property name=”systemPropertiesModeName” value=”SYSTEM_PROPERTIES_MODE_OVERRIDE”/>
<property name=”searchSystemEnvironment” value=”true”/>
<property name=”ignoreResourceNotFound” value=”true”/>
<property name=”locations”>

The “searchSystemEnvironment” property makes “${browser}” look to resolve to a system property (as provided in the ant command line call above).  The “ignoreResourceNotFound” property ensures the that if a system property isn’t supplied; it still picks up the default “twist.properties” file without complaining.

Creating a Folder of Browser Specific “twist.properties” Files

Next, under under the project “src” folder, I created another folder called “twist-conf” containing multiple browser specific “twist.properties” files.  They ended up in this format for readability:

… etc.

Each one of these files had the appropriate individual settings for each browser (in this case Sahi driver properties) giving a few lines as below:

sahi.browserExecutable = firefox.exe
sahi.browserLocation = “C:/Program Files/Mozilla Firefox/firefox.exe”
sahi.browserOptions = -profile sahi/userdata/browser/ff/profiles/sahi<threadnumber> -no-remote

Eureka Moment

The moment of revelation came when I realised that I could also specify this very same system property as a JVM argument in the “Twist/Preferences” menu option (on the Mac version that is).  This changed pushed the system property the “Run Configuration” on next run of a scenario.  And then… I just duplicated the “Run Configuration” for each browser adjusting the system property for “-Dbrowser=”.  In each new version I would rename it to “Scenario in IE”, “Scenario in Firefox”, etc. until I had the full range.  I then added these as favorites so they were readily accessible.


There are limitations to this approach.  For example, the configuration is tied to an individual project.  So if you use multiple Twist projects, or various branches of the same one, you would need multiple configurations.

That said, in my situation it has certainly made life easier.  I hope it can be of use to you also.  Let me know what you think it has mileage, or whether you have a better approach.  I’d appreciate different views.


About flixtony

Simon Reekie is a Agile QA Specialist. He has experienced the challenging end of technical testing, test automation, and test management in many rewarding roles and organisations. He enjoys coaching those who can bear his enthusiasm for all things that make being a tester fun and new everyday.
This entry was posted in Twist Experiences and tagged , , , , , , , , , . Bookmark the permalink.

1 Response to Switch Test Runner Browsers Easily

  1. Pingback: Configuring Twist for Selenium 2 | twist4all

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s