Wiki source code of ERSelenium Framework

Last modified by Kieran Kelleher on 2012/07/19 21:10

Hide last authors
David Avendasora 38.1 1 = Screencast =
Ray Kiddy 11.1 2
Pascal Robert 41.1 3 [[http:~~/~~/www.wocommunity.org/podcasts/WOWODCW09-TDD.mov>>url:http://www.wocommunity.org/podcasts/WOWODCW09-TDD.mov||shape="rect"]] - 1 hour plus session on Test Driven Development with WebObjects presented by Denis Frolov on WOWODC 09. Shows how to use ERSelenium, jUnit, and Mockito with WebObjects.
Ray Kiddy 11.1 4
David Avendasora 38.1 5 = Quick Start =
6
7 * Checkout the Project Wonder - the ERSelenium is in the Wonder/Frameworks/Misc folder.
Pascal Robert 41.1 8 * Examine test cases from Wonder/Examples/Misc/ERSeleniumExample/Resources/Selenium/main/ and from [[BugTracker>>url:http://wiki.objectstyle.org/confluence/display/WONDER/Getting+Started+with+BugTracker||shape="rect"]] in Eclipse text editor.
9 * Launch ERSeleniumExample and point your browser to SeleniumStartTesting Direct Action url (e.g. [[http:~~/~~/localhost/cgi-bin/WebObjects/ERSeleniumExample.woa/-42422/wa/SeleniumStartTesting>>url:http://localhost/cgi-bin/WebObjects/ERSeleniumExample.woa/-42422/wa/SeleniumStartTesting||shape="rect"]]).
10 * or Launch BugTracker and point your browser to SeleniumStartTesting Direct Action url (e.g. [[http:~~/~~/localhost/cgi-bin/WebObjects/BugTracker.woa/-42422/wa/SeleniumStartTesting>>url:http://localhost/cgi-bin/WebObjects/BugTracker.woa/-42422/wa/SeleniumStartTesting||shape="rect"]]).
David Avendasora 38.1 11
Ray Kiddy 11.1 12 You can also use Selenium IDE to create and edit tests:
13
Pascal Robert 41.1 14 * Launch FireFox and install [[Selenium IDE Firefox plugin>>url:https://addons.mozilla.org/en-US/firefox/addon/2079/||shape="rect"]].
15 * Using [[Selenium IDE format plugin installation instructions>>url:http://wiki.openqa.org/display/SIDE/Contributed+Extensions+and+Formats||shape="rect"]] install Selenese-ide-plugin.js (it is in ERSelenium/Resources).
mbushkov 34.1 16
17 {{tip title="Opening Tests in Selenium IDE"}}
Pascal Robert 41.1 18 You need to select Selenese in the Options -> Format submenu before the Selenium IDE will allow you to open tests in the Selenese format
19 [[image:attach:Picture 4.jpg]]
mbushkov 34.1 20 {{/tip}}
21
Ray Kiddy 11.1 22 * Play around with test cases from ERSeleniumExample/Resources/Selenium/ using Selenium IDE.
23
24 = Overview and Usage Notes =
25
Pascal Robert 41.1 26 ERSelenium provides several features for effective use of [[SeleniumCore>>url:http://openqa.org/selenium-core/||shape="rect"]] with WebObjects applications including:
Ray Kiddy 11.1 27
28 * Custom setup/teardown actions that can be run before/after each test.
29 * Base URL independence.
David Avendasora 38.1 30 * Support of HTML and Selenese test formats.
Ray Kiddy 11.1 31 * "On-the-fly" generation of test suites from the files in your project's source tree.
32 * Bookmarkable DirectAction url to run all tests (can be used for automated testing).
33 * Metacommands (special instructions specified in comments).
34
Pascal Robert 41.1 35 //[[//SeleniumCore//>>url:http://openqa.org/selenium-core/||shape="rect"]]// //is the powerful javascript toolkit for web applications "black-box" testing. It emulates different kinds of user actions such as: clicking the hyperlink, editing text in the input field, choosing item from the list and so on. See also~:// //[[doc:WO.Selenium]]//
Ray Kiddy 11.1 36
David Avendasora 38.1 37 = Adding the ERSelenium framework dependency to an Application =
smmccraw 32.1 38
David Avendasora 38.1 39 You can add a ERSelenium test runner framework dependency to your application with Eclipse/WOLips:
smmccraw 32.1 40
Kieran Kelleher 44.1 41 1. Add the ERSelenium.framework to your project's Libraries dependency. See the tutorial: [[Add a Framework Dependency>>doc:documentation.Home.WOLips Tutorials.Add a Framework Dependency.WebHome]]
Pascal Robert 43.2 42 1. (Optionally. Disabled by default. Use with caution). Enable the Selenium tests direct action url in production mode via the property: {{code}}SeleniumTestsEnabled=true{{/code}} Debug output of ERSelenium can be enabled in Properties by:
Ray Kiddy 11.1 43
44 {{code}}
45
46 log4j.logger.er.selenium = DEBUG
47
48 {{/code}}
49
50 Other ERSelenium properties:
51
Pascal Robert 41.1 52 * **SeleniumTestsRoot="SomeOtherPath"** - change the tests location. By default ERSelenium will search for tests in "Resources/Selenium".
53 * **SeleniumReportPath="PathName"** - specified the path to the report file, which is created after the testing is done. "./Contents/Resources/" is the default value.
Ray Kiddy 11.1 54
55 In your SeleniumTestsRoot folder (Resources/Selenium by default) you should create tests hierarchy. Tests are divided into groups, each group is located in its own folder. In each folder there should be a collection of test files, each in one of the formats, supported by ERSelenium. Example hierarchy:
56
57 {{code}}
58
59 ./Resources
60 ./Selenium
61 ./registration
62 ./successful.sel
63 ./alreadyexists.sel
64 ./shop
65 ./buyitem.html
66 ./notenoughmoney.html
67 ./transfer.sel
68
69 {{/code}}
70
71 You can use both standard HTML and wiki-like Selenese formats for writing tests although Selenese format is usually a preferred choice.
72
73 To run all tests point your browser to SeleniumStartTesting Direct Action:
Pascal Robert 41.1 74 [[http:~~/~~/baseurl/wa/SeleniumStartTesting>>url:http://baseurl/wa/SeleniumStartTesting||shape="rect"]]
Ray Kiddy 11.1 75
76 Example:
Pascal Robert 41.1 77 [[http:~~/~~/localhost/cgi-bin/WebObjects/SampleProject.woa/-42421/wa/SeleniumStartTesting>>url:http://localhost/cgi-bin/WebObjects/SampleProject.woa/-42421/wa/SeleniumStartTesting||shape="rect"]]
Ray Kiddy 11.1 78
79 To run a specific group of tests, add "/TestGroupName":
80
81 {{code}}
82
mbushkov 34.1 83 http://baseurl/wa/SeleniumStartTesting/TestGroupName
Ray Kiddy 11.1 84 http://127.0.0.1/cgi-bin/WebObjects/SampleProject.woa/-42421/wa/SeleniumStartTesting/registration
85
86 {{/code}}
87
88 = Some tips for writing tests for ERSelenium =
89
Pascal Robert 41.1 90 * Don't use full URLs with open/openWindow commands ([[http:~~/~~/baseurl>>url:http://baseurl||shape="rect"]] part will be added by ERSelenium):
Pascal Robert 43.2 91 * {{code}}|open|/wa/EditPerson
92 |open|/{{/code}}You can use setup/teardown methods. They should be implemented as direct actions in the separate class, which should be er.selenium.SeleniumAction-descendant. SeleniumAction class has some handy helper methods and automatically turns your selenium-related actions off when selenium is disabled in Properties. Here's the example of using selenium-related direct actions in the test (suppose that resetSessionAction() is defined in the class "Selenium"):
93 * {{code}}|open|/wa/Selenium/resetSession{{/code}}You can use @repeat-@values-@done metacommands to execute specific part of the test with additional values edited in textboxes, e.g.: {{code}}@repeat
mbushkov 34.1 94 ...some actions...
95 @values user1 user2 user3
David Avendasora 38.1 96 |type|user|user0
mbushkov 34.1 97 @values pass1 pass2 pass3
David Avendasora 38.1 98 |type|password|pass0
mbushkov 34.1 99 ...some more actions...
Pascal Robert 43.2 100 @done{{/code}} The commands between @repeat and @done will be repeated several times, each time with new value in "user" and "password" input field. The values are seperated by spaces and if you have multiple @values lines, they all must have the same number of parameters. The @values section applies to the value of the next command.
Ray Kiddy 11.1 101
Pascal Robert 41.1 102 //Note: in Selenese format, lines that don't begin with "|" are treated as comments, so metacommands in the example above will be safely processed by Selenium IDE.//
Ray Kiddy 11.1 103
Pascal Robert 41.1 104 * [[Selenium IDE Firefox plugin>>url:http://release.openqa.org/selenium-ide/0.8.7/selenium-ide-0.8.7.xpi||shape="rect"]] and [[XPath Checker>>url:https://addons.mozilla.org/ru/firefox/addon/1095||shape="rect"]] can be very handy for creating and editing Selenium tests. Selenium IDE Selenese source plugin with proper comments support resides in ERSelenium/Resources/selenese-ide-plugin.js.
Ray Kiddy 11.1 105
David Avendasora 38.1 106 == Using basic flow control ==
107
Pascal Robert 41.1 108 ERSelenium comes with a preinstalled [[flowControl>>url:http://wiki.openqa.org/display/SEL/flowControl||shape="rect"]] user-contributed extension that provides some basic flow control. You can use its commands as described in the [[flowControl documentation>>url:http://wiki.openqa.org/display/SEL/flowControl||shape="rect"]].
David Avendasora 38.1 109
Pascal Robert 41.1 110 For example, consider a test page that displays an integer counter (in the format "Counter = //n//", where //n// is the current value of the counter), and has an "Increment" button with {{code language="none"}}id="increment"{{/code}}. The following Selenese fragment would repeatedly press the button until the counter reached 10:
David Avendasora 38.1 111
112 {{code}}
113
114 |while|!selenium.isTextPresent("Counter = 10");||
115 |click|increment||
116 |endWhile|||
117
118 {{/code}}
119
120 = Standalone runner =
121
122 ERSelenium offers tests' developers several nice features - like automatic test suite generation, metacommands and URL independence. Unfortunately this leads to some troubles when trying to execute your tests with Selenium-RC. This is where StandaloneRunner can be very helpful.
123
Pascal Robert 41.1 124 [[Selenium-RC>>url:http://seleniumhq.org/documentation/remote-control/||shape="rect"]] is essentially a selenium-server and a set of client libraries that you can use. You can write any kind of client application that sends particular commands to the server and receives back status codes. Among these commands are typical selenium commands ("click", "type" and so on) and several specific ("open specified browser"). Selenium-RC does a great job of preparing the browser profile (it turns off confirmation dialog boxes, clears cookies and so on) and gives a lot of other nice features. One of the most useful is the ability to execute tests from the command line. It's a typical task that is usually executed on build server on regular or per-commit basis.
David Avendasora 38.1 125
126 The problem is that if you have your tests written with ERSelenium flavor, you won't be able to run them directly with Selenium-RC - as you won't even have a test suite file. But you can do this with StandaloneRunner. To execute the tests you must have Selenium-RC server running in the background. Note that it should be started in windowed mode (not via SSH) - i.e. not in the headless mode. Assuming that you have your application built, you should use the following commands:
127
128 {{code}}
129
130 YourApp.woa/YourApp <tests root folder> <application root url> <selenium-rc server host> <selenium-rc server port> <browser type> \
131 -DWOApplicationClass=er.selenium.rc.StandaloneRunner -Dfile.encoding=utf-8
132
133 {{/code}}
134
135 This will execute the tests using the Selenium-RC server on the specified host and port with the specified browser. The <application root url> will be used as a root url for all urls that are used in tests. Tests from <tests root folder> will be executed (they will be searched for recursively).
136
Pascal Robert 41.1 137 Note, that two last arguments are essential: -DWOApplicationClass substitutes your application's application class with er.selenium.rc.StandaloneRunner, which will do all the testing and then exit without entering WOApplication's requests handling loop. The last argument ensures proper encoding.
David Avendasora 38.1 138
139 Here is the real-world example commands:
140
141 {{code}}
142
143 cd /Library/WebObjects/Applications
144 ./YourApp.woa/YourApp ./YourApp.woa/Contents/Resources/Selenium http://localhost/cgi-bin/WebObjects/YourApp.woa localhost 4444 '*firefox' \
145 -DWOApplicationClass=er.selenium.rc.StandaloneRunner -Dfile.encoding=utf-8
146
147 {{/code}}
148
Pascal Robert 41.1 149 This will execute tests from **/Library/WebObjects/Applications/YourApp.woa/Contents/Resources/Selenium** using the [[http:~~/~~/localhost/cgi-bin/WebObjects/YourApp.woa>>url:http://localhost/cgi-bin/WebObjects/YourApp.woa||shape="rect"]] as the root url in firefox browser using Selenium-RC server on **localhost** on its default port **4444**.
David Avendasora 38.1 150
151 The sample of successful output is:
152
153 {{code}}
154
155 - test '/usr/local/wondercap2/dep/YourApp/14662/dep/dist/YourApp.woa/./Contents/Resources/Selenium/Commenting/LoginViaCommenting.sel' PASSED
156 - test '/usr/local/wondercap2/dep/YourApp/14662/dep/dist/YourApp.woa/./Contents/Resources/Selenium/Commenting/NotifyAboutReplies.sel' PASSED
157 - test '/usr/local/wondercap2/dep/YourApp/14662/dep/dist/YourApp.woa/./Contents/Resources/Selenium/Commenting/SignUpViaCommenting.sel' PASSED
158 - test '/usr/local/wondercap2/dep/YourApp/14662/dep/dist/YourApp.woa/./Contents/Resources/Selenium/Commenting/SuccessfulComment.sel' PASSED
159
160 {{/code}}
161
162 All tests in tests root folder are always executed (even if there are failures). The executed command will fail if one of the tests fails.