For my first post, I will be talking about a new feature that has been added to gwen-web. For those of you not familiar with gwen-web, its a web automation engine that runs inside our gwen interpreter and is used to automate the browser. gwen-web is unique in that it allows automation of the web browser, using english(dsl) rather than coding or using visual record/playback. We believe this will remove some of the entry level requirements often associated with a coded tool. For more information please head on over to our gwen github page https://github.com/gwen-interpreter/gwen.
Just recently we added the remote webdriver capability. This means gwen-web can now connect to selenium grid and drive not just the local browser, but also a browser that is installed on a different os, or a browser that has a different version.
Setting up Remote WebDriver with gwen-web
So how do I setup gwen-web with selenium remote webdriver? What I am going to walk you through is setting up a selenium grid, and attaching nodes to it. Firstly download the selenium-server-standalone-2.45.0.jar (or most recent) from http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar. Once this has been downloaded, you can start up selenium grid by running the following:
java -jar selenium-server-standalone-2.45.0.jar -role hub
Now lets make sure that its running by navigating to http://localhost:4444/grid/console. You will notice that there are currently no browsers available.
Running selenium grid in this mode, means we need to register nodes against the grid.
Adding browsers to the current running grid
Lets start by downloading the latest version of chromedriver (specific for the OS) – from http://chromedriver.storage.googleapis.com/index.html?path=2.15/ (at the time of writing the blog chromedriver 2.15 is the latest)
Unzip chromedriver and note the path.
Now lets start up selenium-server-standalone as a node role, and register both the chrome driver and firefox driver. Remembering firefox driver comes with the selenium-server-standalone.
java -jar selenium-server-standalone-2.45.0.jar -Dwebdriver.chrome.driver=chromedriver_215/chromedriver -role node -hub http://localhost:4444/grid/register -browser browserName=firefox,version=37.0,maxInstances=5,platform=LINUX -browser browserName=chrome,version=42.0,maxInstances=5,platform=LINUX
Let me explain the parts above:
- java -jar selenium-server-standalone-2.45.0.jar (standard selenium startup)
- -Dwebdriver.chrome.driver= (path to chromedriver including the executable)
- -role node (run the selenium-server-standalone as a node)
- -hub http://localhost:4444/grid/register (this is the location of the grid that you started back under the previous heading “Setting up Remote WebDriver with gwen-web”
- -browser browserName=firefox,version=37.0,maxInstance=5,platform=LINUX (the browser, version label and the number of maximum instances to run on this node) Note: firefox requires the binary to be in the PATH, alternatively it would need to be specified using -Dwebdriver.firefox.bin
- -browser browserName=chrome,version=42.0,maxInstances=5,platform=LINUX. (register that this node is capable of running chrome)
Testing the grid console
So how do we now confirm the currently registered browsers on the grid. Navigate to http://localhost:4444/grid/console and now the console should show both firefox and chrome registered and waiting for a connection.
When I setup a grid, I typically like to confirm whether or not the browsers do indeed start up. To do this I navigate to the node webdriver/hub E.g. http://10.1.1.9:5555/wd/hub (you can see the IP address of each node that is registered against this grid).
Then I create two sessions. One for chrome and one for firefox. If its working, both chrome and firefox will start. Just delete the sessions once that has been confirmed. If its not working, then you will need to go back and troubleshoot. Typically its driver / binary path related. If either browser pops up and then closes unexpectedly, make sure to keep both the selenium-server-standalone and the browser versions in sync. The latest version of selenium-standalone may not work with a version of the browser that is 6 versions out of date.
Setting up gwen-web to work with selenium-grid
Once you have a working grid, gwen web only requires a small change to the gwen.properties file. (eg. edit ~/gwen.properties and add the following line.)
This tells the gwen-web engine that it needs to communicate with selenium grid which will effectively use the RemoteWebDriver with different browser capabilities.
Running gwen-web with selenium-grid
To run gwen-web with two different browsers it is suggested that you remove gwen.web.browser property from the gwen.properties and pass it in as a “-D” system property. The below example uses the floodio challenge sample with gwen-web.
bin/gwen-web -Dgwen.web.browser=chrome -b features/floodio -r reports/chrome bin/gwen-web -Dgwen.web.browser=firefox -b features/floodio -r reports/firefox
Once gwen-web is running, navigate to the selenium node and you will see something like this
and navigate to the grid localhost:4444/grid/console and you will now see both firefox and chrome running.