I wrote a bunch of selenium tests using Selenium IDE for a project. The selenium tests have proven to be very useful. However the tests take around 58 minutes to complete the full run.
Here are the specific steps I took which brought the running time to under 15 minutes.
Set to run at the maximum speed
Command | Target | Value |
setSpeed | 0 |
setSpeed command takes Target value in milliseconds. By setting the value to zero, I set the speed to maximum and the tests indeed ran fast. However, now I had lots of tests failing which were previously passing.
What happened.
In our tests real firefox browser is fired up and real elements are clicked. The application does make round trip to the rails server hosted on heroku.
By setting the selenium tests to the maximum speed the selenium tests started asserting for elements on the page even before the pages were fully loaded by the browser.
I needed sets of instructions using which I could tell selenium how long to wait for before asserting for elements.
Selenium provides a wonderful suite of commands which helped me fine tune the test run. Here I'm discussing some of those commands.
waitForVisible
This command is used to tell selenium to wait until the specified element is visible on the page.
In the below mentioned case, the Selenium IDE will wait until the element css=#text-a is visible on the page.
Command | Target | Value |
waitForVisible | css=#text-a |
waitForText
This command is used to tell selenium to wait until a particular text is visible in the specified element.
In the case mentioned below, Selenium IDE will wait until the text violet is displayed in the element css=#text-a.
Command | Target | Value |
waitForText | css=#text-a | violet |
The difference between waitForVisible and waitForText is that waitForVisible waits until the specified element is visible on the page while waitForText waits until a particular text is visible in the specified element on the page.
waitForElementPresent
This command is used to tell Selenium to wait until the specified element is displayed on the page.
In the below mentioned case, the Selenium IDE will wait until the element css=a.button is displayed on the page.
Command | Target | Value |
waitForElementPresent | css=a.button |
waitForVisible and waitForElementPresent seem very similar. It seems both of these commands do the same thing. There is a subtle difference though.
waitForVisible waits until the specified element is visible. Visibility of an element is manipulated by the settings of CSS properties. For example using display none; one can make an element not be visible at all.
In contrast the command waitForElementPresent waits until the specified element is present on the page in the form of html markup. This command does not give consideration to css settings.
refreshAndWait
This command is used to tell Selenium to wait until the page is refreshed and the targeted element is displayed on the web page.
In the example mentioned below, the Selenium IDE will wait until the page is refreshed and the targeted element css=span.button is displayed on the page.
Command | Target | Value |
refreshAndWait | css=span.button |
clickAndWait
This command is used to tell selenium to wait until a particular button is clicked for submitting the form and the page starts reloading. The subsequent commands are paused until, the page is reloaded after the element is clicked on the page.
In the case mentioned below, Selenium IDE will wait until the page is reloaded after the specified element css=input#edit is clicked.
Command | Target | Value |
clickAndWait | css=input#edit |
Selenium IDE commands used above and more are available at Selenium documentation .