CSC/ECE 517 Fall 2014/ch1b 27 js: Difference between revisions
(74 intermediate revisions by 2 users not shown) | |||
Line 5: | Line 5: | ||
'''''Selenium''''' is one of the most popularly used open source automation tools for web based applications. It is a JavaScript framework that runs in your web browser to interact with various elements in your browser. All in all, Selenium is a set of different software tools each with a different approach to supporting test automation. Selenium provides a rich set of testing functions that can be customized to suit the testing requirements. | '''''Selenium''''' is one of the most popularly used open source automation tools for web based applications. It is a JavaScript framework that runs in your web browser to interact with various elements in your browser. All in all, Selenium is a set of different software tools each with a different approach to supporting test automation. Selenium provides a rich set of testing functions that can be customized to suit the testing requirements. | ||
'''''Watir''''', is another lightweight automation testing tool that is widely used for web app testing. It is an open-source (BSD) family of Ruby libraries for automating web browsers. It allows you to write tests that are easy to read and maintain. Despite the fact that it is a set of Ruby libraries, it works perfectly, independent of the language that the web application is developed in. Watir as a tool is extremely simple and flexible. | '''''Watir''''', is another lightweight automation testing tool that is widely used for web app testing. It is an open-source ([http://en.wikipedia.org/wiki/BSD_licenses BSD]) family of Ruby libraries for automating web browsers. It allows you to write tests that are easy to read and maintain<ref>[http://watir.com/ Web Application Testing in Ruby]</ref>. Despite the fact that it is a set of Ruby libraries, it works perfectly, independent of the language that the web application is developed in. Watir as a tool is extremely simple and flexible. | ||
__TOC__ | |||
=='''Motivation'''== | =='''Motivation'''== | ||
Line 18: | Line 15: | ||
With the majority of software applications today being implemented as [http://en.wikipedia.org/wiki/Web_application web applications] to be used over the internet, testing is becoming an indispensable part of the software development lifecycle ([http://en.wikipedia.org/wiki/Software_development_process SDLC]) of these applications. [http://en.wikipedia.org/wiki/Test_automation Test automation] is used where manual testing needs to be carried out repeatedly making it a cumbersome task. Test automation uses a software tool for this purpose on the application to be tested. It has proven to be highly efficient and critical in larger software development companies. Additionally, automation can be a valuable way to make Test Driven Development ([http://en.wikipedia.org/wiki/Test-driven_development TDD]) tasks an important part of the software development workflow. | With the majority of software applications today being implemented as [http://en.wikipedia.org/wiki/Web_application web applications] to be used over the internet, testing is becoming an indispensable part of the software development lifecycle ([http://en.wikipedia.org/wiki/Software_development_process SDLC]) of these applications. [http://en.wikipedia.org/wiki/Test_automation Test automation] is used where manual testing needs to be carried out repeatedly making it a cumbersome task. Test automation uses a software tool for this purpose on the application to be tested. It has proven to be highly efficient and critical in larger software development companies. Additionally, automation can be a valuable way to make Test Driven Development ([http://en.wikipedia.org/wiki/Test-driven_development TDD]) tasks an important part of the software development workflow. | ||
Test Automation has a number of advantages mostly dealing with repetitiveness of the tests and the time taken | Test Automation has a number of advantages mostly dealing with repetitiveness of the tests and the time taken. | ||
* Covers cases that manual testing probably cannot | * '''Covers cases that manual testing probably cannot''' | ||
# Finds defects missed out my manual testing | # Finds defects missed out my manual testing | ||
# Automated testing can simulate numerous virtual users interacting with the web software/application | # Automated testing can simulate numerous virtual users interacting with the web software/application | ||
* Helps save time and money | * '''Helps save time and money''' | ||
# Once created, automated tests can be executed repeatedly at no additional costs and at a much faster pace. Saving time directly translates into saving cost. | # Once created, automated tests can be executed repeatedly at no additional costs and at a much faster pace. Saving time directly translates into saving cost. | ||
# Supports virtually unlimited iterations of test case execution | # Supports virtually unlimited iterations of test case execution | ||
* Increase test coverage and accuracy | * '''Increase test coverage and accuracy''' | ||
# Automated tests perform the exact same steps and records all details precisely | # Automated tests perform the exact same steps and records all details precisely | ||
# They also increase the depth and scope of tests to improve the quality of the software | # They also increase the depth and scope of tests to improve the quality of the software | ||
Line 31: | Line 28: | ||
=='''Brief History'''== | =='''Brief History'''== | ||
====Selenium==== | ====Selenium==== | ||
[[File: SE-logo.png|right|Selenium Logo|link=http://www.seleniumhq.org/images/big-logo.png]] | |||
''Selenium'' was developed in the year 2004 by Jason Huggins and has been continuously evolving ever since. Jason Huggins developed this as an internal tool for [http://en.wikipedia.org/wiki/ThoughtWorks ThoughtWorks] as a javascript library which came to be known as the Selenium core. Selenium core is now the basis of the Selenium Remote Control (the server) and Selenium IDE. | ''Selenium'' was developed in the year 2004 by Jason Huggins and has been continuously evolving ever since. Jason Huggins developed this as an internal tool for [http://en.wikipedia.org/wiki/ThoughtWorks ThoughtWorks] as a javascript library which came to be known as the Selenium core. Selenium core is now the basis of the Selenium Remote Control (the server) and Selenium IDE. | ||
The year 2006 marked the beginning of the development of the WebDriver project which was what they believed ‘a tool of the future’. The WebDriver was initiated to solve the problems that were faced due to the fact that Selenium was a based on JavaScript and a lot of security limitations browsers apply to Javascript. | The year 2006 marked the beginning of the development of the 'WebDriver project' which was what they believed ‘a tool of the future’. The WebDriver was initiated to solve the problems that were faced due to the fact that Selenium was a based on JavaScript and a lot of security limitations browsers apply to Javascript. | ||
In 2008, both Selenium and WebDriver merged to provide a common set of features to all users which is called Selenium 2 | In 2008, both Selenium and WebDriver merged to provide a common set of features to all users which is called Selenium 2. | ||
Simon Stewart, the creator of WebDriver, in a joint email to the WebDriver and Selenium community on August 6, 2009 said the following | Simon Stewart, the creator of the WebDriver Project, in a joint email to the WebDriver and Selenium community on August 6, 2009 said the following. | ||
“Why are the projects merging? Partly because webdriver addresses some shortcomings in selenium (by being able to bypass the JS sandbox, for example. And we’ve got a gorgeous API), partly because selenium addresses some shortcomings in webdriver (such as supporting a broader range of browsers) and partly because the main selenium contributors and I felt that it was the best way to offer users the best possible framework.”[ | :“Why are the projects merging? Partly because webdriver addresses some shortcomings in selenium (by being able to bypass the JS sandbox, for example. And we’ve got a gorgeous API), partly because selenium addresses some shortcomings in webdriver (such as supporting a broader range of browsers) and partly because the main selenium contributors and I felt that it was the best way to offer users the best possible framework.”<ref name ="Introduction to Selenium"> [http://docs.seleniumhq.org/docs/01_introducing_selenium.jsp#selenium-history Introducing Selenium]. ''SeleniumHQ: Browser Automation''. Selenium Project, 4 Oct. 2014. Web. 06 Oct. 2014.</ref> | ||
====Watir==== | ====Watir==== | ||
''Watir'' started as a library to teach testers to write ruby code and grew to be an IE implementation which now supports IE, Firefox, Safari, Google Chrome and Opera. | ''Watir'' started as a library to teach testers to write ruby code and grew to be an IE implementation which now supports IE, Firefox, Safari, Google Chrome and Opera. | ||
Watir was primarily developed by Bret Pettichord and Paul Rogers. Watir has since then has a couple of stable releases for Watir classic as well as Watir WebDriver. The most recent releases being[7] | Watir was primarily developed by Bret Pettichord and Paul Rogers. Watir has since then has a couple of stable releases for Watir classic as well as Watir WebDriver. The most recent releases being<ref>[http://watir.com/category/releases/ Watir Releases]. Watir: Web Application Testing in Ruby. 28 April, 2013</ref>. | ||
[[File: Watir.gif|right|Watir logo|link=http://upload.wikimedia.org/wikipedia/commons/7/7e/Watir.gif]] | |||
* Watir-Classic | * Watir-Classic | ||
Line 51: | Line 52: | ||
Watir has a google group ([https://groups.google.com/forum/#!forum/watir-general Watir General]) for its support and contribution while Selenium also has a [http://seleniumforum.forumotion.net/ Selenium forum] apart from its google group called [https://groups.google.com/forum/#!forum/selenium-users Selenium Users]. | Watir has a google group ([https://groups.google.com/forum/#!forum/watir-general Watir General]) for its support and contribution while Selenium also has a [http://seleniumforum.forumotion.net/ Selenium forum] apart from its google group called [https://groups.google.com/forum/#!forum/selenium-users Selenium Users]. | ||
=='''Pros/Cons'''== | |||
===Selenium=== | |||
*Pros | |||
# Open Source, free Software | |||
# Easy Installation | |||
# Scripting Techniques | |||
##Easy recording and playback of scripts | |||
##Scripts are modular, can be reused | |||
# Selenium was first written in Java but it also supports .Net, Ruby, Perl, PHP and Python. This is a big plus when you want to build your framework in a language that has the highest adoption in the organization it is being built within. Unlike tools like [http://en.wikipedia.org/wiki/HP_QuickTest_Professional QTP] which force you to use [http://en.wikipedia.org/wiki/VBScript VBScript] | |||
# Integration with third party tools is possible | |||
# You can instantiate several concurrent tests with Selenium since no dedicated machine is required | |||
*Cons | |||
# Selenium has concept of locators that support common attributes like id, names etc as well as [http://en.wikipedia.org/wiki/XPath XPATH], [http://en.wikipedia.org/wiki/JavaScript javascript] DOM and others. However, this is still not as smart as say the [http://www.tutorialspoint.com/qtp/qtp_object_repository.htm Object Repository] (OR) in QTP. That being said, QTP’s OR comes with it´s baggage as well.<ref>[http://www.qualitytesting.info/forum/topics/selenium-automation-tool Selenium Automation Tool]</ref> | |||
# It does not generate detailed results like the result viewer | |||
# No option to verify images | |||
===Watir=== | |||
*Pros | |||
# Open Source | |||
# Opens browser as a normal way how the user opens it unlike Selenium which needs to create an object to work with | |||
# Changing registry details(Proxy-http,socks) is very easy <ref>Raveendran, 28 Oct., 2009 [http://raveendran.wordpress.com/2009/10/28/watir-vs-selenium/ Selenium Vs Watir ]</ref> | |||
*Cons | |||
# Knowledge in the Ruby programming language is required | |||
# Does not support certain HTML elements | |||
# Limited reporting capabilities | |||
# There is no recorder for Watir unlike Selenium for playback | |||
=='''Comparison of Features, Functionality, and More'''== | =='''Comparison of Features, Functionality, and More'''== | ||
Some features or functionality may be repeated here. However, we will go into a bit more detail than previously mentioned. | Some features or functionality may be repeated here. However, we will go into a bit more detail than previously mentioned. | ||
===='''Open Source'''==== | ===='''Open Source'''==== | ||
Both Selenium and Watir are open source! This allows for greater extensibility and a deeper understanding of the inner workings of both of the frameworks, if the developer/tester chooses to delve into such details. Additionally, the open source community allows for a more transparent, user-driven development and support cycle. Users (the tester/developer) can choose to submit bug fixes or enhancements as patches, or they can choose to just use it “straight out of the box.” | Both Selenium and Watir are [http://en.wikipedia.org/wiki/Open-source_software open source]! This allows for greater extensibility and a deeper understanding of the inner workings of both of the frameworks, if the developer/tester chooses to delve into such details. Additionally, the open source community allows for a more transparent, user-driven development and support cycle. Users (the tester/developer) can choose to submit bug fixes or enhancements as patches, or they can choose to just use it “straight out of the box.” | ||
====Application Language Agnostic==== | ====Application Language Agnostic==== | ||
Line 67: | Line 97: | ||
'''Selenium*''' | '''Selenium*''' | ||
* Officially-supported: Java, C#, Ruby, Python, Javascript/Node.js | * Officially-supported: [http://en.wikipedia.org/wiki/Java_(programming_language) Java], [http://en.wikipedia.org/wiki/C_Sharp_(programming_language) C#], [http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby], [http://en.wikipedia.org/wiki/Python_(programming_language) Python], [http://en.wikipedia.org/wiki/Node.js Javascript/Node.js] | ||
* Unofficial/community-supported: Perl, PHP, Haskell, Objective-C, R, Dart, Tcl | * Unofficial/community-supported: [http://en.wikipedia.org/wiki/Perl Perl], [http://en.wikipedia.org/wiki/PHP PHP], [http://en.wikipedia.org/wiki/Haskell_(programming_language) Haskell], [http://en.wikipedia.org/wiki/Objective-C Objective-C], [http://en.wikipedia.org/wiki/R_(programming_language) R], [http://en.wikipedia.org/wiki/Dart_(programming_language) Dart], [http://en.wikipedia.org/wiki/Tcl Tcl] | ||
<nowiki>*</nowiki>According to SeleniumHQ’s download page. | <nowiki>*</nowiki>According to SeleniumHQ’s download page. | ||
Line 75: | Line 105: | ||
'''Watir''' | '''Watir''' | ||
Unfortunately (or fortunately), Ruby is the only supported language for Watir. After all, Watir does stand for “Web Application Testing in Ruby.” However, there are other frameworks which were inspired by Watir (but entirely separate) available in Java and C# - Watij and Watin, respectively <ref>Djorgjievski, Darko. [http://www.sitepoint.com/watir-webdriver-control-browser/ Watir-WebDriver: Control the Browser]. ''SitePoint''. SitePoint Pty Ltd, 18 Apr. 2014. Web. 05 Oct. 2014.</ref>. There may be other similarly inspired frameworks available in other languages, but these are the most notable. | Unfortunately (or fortunately), Ruby is the only supported language for Watir. After all, Watir does stand for “Web Application Testing in Ruby.” However, there are other frameworks which were inspired by Watir (but entirely separate) available in Java and C# - [http://watij.com/ Watij] and [http://watin.org/ Watin], respectively <ref>Djorgjievski, Darko. [http://www.sitepoint.com/watir-webdriver-control-browser/ Watir-WebDriver: Control the Browser]. ''SitePoint''. SitePoint Pty Ltd, 18 Apr. 2014. Web. 05 Oct. 2014.</ref>. There may be other similarly inspired frameworks available in other languages, but these are the most notable. | ||
====Cross-Browser and Headless Browser Support==== | |||
[[File: watir_meet_webdriver.png | Watir Meets WebDriver <ref>[http://watirmelon.com/2010/04/10/watir-selenium-webdriver/ Watir Meets WebDriver Image]</ref> |right|frame| link=http://yuml.me/diagram/scruffy/usecase/%5BTester%5D-%28Watir%20API%29,%20%28Watir%20API%29%3C%28FireWatir%29,%20%28Watir%20API%29%3C%28Watir%29,%20%28Watir%20API%29%3C%28SafariWatir%29,%20%28Watir%20API%29%3C%28Webdriver%29,%20%28Watir%20API%29%3C%28Celerity%29,%20%28Celerity%29-%28note:%20Celerity%20requires%20JRuby%29,%20%28Celerity%29-%28headless%29,%20%28Webdriver%29-%28Firefox%29,%20%28Webdriver%29-%28Chrome%29,%20%28Webdriver%29-%28IE%29,%20%28Webdriver%29-%28headless%29,%20%28FireWatir%29-%28Firefox%29,%20%28Watir%29-%28IE%29,%20%28SafariWatir%29-%28Safari%29.]] | |||
Traditionally, both Selenium and Watir were limited in the number of browsers they supported. Watir originally supported Internet Explorer and headless browsers exclusively. Headless browsers were supported via the use of [https://github.com/jarib/celerity Celerity] <ref>Scott, Alister. [http://watirmelon.com/2010/04/10/watir-selenium-webdriver/ Watir, Selenium & WebDriver]. ''Watirmelon''. Watirmelon, 10 Apr. 2010. Web. 05 Oct. 2014.</ref>. Selenium started out as a Javascript library, so naturally it supported more browsers such as IE, Firefox, Safari, etc <ref name = "Introduction to Selenium" />. However, it did not support headless browsers. | |||
Today, browser support looks much better for both Selenium and Watir, largely due to the introduction of WebDriver. With WebDriver in existence, support for most browsers was added to Watir via the gem "watir-webdriver," and Celerity became [https://github.com/jarib/celerity obsolete] because headless browser support was included in WebDriver. Similarly for Selenium, support for headless browsers was added, as well as making the API much simpler and more concise <ref>[http://docs.seleniumhq.org/projects/webdriver/ Selenium WebDriver]. ''SeleniumHQ: Browser Automation''. Selenium Project, n.d. Web. 06 Oct. 2014.</ref>. Both Selenium <ref>Semerau, Luke. [https://code.google.com/p/selenium/wiki/WebDriverForMobileBrowsers WebDriverForMobileBrowsers]. ''Selenium''. Google Project Hosting, 14 Jan. 2013. Web. 06 Oct. 2014 </ref> and Watir <ref>Scott, Alister. [http://watirwebdriver.com/mobile-devices/ Mobile Devices]. ''Watir WebDriver''. n.d. Web. 06 Oct. 2014. </ref> have also gained support of Mobile browsers in recent years through WebDriver. However, there is the obvious limitation that one can only test a browser which is supported on the running platform. In other words, Safari and Internet explorer can only be tested on OS X and Windows environments, respectively**. | |||
<nowiki>**</nowiki> <span style="font-size:88%">Some work-arounds or programs may exist to allow these browsers to be tested on other platforms. Here, we are assuming no special additional configuration - just the base operating system and browsers. With virtualization technologies such as [http://www.linux-kvm.org/page/Main_Page KVM], [https://www.virtualbox.org/ VirtualBox], and [http://en.wikipedia.org/wiki/Comparison_of_platform_virtualization_software others], this isn't a problem anyway. [http://en.wikipedia.org/wiki/Virtual_machine Virtual machines] can be created with any operating system, as needed.</span> | |||
====Cross-Platform Support==== | ====Cross-Platform Support==== | ||
Line 82: | Line 122: | ||
Because Watir is a collection of Ruby Gems, it runs on any platform that Ruby runs on. Like Selenium, this includes nearly all popular platforms. | Because Watir is a collection of Ruby Gems, it runs on any platform that Ruby runs on. Like Selenium, this includes nearly all popular platforms. | ||
=='''Getting started'''== | =='''Getting started'''== | ||
===Selenium WebDriver=== | ===Selenium WebDriver=== | ||
---- | ---- | ||
====Install/Configure | ====Install/Configure (Java)==== | ||
Download binaries from [http://www.seleniumhq.org/download/ here] to configure Selenium. | |||
Once you have all your binaries in a directory, you can open any IDE of your choice and add this directory with all the .jar files to the CLASSPATH | Once you have all your binaries in a directory, you can open any IDE of your choice and add this directory with all the .jar files to the CLASSPATH | ||
*Example | *Example | ||
This is how a typical Selenium code to find the term say, “Automation” on Google and display the results on the page would look like in Java using the HtmlUnitDriver would look like. | This is how a typical Selenium code to find the term say, “Automation” on Google and display the results on the page would look like in Java using the [https://code.google.com/p/selenium/wiki/HtmlUnitDriver HtmlUnitDriver] would look like. | ||
The HtmlUnitDriver is a pure Java driver that runs entirely in-memory. Because of this, you won't see a new browser window open[ | The HtmlUnitDriver is a pure Java driver that runs entirely in-memory. Because of this, you won't see a new browser window open <ref>[https://code.google.com/p/selenium/wiki/GettingStarted Getting started with Selenium] Selenium: Browser Automation Framework. Google Code. 8 Feb, 2014.</ref>. | ||
package org.selenium.example;<br /><br /> | package org.selenium.example;<br /><br /> | ||
Line 110: | Line 146: | ||
// not the implementation. | // not the implementation. | ||
WebDriver driver = new HtmlUnitDriver();<br /> | WebDriver driver = new HtmlUnitDriver();<br /> | ||
System.out.println("Beginning test for Google search using Selenium"); | |||
// And now use this to visit Google | // And now use this to visit Google | ||
System.out.println("Visit www.google.com" ); | |||
driver.get("http://www.google.com");<br /> | driver.get("http://www.google.com");<br /> | ||
// Find the text input element by its name | // Find the text input element by its name | ||
WebElement element = driver.findElement(By.name("q"));<br /> | WebElement element = driver.findElement(By.name("q"));<br /> | ||
// Enter something to search for | // Enter something to search for | ||
System.out.println("Type Automation in the search bar" ); | |||
element.sendKeys("Automation!");<br /> | element.sendKeys("Automation!");<br /> | ||
// Now submit the form. WebDriver will find the form for us from the element | // Now submit the form. WebDriver will find the form for us from the element | ||
element.submit();<br /> | element.submit();<br /> | ||
// Check the title of the page | // Check the title of the page | ||
System.out.println("Expected output" ); | |||
System.out.println("Page title is: " + driver.getTitle()); | System.out.println("Page title is: " + driver.getTitle()); | ||
driver.quit(); | driver.quit(); | ||
Line 124: | Line 164: | ||
} | } | ||
If you compile and run it, you should see a line with the title of the Google search results as output. | If you compile and run it, you should see a line with the title of the Google search results as output. | ||
''Output:'' | |||
Beginning test for Google search using Selenium </ br> | |||
Visit www.google.com </ br> | |||
Expected output </ br> | |||
Page title is: Google | |||
====Install/Configure for other languages==== | ====Install/Configure for other languages==== | ||
Configuring Selenium for languages other than Java and for other development environments can be looked up here. viz(C#, Ruby, Python, PHP, Perl, Javascript) | Configuring Selenium for languages other than Java and for other development environments can be looked up [http://docs.seleniumhq.org/docs/03_webdriver.jsp#setting-up-a-selenium-webdriver-project here]. viz(C#, Ruby, Python, PHP, Perl, Javascript) | ||
===Watir=== | ===Watir=== | ||
---- | ---- | ||
====Install/Configure==== | ====Install/Configure (Ruby)==== | ||
Drivers for Watir are installed as gems which are nothing but Ruby libraries which can be accessed over the internet. | Drivers for Watir are installed as gems which are nothing but Ruby libraries which can be accessed over the internet. | ||
All the instructions for installing Watir on various operating systems (viz. Windows, Mac OS, Linux) can be found here. | All the instructions for installing Watir on various operating systems (viz. Windows, Mac OS, Linux) can be found [http://watir.com/installation/ here]. | ||
*Example: | *Example: | ||
This is how a typical Watir code to find the term say, “Automation” on Google and display the results on the page would look like using Ruby[ | This is how a typical Watir code to find the term say, “Automation” on Google and display the results on the page would look like using Ruby<ref>Chernenko, Iryna. [http://blog.qatestlab.com/2011/02/23/automated-testing-with-watir-tutorial-for-begginers-part-1/ Watir Example]. QATestLab Blog: Automated Testing with Watir, 23 Feb 2011. | ||
</ref>. | |||
# Required in ruby 1.8.7 | # Required in ruby 1.8.7 | ||
Line 165: | Line 210: | ||
ie.close | ie.close | ||
On compiling and running this and passing the test, you will see something like | On compiling and running this and passing the test, you will see something like | ||
''Output:'' | ''Output:'' | ||
Beginning of the test for Google search engine | Beginning of the test for Google search engine | ||
Step 1: Go to the Google homepage | Step 1: Go to the Google homepage | ||
Step 2: enter Automation in the search text field. | Step 2: enter Automation in the search text field. | ||
Step 3: click the 'Google Search' button. | Step 3: click the 'Google Search' button. | ||
Expected Result: | Expected Result: | ||
A Google page with results should be shown. 'Watir, pronounced water' should be high on the list. | A Google page with results should be shown. 'Watir, pronounced water' should be high on the list. | ||
Test Passed. Found the text string: 'Watir, pronounced water'. Actual Results match Expected Results. | Test Passed. Found the text string: 'Watir, pronounced water'. Actual Results match Expected Results. | ||
End of test: Google search. <br /> | End of test: Google search. <br /> | ||
==Similar Tools== | |||
* [http://en.wikipedia.org/wiki/Sahi_(software) Sahi], uses the Sahi Scripting Language<br /> | |||
* [http://en.wikipedia.org/wiki/Soatest SOATest], for testing and validating [http://en.wikipedia.org/wiki/Application_programming_interface API] driven applications <br /> | |||
* [http://en.wikipedia.org/wiki/TestComplete TestComplete], for Desktops, Web and Mobile<br /> | |||
==See Also== | ==See Also== | ||
[http://www.hiretheworld.com/blog/tech-blog/migrating-unit-tests-from-selenium-to-watir-webdriver Migrating unit tests from Selenium to Watir Web Driver] <br /> | * [http://www.hiretheworld.com/blog/tech-blog/migrating-unit-tests-from-selenium-to-watir-webdriver Migrating unit tests from Selenium to Watir Web Driver] <br /> | ||
[http://www.hiretheworld.com/blog/tech-blog/migrating-unit-tests-from-selenium-to-watir-webdriver Learning Selenium IDE] <br /> | * [http://www.hiretheworld.com/blog/tech-blog/migrating-unit-tests-from-selenium-to-watir-webdriver Learning Selenium IDE] <br /> | ||
[http://en.wikipedia.org/wiki/List_of_web_testing_tools List of web testing tools] <br /> | * [http://en.wikipedia.org/wiki/List_of_web_testing_tools List of web testing tools] <br /> | ||
[http://en.wikipedia.org/wiki/List_of_web_testing_tools OWASP List of Acceptance Testing tools] | * [http://en.wikipedia.org/wiki/List_of_web_testing_tools OWASP List of Acceptance Testing tools] | ||
* [http://www.ijiet.org/papers/425-T0026.pdf Study of Browser Based Automated Test Tools WATIR and Selenium] Nisha Gogna, August 2014, International Journal of Information and Education Technology, Vol. 4, No. 4 | |||
==References== | ==References== | ||
{{reflist}} | {{reflist}} | ||
<references /> | |||
==External Links== | ==External Links== | ||
[http://en.wikipedia.org/wiki/Selenium_(software)Selenium Wiki Page] <br /> | * [http://en.wikipedia.org/wiki/Selenium_(software) Selenium Wiki Page] <br /> | ||
[https://github.com/SeleniumHQ/selenium Selenium Source Code] <br /> | * [https://github.com/SeleniumHQ/selenium Selenium Source Code] <br /> | ||
[http://en.wikipedia.org/wiki/Watir Watir Wiki Page] <br /> | * [http://en.wikipedia.org/wiki/Watir Watir Wiki Page] <br /> | ||
[http://en.wikipedia.org/wiki/Watir Watir Source Code] <br /> | * [http://en.wikipedia.org/wiki/Watir Watir Source Code] <br /> | ||
[http://en.wikipedia.org/wiki/Watir SauceLabs HomePage] <br /> | * [http://en.wikipedia.org/wiki/Watir SauceLabs HomePage] <br /> |
Latest revision as of 02:34, 14 October 2014
Selenium vs. Watir
Developing web applications is proving to be a challenging task with each passing day given the complex requirements and the demanding nature of the these applications. For the web applications to be robust we need to put in place some good testing strategies.
Selenium is one of the most popularly used open source automation tools for web based applications. It is a JavaScript framework that runs in your web browser to interact with various elements in your browser. All in all, Selenium is a set of different software tools each with a different approach to supporting test automation. Selenium provides a rich set of testing functions that can be customized to suit the testing requirements.
Watir, is another lightweight automation testing tool that is widely used for web app testing. It is an open-source (BSD) family of Ruby libraries for automating web browsers. It allows you to write tests that are easy to read and maintain<ref>Web Application Testing in Ruby</ref>. Despite the fact that it is a set of Ruby libraries, it works perfectly, independent of the language that the web application is developed in. Watir as a tool is extremely simple and flexible.
Motivation
Need for test automation
With the majority of software applications today being implemented as web applications to be used over the internet, testing is becoming an indispensable part of the software development lifecycle (SDLC) of these applications. Test automation is used where manual testing needs to be carried out repeatedly making it a cumbersome task. Test automation uses a software tool for this purpose on the application to be tested. It has proven to be highly efficient and critical in larger software development companies. Additionally, automation can be a valuable way to make Test Driven Development (TDD) tasks an important part of the software development workflow.
Test Automation has a number of advantages mostly dealing with repetitiveness of the tests and the time taken.
- Covers cases that manual testing probably cannot
- Finds defects missed out my manual testing
- Automated testing can simulate numerous virtual users interacting with the web software/application
- Helps save time and money
- Once created, automated tests can be executed repeatedly at no additional costs and at a much faster pace. Saving time directly translates into saving cost.
- Supports virtually unlimited iterations of test case execution
- Increase test coverage and accuracy
- Automated tests perform the exact same steps and records all details precisely
- They also increase the depth and scope of tests to improve the quality of the software
Brief History
Selenium
Selenium was developed in the year 2004 by Jason Huggins and has been continuously evolving ever since. Jason Huggins developed this as an internal tool for ThoughtWorks as a javascript library which came to be known as the Selenium core. Selenium core is now the basis of the Selenium Remote Control (the server) and Selenium IDE. The year 2006 marked the beginning of the development of the 'WebDriver project' which was what they believed ‘a tool of the future’. The WebDriver was initiated to solve the problems that were faced due to the fact that Selenium was a based on JavaScript and a lot of security limitations browsers apply to Javascript. In 2008, both Selenium and WebDriver merged to provide a common set of features to all users which is called Selenium 2. Simon Stewart, the creator of the WebDriver Project, in a joint email to the WebDriver and Selenium community on August 6, 2009 said the following.
- “Why are the projects merging? Partly because webdriver addresses some shortcomings in selenium (by being able to bypass the JS sandbox, for example. And we’ve got a gorgeous API), partly because selenium addresses some shortcomings in webdriver (such as supporting a broader range of browsers) and partly because the main selenium contributors and I felt that it was the best way to offer users the best possible framework.”<ref name ="Introduction to Selenium"> Introducing Selenium. SeleniumHQ: Browser Automation. Selenium Project, 4 Oct. 2014. Web. 06 Oct. 2014.</ref>
Watir
Watir started as a library to teach testers to write ruby code and grew to be an IE implementation which now supports IE, Firefox, Safari, Google Chrome and Opera. Watir was primarily developed by Bret Pettichord and Paul Rogers. Watir has since then has a couple of stable releases for Watir classic as well as Watir WebDriver. The most recent releases being<ref>Watir Releases. Watir: Web Application Testing in Ruby. 28 April, 2013</ref>.
- Watir-Classic
- 0.6.3 April 10, 2013 (Release Notes)
- Watir-WebDriver
- 3.6.0 March 16, 2013 (Release Notes)
- 3.5.0 March 10, 2013 (Release Notes)
Watir has a google group (Watir General) for its support and contribution while Selenium also has a Selenium forum apart from its google group called Selenium Users.
Pros/Cons
Selenium
- Pros
- Open Source, free Software
- Easy Installation
- Scripting Techniques
- Easy recording and playback of scripts
- Scripts are modular, can be reused
- Selenium was first written in Java but it also supports .Net, Ruby, Perl, PHP and Python. This is a big plus when you want to build your framework in a language that has the highest adoption in the organization it is being built within. Unlike tools like QTP which force you to use VBScript
- Integration with third party tools is possible
- You can instantiate several concurrent tests with Selenium since no dedicated machine is required
- Cons
- Selenium has concept of locators that support common attributes like id, names etc as well as XPATH, javascript DOM and others. However, this is still not as smart as say the Object Repository (OR) in QTP. That being said, QTP’s OR comes with it´s baggage as well.<ref>Selenium Automation Tool</ref>
- It does not generate detailed results like the result viewer
- No option to verify images
Watir
- Pros
- Open Source
- Opens browser as a normal way how the user opens it unlike Selenium which needs to create an object to work with
- Changing registry details(Proxy-http,socks) is very easy <ref>Raveendran, 28 Oct., 2009 Selenium Vs Watir </ref>
- Cons
- Knowledge in the Ruby programming language is required
- Does not support certain HTML elements
- Limited reporting capabilities
- There is no recorder for Watir unlike Selenium for playback
Comparison of Features, Functionality, and More
Some features or functionality may be repeated here. However, we will go into a bit more detail than previously mentioned.
Open Source
Both Selenium and Watir are open source! This allows for greater extensibility and a deeper understanding of the inner workings of both of the frameworks, if the developer/tester chooses to delve into such details. Additionally, the open source community allows for a more transparent, user-driven development and support cycle. Users (the tester/developer) can choose to submit bug fixes or enhancements as patches, or they can choose to just use it “straight out of the box.”
Application Language Agnostic
Both Selenium and Watir are application language agnostic. Because both Selenium and Watir test UI functionality in the browser, they can be used to test any web application.
Language-specific Test Cases
Both Selenium and Watir require test cases to be written in some programming language. Traditionally, both frameworks had limited choices in terms of language bindings. However, with the advent of WebDriver, both became much more flexible. WebDriver provided the bindings needed for many languages. Today, the following are supported:
Selenium*
- Officially-supported: Java, C#, Ruby, Python, Javascript/Node.js
*According to SeleniumHQ’s download page.
Watir
Unfortunately (or fortunately), Ruby is the only supported language for Watir. After all, Watir does stand for “Web Application Testing in Ruby.” However, there are other frameworks which were inspired by Watir (but entirely separate) available in Java and C# - Watij and Watin, respectively <ref>Djorgjievski, Darko. Watir-WebDriver: Control the Browser. SitePoint. SitePoint Pty Ltd, 18 Apr. 2014. Web. 05 Oct. 2014.</ref>. There may be other similarly inspired frameworks available in other languages, but these are the most notable.
Cross-Browser and Headless Browser Support
Traditionally, both Selenium and Watir were limited in the number of browsers they supported. Watir originally supported Internet Explorer and headless browsers exclusively. Headless browsers were supported via the use of Celerity <ref>Scott, Alister. Watir, Selenium & WebDriver. Watirmelon. Watirmelon, 10 Apr. 2010. Web. 05 Oct. 2014.</ref>. Selenium started out as a Javascript library, so naturally it supported more browsers such as IE, Firefox, Safari, etc <ref name = "Introduction to Selenium" />. However, it did not support headless browsers.
Today, browser support looks much better for both Selenium and Watir, largely due to the introduction of WebDriver. With WebDriver in existence, support for most browsers was added to Watir via the gem "watir-webdriver," and Celerity became obsolete because headless browser support was included in WebDriver. Similarly for Selenium, support for headless browsers was added, as well as making the API much simpler and more concise <ref>Selenium WebDriver. SeleniumHQ: Browser Automation. Selenium Project, n.d. Web. 06 Oct. 2014.</ref>. Both Selenium <ref>Semerau, Luke. WebDriverForMobileBrowsers. Selenium. Google Project Hosting, 14 Jan. 2013. Web. 06 Oct. 2014 </ref> and Watir <ref>Scott, Alister. Mobile Devices. Watir WebDriver. n.d. Web. 06 Oct. 2014. </ref> have also gained support of Mobile browsers in recent years through WebDriver. However, there is the obvious limitation that one can only test a browser which is supported on the running platform. In other words, Safari and Internet explorer can only be tested on OS X and Windows environments, respectively**.
** Some work-arounds or programs may exist to allow these browsers to be tested on other platforms. Here, we are assuming no special additional configuration - just the base operating system and browsers. With virtualization technologies such as KVM, VirtualBox, and others, this isn't a problem anyway. Virtual machines can be created with any operating system, as needed.
Cross-Platform Support
Both Watir and Selenium run on most popular distributions of Windows, Mac, and Linux. Selenium doesn't have a list of officially supported operating system versions. Instead they generally support any version that is currently popular. Only a few versions are listed which they run test builds on. These are versions which are officially known to work, but many more are supported as well.
Because Watir is a collection of Ruby Gems, it runs on any platform that Ruby runs on. Like Selenium, this includes nearly all popular platforms.
Getting started
Selenium WebDriver
Install/Configure (Java)
Download binaries from here to configure Selenium. Once you have all your binaries in a directory, you can open any IDE of your choice and add this directory with all the .jar files to the CLASSPATH
- Example
This is how a typical Selenium code to find the term say, “Automation” on Google and display the results on the page would look like in Java using the HtmlUnitDriver would look like. The HtmlUnitDriver is a pure Java driver that runs entirely in-memory. Because of this, you won't see a new browser window open <ref>Getting started with Selenium Selenium: Browser Automation Framework. Google Code. 8 Feb, 2014.</ref>.
package org.selenium.example;
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class Example { public static void main(String[] args) { // Create a new instance of the html unit driver // Notice that the remainder of the code relies on the interface, // not the implementation. WebDriver driver = new HtmlUnitDriver();
System.out.println("Beginning test for Google search using Selenium"); // And now use this to visit Google System.out.println("Visit www.google.com" ); driver.get("http://www.google.com");
// Find the text input element by its name WebElement element = driver.findElement(By.name("q"));
// Enter something to search for System.out.println("Type Automation in the search bar" ); element.sendKeys("Automation!");
// Now submit the form. WebDriver will find the form for us from the element element.submit();
// Check the title of the page System.out.println("Expected output" ); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } }
If you compile and run it, you should see a line with the title of the Google search results as output.
Output: Beginning test for Google search using Selenium </ br> Visit www.google.com </ br> Expected output </ br> Page title is: Google
Install/Configure for other languages
Configuring Selenium for languages other than Java and for other development environments can be looked up here. viz(C#, Ruby, Python, PHP, Perl, Javascript)
Watir
Install/Configure (Ruby)
Drivers for Watir are installed as gems which are nothing but Ruby libraries which can be accessed over the internet. All the instructions for installing Watir on various operating systems (viz. Windows, Mac OS, Linux) can be found here.
- Example:
This is how a typical Watir code to find the term say, “Automation” on Google and display the results on the page would look like using Ruby<ref>Chernenko, Iryna. Watir Example. QATestLab Blog: Automated Testing with Watir, 23 Feb 2011. </ref>.
# Required in ruby 1.8.7 require 'rubygems' # Watir IE driver require 'watir'
ie = Watir::IE.new
# text to show on console puts "Beginning of the test for Google search engine" puts "Step 1: Go to the Google homepage" ie.goto "http://www.google.com"
#set a variable search_text = "Automation" puts "Step 2: enter "+ search_text +" in the search text field." ie.text_field(:name, "q").set search_text # "q" is the name of the search field
puts " Step 3: click the 'Google Search' button." ie.button(:name, "btnG").click # "btnG" is the name of the Search button
puts " Expected Result:" puts " A Google page with results should be shown. 'Watir, pronounced water' should be high on the list." puts " Actual Result:" if ie.text.include? "Watir, pronounced water" puts " Test Passed. Found the text string: 'Watir, pronounced water'. Actual Results match Expected Results." else puts " Test Failed! Could not find text: 'Watir, pronounced water'." end puts "End of test: Google search." ie.close
On compiling and running this and passing the test, you will see something like
Output: Beginning of the test for Google search engine Step 1: Go to the Google homepage Step 2: enter Automation in the search text field. Step 3: click the 'Google Search' button. Expected Result: A Google page with results should be shown. 'Watir, pronounced water' should be high on the list. Test Passed. Found the text string: 'Watir, pronounced water'. Actual Results match Expected Results. End of test: Google search.
Similar Tools
- Sahi, uses the Sahi Scripting Language
- SOATest, for testing and validating API driven applications
- TestComplete, for Desktops, Web and Mobile
See Also
- Migrating unit tests from Selenium to Watir Web Driver
- Learning Selenium IDE
- List of web testing tools
- OWASP List of Acceptance Testing tools
- Study of Browser Based Automated Test Tools WATIR and Selenium Nisha Gogna, August 2014, International Journal of Information and Education Technology, Vol. 4, No. 4
References
<references />