Documente Academic
Documente Profesional
Documente Cultură
QA Planet,# 24/3 RT,3rd Floor,SR Nagar,Hyderabad - 500018. Email :Contact@qaplanet.in || Phone :040-40044448 || Mobile :+91 9966723111
QAPlanet
1. Introduction: 2. History of Selenium 3. What is Selenium? 4. Selenium Types: 5. Selenium IDE Installation Steps: 6. IDE Features 7. Recording 8. Selenium Commands Selenese 9. Commonly Used Selenium Commands 10. Locating Elements: 11. Basic Examples: 12. Test Suite Creation: 13. Useful Selenium Add-Ons: 14. about User Extensions 15. Selenium Commands for verification 16. Selenium IDE Commands for handling alerts 17. Java Script 18. Example programs: 19. Selenium Core 20. Selenium-RC 21. Selenium Grid: 22. Advantages and Limitations:
QAPlanet
1. Introduction:
Out of the many open source test automation tools available today, there is one tool that become very popular in recent times Selenium. Selenium is a web application test automation tool which provides many features and a wide range of support which makes it an instant choice for automating most of the web applications. Selenium provides the automation engineer the choice of running the automation scripts in a wide range of browsers and with the language support it has, on wide range of operating systems too. But there are certain things the automation engineer needs to be aware of before he jumps into understanding selenium. The automation engineer needs to have a basic knowledge of the following things: 1. 2. 3. 4. 5. 6. HTML XML Xpaths Document Object Model(DOM) JavaScript (only a basic knowledge on how events are triggered etc.) Any one of the following language to build a full-fledged test suite Perl, Python, Ruby, Java, C#, PHP. 7. Basic object oriented programming concepts. Once we are sure that we have the basics of the above mentioned seven points let us move on into what selenium is all about and various types of selenium.
2. History of Selenium
In 2004 invented by Jason R. Huggins and team. Original name is JavaScript Functional Tester [JSFT] Open source browser based integration test framework built originally by Thoughtworks. 100% JavaScript and HTML Web testing tool That supports testing Web 2.0 applications Supports for Cross-Browser Testing(ON Multiple Browsers) And multiple Operating Systems Cross browser IE 6/7, Firefox .8+, Opera, Safari 2.0+
QAPlanet
3. What is Selenium?
Acceptance Testing tool for web-apps Tests run directly in browser Selenium can be deployed on Windows, Linux, and Macintosh. Implemented entirely using browser technologies o JavaScript o DHTML o Frames
4. Selenium Types:
There are 4 types in Selenium, each for a specific purpose. They are as follows: 1. 2. 3. 4. Selenium IDE Selenium Remote Control Selenium Core Selenium Grid
The more detail information about these will be given in later in the document. But let us have a brief introduction about each of these to make ourselves comfortable. Selenium IDE is a Firefox plugin which is a record replay tool of Selenium. User can record the actions performed on the browser and replay it. User also has an option to write his own scripts, save the scripts and develop test suites using Selenium IDE. Selenium Remote Control on the other hand is used when more robust scripts are to be developed. Using any of the languages listed previously user can build test suites which are robust and can run on different platforms, unlike IDE which can run scripts only on Firefox. Selenium Core usage is similar to Selenium RC except that the scripts which use selenium core can only be run on the server where the web application is deployed. Selenium Grid as the name suggests, is used to organize several Selenium RC's and run the scripts on different machines from a central location where Selenium Grid is available. Now let us get some hands on on Selenium IDE to understand Selenium better.
QAPlanet
QAPlanet
Restart Firefox and you should be able to open it from Tools --> Selenium IDE.
6. IDE Features
Menu Bar
The File menu has options for Test Case and Test Suite (suite of Test Cases). Using these you can add a new Test Case, open a Test Case, save a Test Case, export Test Case in a language of your choice. You can also open the recent Test Case. All these options are also available for Test Suite. The Edit menu allows copy, paste, delete, undo, and select all operations for editing the commands in your test case. The Options menu allows the changing of settings. You can set the timeout value for certain commands, add user-defined user extensions to the base set of Selenium commands, and specify the format (language) used when saving your test cases. The Help menu is the standard Firefox Help menu; only one item on this menuUI-Element Documentationpertains to Selenium-IDE.
Toolbar
The toolbar contains buttons for controlling the execution of your test cases, including a step feature for debugging your test cases. The right-most button, the one with the red-dot, is the record button.
Speed Control: controls how fast your test case runs. Run All: Runs the entire test suite when a test suite with multiple test cases is loaded. Run: Runs the currently selected test. When only a single test is loaded this button and the Run All button have the same effect. Pause/Resume: Allows stopping and re-starting of a running test case. Step: Allows you to step through a test case by running it one command at a time. Use for debugging test cases. TestRunner Mode: Allows you to run the test case in a browser loaded with the Selenium-Core TestRunner. The TestRunner is not commonly used now and is likely to be deprecated. This button is for evaluating test cases for backwards compatibility with
QAPlanet
the TestRunner. Most users will probably not need this button. Apply Rollup Rules: This advanced feature allows repetitive sequences of Selenium commands to be grouped into a single action. Detailed documentation on rollup rules can be found in the UI-Element Documentation on the Help menu. Record: Records the users browser actions.
7. Recording
Many first-time users begin by recording a test case from their interactions with a website. When Selenium-IDE is first opened, the record button is ON by default. If you do not want Selenium-IDE to begin recording automatically you can turn this off by going under Options > Options... and deselecting Start recording immediately on open. During recording, Selenium-IDE will automatically insert commands into your test case based on your actions. Typically, this will include: clicking a link - click or clickAndWait commands entering values - type command selecting options from a drop-down listbox - select command clicking checkboxes or radio buttons - click command
QAPlanet
o Assertions Actions: user actions on application / Command the browser to do something. Actions are commands that generally manipulate the state of the application.
1. Click / Clickandwait 2. Selecting items
a. Assessors: Accessors examine the state of the application and store the results in variables, e.g. "storeTitle". b. Assertions: For validating the application we are using Assertions 1. for verifying the web pages 2. for verifying the text 3. for verifying alerts Assertions can be used in 3 modes: assert verify waitFor Example: "assertText","verifyText" and "waitForText". NOTE: 1. When an "assert" fails, the test is aborted. 2. When a "verify" fails, the test will continue execution 3. "waitFor" commands wait for some condition to become true
QAPlanet
waitForPageToLoad -pauses execution until an expected new page loads. Called automatically when clickAndWait is used. waitForElementPresent -pauses execution until an expected UI element, as defined by its HTML tag, is present on the page. Note: To execute many Selenium commands, Selenium required a target often called it as Element Locators (or calls it as object identification). To get Target element Please install below plug INS 1. For Firefox browser Firebug 2. For IE browser IE Developer Tool bar.
Selenium is identifying the objects by using following Locator strategies. 1. 2. 3. 4. 5. 6. 7. Id = @Id Name = @name Identifier = @id Dom = JavaScript expression Xpath = Xpath expression Link =Text pattern css = css Selector Index
Locating by ID: For instance, your page source could have id and name attributes as follows: 1 <html> 2 <body> 3 <form id="loginForm"> 4 <input name="username" type="text" /> 5 <input name="password" type="password" /> 6 <input name="continue" type="submit" value="Login" /> 7 </form> 8 </body> 9 <html> The following locator strategies would return the elements from the HTML snippet above indicated by line number: id=loginForm (3)
QAPlanet
Locating by Name
The name locator type will locate the first element with a matching name attribute. If multiple elements have the same value for a name attribute, then you can use filters to further refine your location strategy. The default filter type is value (matching the value attribute). 1 2 3 4 5 6 7 8 9 10 <html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html>
name=username (4) name=continue value=Clear (7) name=continue Clear (7) name=continue type=button (7)
Locating by XPath
XPath is the language used for locating nodes in an XML document. We are using XPath is when you dont have a suitable id or name attribute for the element you wish to locate. 1 <html> 2 <body> 3 <form id="loginForm"> 4 <input name="username" type="text" /> 5 <input name="password" type="password" /> 6 <input name="continue" type="submit" value="Login" /> 7 <input name="continue" type="button" value="Clear" /> 8 </form> 9 </body>
QAPlanet
10 <html>
xpath=/html/body/form[1] (3) - Absolute path (would break if the HTML was changed only
slightly)
//form[1] (3) - First form element in the HTML xpath=//form[@id='loginForm'] (3) - The form element with attribute named id and the value
loginForm
xpath=//form[input/\@name='username'] (4) - First form element with an input child element
value username
//form[@id='loginForm']/input[1] (4) - First input child element of the form element with
value continue and attribute named type and the value button
//form[@id='loginForm']/input[4] (7) - Fourth input child element of the form element with
attribute named id and value loginForm Example for Xpath: Let us take the source of google.com to make our task simpler. The first three locator strategies state that, if any element having the name, id or identifier attribute Observe the source code of below. After we click on the Google Search button we move to the results page, now let us understand how the first link is identified from the below source code. <div id="res" class="med"> <h2 class="hd">Search Results</h2> <div> <ol> <div/> <div/> <li class="g w0"> <h3 class="r"> <a class="l" onmousedown="return rwt(this,'','','res','1','AFQjCNFp1UrvQWdtIVY_6kOkEDVmdSnig','&sig2=HRDAzRP8Pz96kL3VNCyX1A')" href="http://www.testinggeek.com/in dex.php/testing-tools/test-execution/97-selenium-ide-introduction"> <em>Selenium IDE</em> - Introduction </a>
QAPlanet
</h3>
As you see above the anchor tag does not have anything that can identify the element uniquely, hence we take the Xpath here. For that we need to see which tag of the upper hierarchy of the element has a unique attribute to identify it uniquely. We deduct the Xpath as
//div[@id='res']/div[1]/ol/li[1]/h3/a The Xpath should always start from a hierarchy from where the element can be identified uniquely. For example there is an element which has the attributes as follows <input class=username type=> and say the class attribute is unique to this tag then the element locator would be //input[@class=username].This is also Xpath but it is at the same level.
1 <html> 2 <body> 3 <p>Are you sure you want to do this?</p> 4 <a href="continue.html">Continue</a> 5 <a href="cancel.html">Cancel</a> 6 </body> 7 <html> link=Continue (4) link=Cancel (5)
Locating by DOM
The Document Object Model represents an HTML document and can be accessed using JavaScript. This location strategy takes JavaScript that evaluates to an element on the page, which can be simply the elements location using the hierarchical dotted notation. Since only dom locators start with document, it is not necessary to include the dom= label when specifying a DOM locator.
QAPlanet
1 2 3 4 5 6 7 8 9 10
<html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html>
dom=document.getElementById('loginForm') (3) dom=document.forms['loginForm'] (3) dom=document.forms[0] (3) document.forms[0].username (4) document.forms[0].elements['username'] (4) document.forms[0].elements[0] (4) document.forms[0].elements[3] (7)
Locating by CSS
CSS (Cascading Style Sheets) is a language for describing the rendering of HTML and XML documents. CSS uses Selectors for binding style properties to elements in the document. 1 2 3 4 5 6 7 8 9 10 <html> <body> <form id="loginForm"> <input class="required" name="username" type="text" /> <input class="required passfield" name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html>
css=form#loginForm (3) css=input[name="username"] (4) css=input.required[type="text"] (4) css=input.passfield (5) css=#loginForm input[type="button"] (4)
QAPlanet
QAPlanet
TC#2: 1: Open Firefox Web Browser 2: In the address bar, Type http://www.yahoo.com 3: In the search input button, Type "energy efficient" 4: Click on the "Web Search" submit button 5: Wait for Search Results to come on "http:/search.yahoo.com" 6: Verify "energy efficient" text is present anywhere in the search results: (Select and highlight anywhere in the search results page, "energy efficient" text is present.) 7: Verify the browsers title has the value "energy efficient - Yahoo! Search Results" 8. End.
TCS #3: File New Test Case (Make Selenium IDE in Record Mode) Open http://www.ge.com Go all the way down, click on the Contact Information link Click on Feedback & Inquiries link Consumer/Other (Leave the default option) Select a Subject (Other) Select a Country (U.A.E) Email (type xxx@yyyy.com) Comments or Questions (type Just testing) Submit (click once) In the result page, highlight Thank you for taking the time to contact GE Right Click and Select waitForTextPresent Thank you for taking the time to contact GE Highlight Feel free to continue browsing. Right Click and Select VerifyTextPresent Feel free to continue browsing. Right Click on GE.com Home Page link and Select verifyElementPresent link=GE.com Home Page
QAPlanet
QAPlanet
<html> <head> <title>Test Suite Function Tests - Priority 1</title> </head> <body> <table> <tr><td><b>Suite Of Tests</b></td></tr> <tr><td><a href= "./Login.html" >Login</a></td></tr> <tr><td><a href= "./SearchValues.html" >Test Searching for Values</a></td></tr> <tr><td><a href= "./SaveValues.html" >Test Save</a></td></tr> </table> </body> </html>
A file similar to this would allow running the tests all at once, one after another, from the Selenium-IDE. Edit Selenium Test Suite If you have only one test case in your test suite, open the GE_TS1.html in NotePad. Add a line of code before the end of </tbody> tag
<tr><td><a href="GE_TC2.html">GE Test Case 2</a></td></tr> File save then Exit. Now you can double click and see the entire test suite in your browser. You can Edit the Test Suite in notepad when you want to Change the name of the test cases Add, Remove, and Rename test cases Arrange order of test cases.
QAPlanet
There are a number of useful extensions created by users. Perhaps the most popular of all Selenium-IDE extensions is one which provides flow control in the form of while loops and primitive conditionals. This extension is the goto_sel_ide.js. Steps:
Download goto_sel_ide.js file. Save into selenium core extensions folder Selenium-IDEs Options=>Options=>General tab Browse extension file
Click on OK Button
QAPlanet
verifyTextPresent The command verifyTextPresent is used to verify specific text exists somewhere on the page.
VerifyElementPresent Use this command when you must test for the presence of a specific UI element, rather then its content.
verifyElementPresent can be used to check the existence of any HTML tag within the page. You can check the existence of links, paragraphs, divisions <div>, etc. Here are a few more examples.
VerifyText Use verifyText when both the text and its UI element must be tested. verifyText must use a locator. If you choose an XPath or DOM locator, you can verify that specific text appears at a specific location on the page relative to other UI components on the page.
storeElementPresent This corresponds to verifyElementPresent. It simply stores a boolean valuetrue or false depending on whether the UI element is found.
QAPlanet
storeText StoreText corresponds to verifyText. It uses a locater to identify specific page text. The text, if found, is stored in the variable. StoreText can be used to extract text from the page being tested. storeEval StoreEval allows the test to store the result of running the script in a variable.
This next example illustrates how a JavaScript snippet can include calls to methods, in this case the JavaScript String objects toUpperCase method and toLowerCase method.
QAPlanet
not specified to be of type script. However, in this case, special syntax is requiredthe JavaScript snippet must be enclosed inside curly braces and preceded by the label javascript, as in javascript {*yourCodeHere*}. Below is an example in which the type commands second parameter value is generated via JavaScript code using this special syntax:
JavaScript Evaluation 1. You can use any of the following Eval commands assertEval, assertNotEval, VerifyEval, verifyNotEval, waitForEval, waitForNotEval, storeEval 2. You can use any of the following Expression commands assertExpression, assertNotExpression,verifyExpression, verifyNotExpression, waitForExpression, waitForNotExpression, storeExpression, store and WaitForCondition
Exercises: TC#4: Open a specific URL (http://www.barnesandnoble.com/) Search for a specific text (Javascript) in #1 page Sort by Prizev How do you check Online Price: $$$ is in sorted order? In this case I have decided to check the first two Amounts displayed on that page are in the ascending order. The first value is A, the second value is B
QAPlanet
If A <= B then we assume the first two listed prices are in ascending order. Now get the third value C If B <= C then we assume that A, B and C are in ascending order. (i.e., A <= B <=C )
QAPlanet
To Handle Alerts: AlertPresent verifyAlertPresent() The best way to check the alerts are using this command This command never throws an exception
Other AlertPresent Commands are: storeAlertPresent ( seleniumVariableName ) assertAlertPresent ( ) assertAlertNotPresent ( ) verifyAlertNotPresent ( ) waitForAlertPresent ( ) waitForAlertNotPresent ( )
Ex1:
Ex 2:
QAPlanet
goBack: goBack and goBackAndWait are the two commands simulates a user clicking on the back button of the browser. waitForPopup waitForPopUp ( windowID,timeout ) and selectWindow ( windowID ) are the two commands allows you to test the Popup Windows. selectWindow selects a specific Popup, use null to select Parent window. Download Ex1.html to Ex3.html under wait for Popup, Open CreatePopUps.html in Firefox browser. Record the test as listed below: Click Create Windows button Select win1, click the button Click and get the Welcome Message, minimize win1 Select win3, select any option, press Submit button Go back to the parent window, press close button
Ex:
QAPlanet
Syntax: command: allowNativeXpath Target: True 2. assertAlert To Verify the Java Script Pop-Ups, similarly assertConfirmation. 3. answerOnNextPrompt(answer) Arguments:
Instructs Selenium to return the specified answer string in response to the next JavaScript prompt [window.prompt()].
QAPlanet
4. assertAlertPresent() Generated from isAlertPresent() Returns: true if there is an alert Has an alert occurred? This function never throws an exception 5. assertAllButtons(pattern) Generated from getAllButtons() Returns: the IDs of all buttons on the page Returns the IDs of all buttons on the page. 6. assertAllFields(pattern) Generated from getAllFields() Returns: the IDs of all field on the page Returns the IDs of all input fields on the page.
7. assertAllLinks(pattern) Generated from getAllLinks() Returns: the IDs of all links on the page Returns the IDs of all links on the page. Similarly some other commands: assertAllWindowIds, assertAllWindowNames, assertAllWindowTitles, assertAttribute, assertAttributeFromAllWindows. assertNotAllButtons, assertNotAllFields,assertNotAllWindowIds, assertNotAllWindowNames, assertNotAllWindowTitles, assertNotAttribute, assertNotAttributeFromAllWindows. assertElementPresent(locator) Generated from isElementPresent(locator) Arguments:
Returns: true if the element is present, false otherwise Verifies that the specified element is somewhere on the page.
QAPlanet
Similarly some other commands: assertElementNotPresent assertEval(script, pattern) Generated from getEval(script) Arguments:
Returns: the results of evaluating the snippet Gets the result of evaluating the specified JavaScript snippet. The snippet may have multiple lines, but only the result of the last line will be returned. Similarly: assertExpression, assertHtmlSource(pattern) Generated from getHtmlSource() Returns: the entire HTML source Returns the entire HTML source between the opening and closing "html" tags. assertLocation(pattern) Generated from getLocation() Returns: the absolute URL of the current page Gets the absolute URL of the current page. assertNotXpathCount(xpath, pattern) Generated from getXpathCount(xpath) Arguments:
xpath - the xpath expression to evaluate. do NOT wrap this expression in a 'count()' function; we will do that for you.
Returns: the number of nodes that match the specified xpath Returns the number of nodes that match the specified xpath, eg. "//table" would give the number of tables. Similarly: assertXpathcount assertText(locator, pattern) Generated from getText(locator) Returns: the text of the element Gets the text of an element. This works for any element that contains text. This command uses either the textContent (Mozilla-like browsers) or the innerText (IE-like browsers) of the element, which is the rendered text shown to the user. Similarly: assertTitle, assertTable, assertSpeed, assertPromt,assertVisible, aasertValue assignId(locator, identifier)
QAPlanet
Arguments:
locator - an element locator pointing to an element identifier - a string to be used as the ID of the specified element
Temporarily sets the "id" attribute of the specified element, so you can locate it in the future using its ID rather than a slow/complicated XPath. This ID will disappear once the page is reloaded. Similarly: assignIdAndWait captureEntirePageScreenshot(filename, kwargs) Arguments:
filename - the path to the file to persist the screenshot as. No filename extension will be appended by default. Directories will not be created if they do not exist, and an exception will be thrown, possibly by native code. kwargs - a kwargs string that modifies the way the screenshot is captured. Example: "background=#CCFFDD" . Currently valid options:
background the background CSS for the HTML document. This may be useful to set for capturing screenshots of less-than-ideal layouts, for example where absolute positioning causes the calculation of the canvas dimension to fail and a black background is exposed (possibly obscuring black text). Saves the entire contents of the current window canvas to a PNG file. Contrast this with the captureScreenshot command, which captures the contents of the OS viewport (i.e. whatever is currently being displayed on the monitor), and is implemented in the RC only. Currently this only works in Firefox when running in chrome mode, and in IE nonHTA using the EXPERIMENTAL "Snapsie" utility. The Firefox implementation is mostly borrowed from the Screengrab! Firefox extension. Please see http://www.screengrab.org and http://snapsie.sourceforge.net/ for details. Similarly: captureEntirePageScreenshotAndWait check(locator) Arguments:
Check a toggle-button (checkbox/radio) Similarly: checkAndWait chooseCancelOnNextConfirmation(),chooseOkOnNextConfirmation(), chooseOkOnNextConfirmationAndWait Click, ClickAndWait, ClickAt, ClickAtAndWait, Close.
QAPlanet
contextMenu, contextMenuAndWait, contextMenuAt, contextMenuAtAndWait. createCookie, createCookieAndWait deleteAllVisibleCookies() Calls deleteCookie with recurse=true on all cookies visible to the current page. As noted on the documentation for deleteCookie, recurse=true can be much slower than simply deleting the cookies using a known domain/path. Similarly: deleteAllVisibleCookiesAndWait, deleteCookie, deleteCookieAndWait, doubleClick(locator) Arguments:
Double clicks on a link, button, checkbox or radio button. If the double click action causes a new page to load (like a link usually does), call waitForPageToLoad. Similarly: doubleClickAndWait, doubleClickAt, doubleClickAtAndWait. echo(message) Arguments:
Prints the specified message into the third table cell in your Selenese tables. Useful for debugging. fireEvent(locator, eventName) Arguments:
locator - an element locator eventName - the event name, e.g. "focus" or "blur"
Explicitly simulate an event, to trigger the corresponding "onevent" handler. Similarly: fireEventAndWait focus(locator) Arguments:
Move the focus to the specified element; for example, if the element is an input field, move the cursor to that field. Similarly: focusAndWait goBack() Simulates the user clicking the "back" button on their browser.
QAPlanet
ignore - boolean, true means we'll ignore attributes without value at the expense of xpath "correctness"; false means we'll sacrifice speed for correctness.
Wait for the specified amount of time (in milliseconds) refresh() Simulates the user clicking the "Refresh" button on their browser. Similarly: refreshAndWait removeAllSelections(locator) Arguments:
Unselects all of the selected options in a multi-select element. Similarly: removeAllSelectionsAndWait, removeSelection, removeSelectionAndWait removeScript(scriptTagId) Arguments:
Removes a script tag from the Selenium document identified by the given id. Does nothing if the referenced tag doesn't exist. Similarly: removeScriptAndWait runScript(script) Arguments:
Similarly: runScriptAndWait
QAPlanet
selectLocator - an element locator identifying a drop-down menu optionLocator - an option locator (a label by default)
Select an option from a drop-down using an option locator. Similarly: selectAndWait, selectFrame, selectPopUp, selectPopUpAndWait, selectWindow, setTimeout(timeout) Arguments:
timeout - a timeout in milliseconds, after which the action will return with an error
Specifies the amount of time that Selenium will wait for actions to complete. Actions that require waiting include "open" and the "waitFor*" actions. store(expression, variableName) Arguments:
expression - the value to store variableName - the name of a variable in which the result is to be stored.
This command is a synonym for storeExpression. Similarly: storeAlert, storeAlertPresent, storeAllButtons, storeAllFields, storeAllLinks, storeAllWindowIds, storeAllWindowNames, storeAllWindowTitles, storeAttribute, storeBodyText, storeConfirmation, storeConfirmationPresent etc.. storeCookie, storeCookieByName, storeCookiePresent, etc storeEval(script, variableName) Generated from getEval(script) Arguments:
Returns: the results of evaluating the snippet similarly: storeExpression etc storeXpathCount(xpath, variableName) Generated from getXpathCount(xpath) Arguments:
xpath - the xpath expression to evaluate. do NOT wrap this expression in a 'count()' function; we will do that for you.
QAPlanet
Returns: the number of nodes that match the specified xpath Returns the number of nodes that match the specified xpath, eg. "//table" would give the number of tables. submit(formLocator) Arguments:
Submit the specified form. This is particularly useful for forms without submit buttons, e.g. single-input "Search" forms. Similarly: submitAndWait type(locator, value) Arguments:
Sets the value of an input field, as though you typed it in. Similarly: typeAndWait uncheck(locator) Arguments:
Uncheck a toggle-button (checkbox/radio) Similarly: uncheckAndWait verifyAlert(pattern) Generated from getAlert() Returns: The message of the most recent JavaScript alert Similarly: verifyAlertNotPresent, verifyAlertPresent, verifyAllButtons, verifyAllFields, verifyAllLinks, verifyAllWindowNames, verifyAllWindowTitles etc.. verifyConfirmation(pattern) Generated from getConfirmation() Returns: the message of the most recent JavaScript confirmation dialog Retrieves the message of a JavaScript confirmation dialog generated during the previous action. Similarly: verifyConfirmationNotPresent, verifyConfirmationPresent verifyText(locator, pattern) Generated from getText(locator) Arguments:
QAPlanet
Returns: the text of the element Similarly: verifyTitle,verifyTable etc.. waitForAlert(pattern) Generated from getAlert() Returns: The message of the most recent JavaScript alert Retrieves the message of a JavaScript alert generated during the previous action, or fail if there were no alerts. Similarly: waitForAllButtons, waitForAllFields, waitForAllLinks, waitForAllWindowIds, waitForAllWindowNames, waitForAllWindowTitles, waitForConfirmationPresent() Generated from isConfirmationPresent() Returns: true if there is a pending confirmation Has confirm() been called? Similarly: waitForCondition waitForTitle(pattern) Generated from getTitle() Returns: the title of the current page Gets the title of the current page. Similary: waitForTable etc
External java script;- (java script with in the page) Script.js(file name) document.write(JS from script.js page<br>); Ex:-
QAPlanet
<html> <head>
<script src=script.js type=text/javascript language=javascript> </script> </head> </html> Variables:Ex:a=10; document.write(a); Ex;a=10; document.write(a); a=java script; /*modifying variable */ document.write(a); Comment lines - Two types // -> single line comment /* multiline comments */ Detecting errors in JavaScript (fire fox);In fire fox browser Go to tools Select error console.
Data types:In JScript, there are three primary data types, two composite data types, and two special data types. The primary (primitive) data types are:
Ex:-
QAPlanet
Concatenation:
Ex 3:document.write(parseint(12cows)); document.write(=); document.write(parseInt(12 cows); document.write(<br>); document.write(parseInt(12cows)=+parseInt(12cows))+(<BR.);
Syntax:-
ParseFloat:Ex 1:- f=12.5 tonnes Document.write(parseFloat(f)); Output;- 12.5 Ex2:- document.write(parseFloat(12.5 tonnes)=+parseFloat(12.5 tonnes)); Ex3:- img=<img src=chicken.JPEG>; Document.write(img); Ex 4:- for string concatenation:a=welcome to NageshQTP b=online training c=a+b; c=a+ +b;
document.write(c);
Operators:
QAPlanet
SELENIUM Handbook - -a basic referential guide to Selenium -----------------------------------------------------------------------------------------------------------------------------------------Arthemetic operators: (+,-,*,/,%) Relational operators: (<,>,<=,>=) Comparision operators: (==,===,!=,!==) Iteration operators: (++,--) Logical operators: (&&,||,1) Conditional operators: (?:) (or) Ternary operators String Concatination: +
Iteration operators:(++x) X=10; Y=++x; Output= starts from 11, 12, Post increment:(x++) X=10; Y=x++; Output= starts from 10, 11, Pre increment:Ex:(post increment) X=10; document.write(x=+(x)+<br>); Output : x=10 document.write(x=+(x++)+<br>); Output :x++=10 document.write(x=+(x)+<br>);//x=11 Ex:- (pre increment) X=10; D.W(x++(x)+<br>; x=10 D.W(x=+(++x)+<br>); x=11 D.W(x= +(x)+<br>); x=11 -> Pre decrementation:X=10 d.w(x=+(--x)+<br>); x=9 -> post decrementation:X=10 d.w(x=+(x)+<br>); x=10 d.w(x--=+(x--)+<br>); x=10 d.w(x=+(x)+<br>); x=9 Logical operators:x y X&&y t t t
X||y t
QAPlanet
t f f Ex:-
f t f
f f f
t t f
d.w(true&&false=+(true&&false)+<br>); =false d.w(true|| false=+(true||false)+<br>); =true Conditional operators:Conditional operators is used for determining execution of statement based on the condition Syntax:(condition)? true Black:False Black; Ex:- x=9; Type=(x%2==0)?Even:odd;
Control structure:Control structures is divided into two ways 1. Conditional Based 2. Loop Based 1. Conditional based :1. 2. 3. 4. 5. IF, IF else IF-else IF ladder Nested if and Switch cases
IF:If(condition) { code } Ex:var d=newData() Var time=d.getHours() If(time<10) { Document.write(<b> Good Morning</b>); IF-else:Syntax:If(condition) { Code
QAPlanet
} Else { Code }
Ex:Age=15; If(Age<=10) { d.w(Boy); } else { d.w(young); } If-else IF Ladder:f(condition) { Code; } Else if(con 2) { code; } Else if(con 3) { Code; } ..n; Ex:Perc=60; If(perc>=70){ grade=A;} else if(perc>=60){grade =B;} else if(perc>=50){grade=c;} Nested IF:If(condition1) { If(condition2) { Code; } else { Code; } } Ex:A=12; B=13; If(a>=b) { If(a>b) { d.w(A is greater<br>);
QAPlanet
} else { d.w(A and B are Equal<br>); } } else{ d.w(A is less); } Switch:Switch(expression) { Case value: Code; Break; Case val2: Code; Break; Default: Code; Break; } Ex:Dya=3; Switch(day){ Case 1: d.w(Monday <br>); break; case 2: d.w(Tuesday <br>); break: . . . Case 7: d.w(Sunday <br>); break; default: d.w(Enter valid number<br>);break; }
Arrays:-
QAPlanet
SELENIUM Handbook - -a basic referential guide to Selenium -----------------------------------------------------------------------------------------------------------------------------------------Array is a collection of similar elements Syntax for creating the array is
<var name>=new Array (value 1,value 2,value n); Ex:- users=new Array(sree,siva,mahe); To get length of array:users.length: 3(//maximum numerical index +1) users[0];//sree users[1];//siva we can replace value of array users[1]=ram; we can add one more field to the array users[3]=rama; To get array count users[users.length]=mary; [Appending]. Ex:Tags=new Array(barbie,Teddy,mickey,donald); d.w(toys.length=+toys.length+<br>);//4 d.w[toys[2]=+toys [2]+<br>);//mickey d.w[toys=+toys+<br>);//B,T,M,D. toys[3]+=Duck; d.w(toys=+toys+<br>);// B,T,M,D,D toys[toys.length]=Newtoy; d.w(toys=+toys+<br>);//B,T,M,D,D,N Multidimentional arrays:Ex:- a=new Array(2,4); B=new Array(6,8); Multi=new Array(a,b); B=new Array(1,name)); d.w(multi[0][0]=tmulti[0][1]+<br>);
Ex:1 i=1;
QAPlanet
while(i<=3) { d.w(i); i++; } Ex:-2 Mon=new Array (jan,feb,mar,..dec); m=0; While(m<mon.length) { d.w(month name=+mon[m]+<br>); mi++; } Do-while:Do { Code; }while(condition) Ex:i=0 Do { d.w(i); i++; }while(i<=5); For:For(initialization,condition,incrementation) { Code } Ex:1For(i=1;i<=3;i++) { d.w(i); } Ex:-2 Mon=new Array(jan,feb,mar,dec); For(i=0;i<mon.length:i++) { d.w(mon[i]+<br>); } For-in:Syntax:For(index in arreg-nmae)
QAPlanet
User defined functions:A user define function is re-usable block of code. Functions can be classified into fur types, based on arguments and values.
Type 1:Syntax:-
function function name() { Code; [return<value>;] } Ex:- for type 1 Function welcome() { document.write(welcome to the site%); } Welcome(); X=welcome();//user define Document write(x=+x+,<br>);
QAPlanet
ex:- for type 2 function welcome(user) { Document.write(welcome+user+<br>); } Welcome(sree); Type 3-functions:Function x() { return 9; } P=x(); Ex:- function x() { d.w(first value is); return 9; d.w(last value is); calling function:a=x(); d.w(a=+a+<br>); output:- first+val is a=9; Type 4:- function with arguments and return values Function square(x) { Return(x*x); } d.w(suqre(2));//4 d.w(square(suqre(2));//16 Built in methods:Date:-
D=new Date(); d.getDate();//1-11 d.getDay();//0-6 d.getMonth();//0-11 d.getYear(); d.getFullyear;//2009 d.getHours();//0-23 d.getMinutes();//0-59 d.getSeconds();//0-59 Ex:- for Built-in Function p(text);
QAPlanet
Math;max(12,14);//14 Math;min(12,14);//12 Ex:Function p(text) { d.w(text+<br>); } //math.max(num1,num2);-> num P(math.max(12,14)=+Math.max(12,14)); //Math.min(num1,num2);->num P(math.min(12,14)=+Math.min(12,14)); //math.floor(num);->Lower limitation integer value P(math.floor(12.94)=+Math.floor(12.94));//12 //math.ceil(num);->upper limitation integer value P(math.ceil(12.14)=+Math.ceil(12.14));//13 //math.round(num)-> if >=.5 ceil,<.5 floor P(math.round(12.14)=+Math.round(12.14)); P(math.round(12.14)=+Math.round(12.54)); //math.random()->0 and 1 P(math.random()=+math.random()); String methods:Function p(text) { Document.write(text+<br>); } Str=javascript; P(str=+str); P(length=+str.length()); P(upper=+str.touppercase()); P(lower=+str.tolowercase()); P(str.substr=+str.substr(4)); P(str.substr(4,2)=+str.substr(4,2));
Replace of search string replacement(Replace) P(str.replace( a,_)=+str.replace(a,_); p(str.replace( a,_)=+str.replace(A,_);
Regular Expression:-
QAPlanet
Ex:- P(reg(a$,abc)=+reg(a$+abc)); Output:- false P(reg(c$,abc)=+reg(c$+abc)); Output:- True ->(.) mathes any single character(alphabet,number, special character, space)(if you want to verify only single character we can use dot) Ex:- P(reg(^.$,abc)=+reg(^.$+abc)); output:- false P(reg(^.$,a)=+reg(^.$+a)); Output:- True P(reg(\.doc$,resume.doc)=+reg(\.doc+resume.doc));
+ one or many times(if you want to verify any single char,if may be one time else many times,we can use +)
QAPlanet
SELENIUM Handbook - -a basic referential guide to Selenium -----------------------------------------------------------------------------------------------------------------------------------------[] use for specifying range of char allowe for the exp.
[a-z] [A-Z] [0-9] [abcd] [a-zA-Z0-9-> Alphanumeric Ex:- P(reg(^[a-z]${3},abc)=+reg(^[a-z]${3}+abc)); Output:- True P(veg(^[a-z]${3],ABC)=+reg(^[a-z]${3}+ABC));
\d -- matches with any digit(0-9) \D matches a non-digit \s -- matches a space \S -- matches any non-space \w -- matches word boundary(alphanumeric and under square) \W -- non word boundary | -- or () -- matches sub expressions([] [] {})
Ex:- for mobile validation Function isMobile(num) { Num=num.toString() Exp=^[98][0-9]{9}$; Return reg(exp,num); ] Mobile=8876543210; P(ismobile(mobile)?validMobile:invalid); Ex:-2 for usMobile(124-136-106205) Function isUsPhone(ph) { Return reg(^[0-9]{3}[\-]){2}[0-9]{6}$,ph); } Phone=234-345-234567; P(isUsPhone(phone)/valid:invalid; Ex 3:- Email id <html> <head> <script> Function isEmail(mail) { Return reg(^[a-zA-Z0-9]\\w{3,}\.\\a{2,}@[a-zA-Z0-9\-]{2,}\.[a-zA-Z\.]{2,}$,mail); } Ma=Sridhar.metukuru@gmail.com; P(isEmail(ma?valid:invalid; </script> </head> </html> Ex:- User name Function isUser(name) {
QAPlanet
return reg(^[a-zA-Z][\.][a-zA-Z]{5},name); } Name=pradeep; P(isuser)(name)?valid:invalid; Ex:Function isUser(name) { return reg(^[a-zA-Z][a-zA-Z\.]{5,},name); } Name=Pradeep; P(isuser(name)?valid:invalid);
QAPlanet
GE Test Case2 clickAndWait assertTitle clickAndWait assertTitle pause select select type type clickAndWait
//div[@id='ge_footer']/ul/li[2]/a GE Contact Information: Web Questions, Online Help, Press Contacts link=Feedback and Inquiries Feedback & Inquiries : Contact Information : GE 3000 contact_subject contact_country contact_email contact_comments //form[@id='contact_form']/p/input Thank you for taking the time to contact GE. Feel free to continue browsing label=Other label=United States testing@test.com No questions.
verifyTextPresent verifyTextPresent
Tc# 3: Verify alerts Age Test Case open assertTitle verifyTextPresent type click open type click deleteCookie type click file:///C:/Javascript/Class%20Ex/Ex16.html?txtAge=101&=Submit Age Problem Enter Your Age idAge -1 idSubGo Infant idAge 5 idSubGo Kid idAge 20 idSubGo
QAPlanet
Age Test Case assertAlert type click assertAlert type click assertAlert type click assertAlert type check pause clickAndWait assertAlert
Adult idAge idSubGo Senior idAge idSubGo Grand Senior idAge idSubGo I hate this life idAge idSubGo 5000 idSubGo Something wrong, enter your right age!
55
75
110
www
Tc# 4: Wait for Text Present TC_Google_EE open type clickAndWait waitForTextPresent assertTitle http://www.google.com/ q btnG energy efficiency energy efficient - Google Search energy efficient
Tc #5: Creating Variables and storing data and calling multipletimes TestCase_HelloWorld open store echo answerOnNextPrompt click waitForPrompt file:///C:/2009%20Selenium/Day3/Ex/HelloWorld.html Kangeyan vName ${vName} ${vName} link=Click here to enter your name Please enter your name.
QAPlanet
TestCase_HelloWorld echo ${vName} createCookie idName TC# 6: Reviewed Test Case Barnes and Noble Sorted Order open http://www.barnesandnoble.com/index.asp type search-input clickAndWait quick-search-button pause 10000 clickAndWait link=Price //div[@id='bs-centerstoreText col']/div[3]/div[1]/div[2]/div/div/div/ul[1]/li[2]/strong echo ${T1} xpath=id('bs-centerstoreText col')/div[3]/div[3]/div[2]/div/div/div/ul[1]/li[1]/strong echo ${T2} //div[@id='bs-centerstoreText col']/div[3]/div[5]/div[2]/div/div/div/ul[1]/li[1]/strong echo ${T3} var A= new Number("${T1}".substr(1));var B=new storeEval Number("${T2}".substr(1)); var Result1=false; if (A<=B) Result1=true;Result1 echo ${T4} var B= new Number("${T2}".substr(1));var C=new storeEval Number("${T3}".substr(1)); var Result2=false; if (B<=C) Result2=true;Result2 echo ${T5} storeEval var Result1= new Boolean("${T4}");Result1 echo ${R1} storeEval var Result2= new Boolean("${T5}");Result2 echo ${R2} var Result1= new Boolean("${T4}");var Result2=new storeEval Boolean("${T5}"); Result1 && Result2 store true echo ${T6} verifyExpression ${T6}
${vName}
javascript
T1
T2
T3
T4
T5
R1 R2
T6 T7 ${T7}
QAPlanet
Reviewed Test Case Barnes and Noble Sorted Order echo ${T7} var isSorted = new Boolean("${T6}"); var strResult ='Not in Sorted storeEval vSorted Order'; if (isSorted) strResult='Ascending Order'; strResult echo ${vSorted}
Tc# 7: Example For Alert Massege Test Case Alert Button Click open click assertAlert file:\\C:\2009 Selenium\Day 3\Ex\ClickAlert.html //input[@value='Click and get the Welcome Message'] Welcome to Portnov!
Tc# 8: Example For goBackAndWait Test Case Go Back And Wait open file:\C:\2009 Selenium\Day 3\Ex\SelectAWebSite.html select OptWeb clickAndWait btnGo assertTitle Google goBackAndWait select OptWeb clickAndWait btnGo Career Training & Career Change: Software Testing and assertTitle Software QA (Quality Assurance) @ Portnov Computer School goBackAndWait select OptWeb clickAndWait btnGo assertTitle Microsoft Corporation goBackAndWait select OptWeb clickAndWait btnGo assertTitle Yahoo!
label=Google
label=Portnov
label=Microsoft
label=Yahoo
QAPlanet
Tc#9: Example for Alert conformation Reviewed Test Case Popup open click waitForPopUp waitForPopUp waitForPopUp selectWindow click assertAlert selectWindow click click assertConfirmation assertAlert selectWindow click file:\\C:\2009 Selenium\Day 3\Ex\CreatePopUps.html winBut win1 win2 win3 name=win1 //input[@value='Click and get the Welcome Message'] Welcome to Portnov! name=win3 //input[4] Submit Are you sure you want to submit this answer? submitted null //input[@name='winBut' and @value='Close Windows'] 30000 30000 30000
Regular Expression Tc#10: Verify Page Title Reviewed Test Case Window Name Check open click assertAlert assertAlert file:///C:/2009%20Selenium/Day%204/Ex/ShowWinName.html winBut regex:Ex1.html win1 regex:Ex2.html win2
QAPlanet
Tc#11: Regular Expression Reviewed Test Case RegEx Email Check open file:///C:/2009%20Selenium/Day%204/Ex/UserInputForm.html type txtName type txtEmail click //input[@value='Submit'] verifyTable //form[@id='frm']/table.1.2 verifyTable //form[@id='frm']/table.2.2 storeValue txtName echo ${selName} storeValue txtEmail echo ${selEmail} assertEval storedVars['selName'] assertEval javascript:jStr=storedVars['selEmail']; jStr.toLowerCase()
Name and Email are stored in a Selenium Variable Use echo to see the values in Log
Narrating Test Cases file:///C:/2009%20Selenium/Day%204/Ex/Narrating Test open Cases.html type txtName kangs p type txtEmail KANGS@YAHOO.COM
QAPlanet
Narrating Test Cases storeValue txtName echo ${selName} storeValue txtEmail echo ${selEmail} click //input[@value='Submit'] verifyTable //form[@id='frm']/table.1.2 verifyTable //form[@id='frm']/table.2.2 Regular Expression Testing
selName selEmail
Valid Valid
Name is tested with regex:\w+\s\w+ Email is first converted into lower case then tested using regex.
Verify Text with exact spelling "Name" using XPath Highlight a text using XPath
assertElementPresent idNameDisp assertElementPresent idEmailDisp Tc#11: Test Case DevryPopupWindows Close http://www.devryopen degrees.com/7x/prequal.jsp;jsessionid=GYW5fw1VxepITK3Fi7CXsg**.app8all1?redirected=redirect&CLK=0&CCID=&QTR=&ZN=&ZV=&KY_T= refresh setSpeed 3000 assertTitle DeVry Online Focus Site click //div[@id='footerlogo']/table/tbody/tr[1]/td[1]/a[1]/u
QAPlanet
Test Case DevryPopupWindows Close waitForPopUp Thandie selectWindow name=Thandie assertTitle Accreditation - DeVry University click //html/body/table/tbody/tr[4]/td/a selectWindow null click //div[@id='footerlogo']/table/tbody/tr[1]/td[1]/a[1]/u waitForPopUp Thandie selectWindow null pause 10000 click //div[@id='footerlogo']/table/tbody/tr[1]/td[1]/a[2]/u waitForPopUp Thandie selectWindow name=Thandie assertTitle Programs-DeVry University click //html/body/table[2]/tbody/tr/td/p/a selectWindow null click //div[@id='footerlogo']/table/tbody/tr[1]/td[2]/a[1]/u waitForPopUp Thandie selectWindow name=Thandie assertTitle Your California Privacy Rights click //html/body/table/tbody/tr[2]/td/a selectWindow null click //div[@id='footerlogo']/table/tbody/tr[1]/td[2]/a[2]/u waitForPopUp Thandie selectWindow name=Thandie assertTitle Privacy Policy - DeVry University click //html/body/table/tbody/tr[2]/td/a selectWindow null Tc#12: Verify Page Load Time Test Case for PageLoadTime_Simple open storeEval refresh waitForPageToLoad 3000 http://www.yahoo.com/ (new Date()).getTime() StartTime
30000
30000
30000
30000
30000
QAPlanet
Test Case for PageLoadTime_Simple storeEval echo echo storeEval echo storeEval open waitForPageToLoad storeEval storeEval echo (new Date()).getTime() ${StartTime} ${EndTime} (${EndTime}-${StartTime})/1000 ${PageLoadTime} Seconds (new Date()).getTime() http://www.yahoo.com/ 3000 (new Date()).getTime() (${EndTime}-${StartTime})/1000 ${PageLoadTime} Seconds EndTime PageLoadTime StartTime PageLoadTime EndTime
Tc#13: AvgPageLoadTime Test Case for PageLoadTime open storeEval refresh waitForPageToLoad storeEval echo echo storeEval echo storeEval open waitForPageToLoad 3000 (new Date()).getTime() ${StartTime} ${EndTime} (${EndTime}-${StartTime})/1000 ${PageLoadTime1} Seconds (new Date()).getTime() http://www.yahoo.com/ 3000 StartTime PageLoadTime1 EndTime http://www.yahoo.com/ (new Date()).getTime() StartTime
QAPlanet
Test Case for PageLoadTime storeEval storeEval echo storeEval echo (new Date()).getTime() (${EndTime}-${StartTime})/1000 ${PageLoadTime2} Seconds (${PageLoadTime1}+${PageLoadTime2})/2 ${AvgPageLoadTime} Seconds AvgPageLoadTime EndTime PageLoadTime2
Tc# 14: Page Load Time in mille Seconds Test Case for PageLoadTime_MilliSeconds storeEval var d=(new Date().getTime()); d; echo ${timeBeforeLoad} open("http://www.ge.com/");var storeEval win=this.browserbot.getCurrentWindow(); if(win)win.onload=(window.status=(new Date().getTime())); echo ${timeAfterLoad} storeEval ${timeAfterLoad}-${timeBeforeLoad} echo ${loadTimeMSecs}
timeBeforeLoad
timeAfterLoad
loadTimeMSecs
Tc#15: Get Xpathcount, rows count and Tablecount XXX Test Case Xpath open file:///C:/2009 Selenium/Day4/Ex/ListofCourses.html assertTitle AssertXPath storeElementPresent //table[@id='idCourse']/tbody/tr[7]/td[3] echo ${Txt1} assertElementNotPresent //table[@id='idCourse']/tbody/tr[8]/td[3] assertElementPresent //table[@id='idCourse']/tbody/tr[7]/td[3] allowNativeXpath true verifyXpathCount //table[@id='idCourse']/tbody/tr verifyXpathCount //table[@id='idCourse']/tbody/tr[1]/td verifyXpathCount //table[@id='idCourse']/tbody/tr/td verifyTable idCourse.0.0
Txt1
7 4 28 S#
QAPlanet
Test Case Xpath verifyTable verifyTable verifyTable verifyTable verifyTable verifyTable verifyTable verifyTable verifyTable verifyTable verifyTable storeText echo
idCourse.0.1 idCourse.4.0 idCourse.4.1 idCourse.4.2 idCourse.4.3 idCourse.0.2 idCourse.0.3 idCourse.6.0 idCourse.6.1 idCourse.6.2 idCourse.6.3 //table[@id='idCourse']/tbody/tr[7]/td[4] ${sLastRowCell4}
Course Name 4 Selenium Kangs 4/4/2009 Instructor Name Start Date 6 Python Michell 6/6/2009 sLastRowCell4
Selenium Core Concepts Selenium was designed specifically for the acceptance testing requirements of Agile teams. Cross Browser and Cross Platform compatibility testing. One can test and verify whether the application works correctly on different browsers and operating systems. The same script can run on any Selenium platform. Application Functional testing. Create regression tests to verify application functionality and user acceptance.
QAPlanet
These applications are trusted by the Microsoft Internet Explorer browser. The web-developer need to create the menus, icons, toolbars, and title information then only those will be available within that application. HTAs pack all the power of object model, performance, rendering power, protocol support, and channeldownload technologywithout enforcing the strict security model and user interface of the browser. HTAs can be created using the HTML and Dynamic HTML (DHTML).
HTA Mode in Selenium Core Selenium Core provides an additional mechanism for running automated tests called "HTA mode." HTA Mode only works on Windows, and only with IE. An HTA file is a special type of HTML file that is allowed to violate the same origin policy and to write files to disk. When running in HTA mode, you don't have to install Selenium Core on the same web server. HTA files are also allowed to save test results directly to disk, rather than posting the test results to a web server.
First: Install an web server (e.g. Apache) Second: Install the Selenium Core under the Web Server
You need to install the Selenium Core within the web server where AUT is deployed. Go to http://httpd.apache.org/download.cgi Download Win32 Binary without crypto (no mod_ssl) (MSI Installer): apache_2.2.11-win32-x86-no_ssl.msi Double click the downloaded file and install it
Check Apache Works
QAPlanet
Check index.html file is there Open index.html check whether it will display it works Message or Not. Create a folder under (*1) C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
Go to http://seleniumhq.org/download/ Right Click on the Download Link under Selenium Core, and download the file under Apache web server Save the selenium-core-1.0-beta-2.zip file Under the folder C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Selenium Right click on the Zip file, and unzip by Selecting winzip In your address bar type the below URL: http://localhost/Selenium/core/TestRunner.html If you are able to see Selenium Test Runner Control Panel, then the installation is complete and successful.
Open Selenium IDE Create multiple Test cases, save with .html extensions. Create these test cases as Testsuite.html In Windows Explorer Go to C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Selenium 5. Create a new folder called oragehrm 6. Save all Test cases, Test Suites under orangehrm Folder. 1. 2. 3. 4.
QAPlanet
2. 3. 4. 5.
SELENIUM Handbook - -a basic referential guide to Selenium -----------------------------------------------------------------------------------------------------------------------------------------In the test suite input box, type as follows: ../orangehrm/TestSuite.html Press Go button Now, you can run either individual test cases or entire suite. Do as you wish.
Running the Test Suite Using HTA Mode Test now in IE browser http://localhost/Selenium/core/TestRunner.hta A File download Security Warning may display Click Run button
Press Go button Now, you can run either individual test cases or entire suite. Do as you wish.
QAPlanet
QAPlanet
20. Selenium-RC
1. Introduction Selenium-RC is the solution for tests that need more than simple browser actions and linear execution. Selenium-RC uses the full power of programming languages to create more complex tests like reading and writing files, querying a database, emailing test results. Youll want to use Selenium-RC whenever your test requires logic not supported by SeleniumIDE. What logic could this be? For example, Selenium-IDE does not directly support: condition statements iteration logging and reporting of test results error handling, particularly unexpected errors database testing test case grouping re-execution of failed tests test case dependency screenshot capture of test failures Although these tasks are not supported by Selenium directly, all of them can be achieved by using programming techniques with a language-specific Selenium-RC client library. 2. Installing Selenium RC Installing Selenium Remote Control (RC) requires three step process: First: Install JRE 1.5 or later Second: Install the Selenium RC Third: Install Ruby Client Run cmd
Second: Installing Selenium RC Go to http://seleniumhq.org/download/ Select RC download (*1) link and store the file in C:\
QAPlanet
UnZip the selenium-remote-control-1.0-beta-2-dist.zip in C:\ Rename the selenium-remote-control-1.0-beta-2 folder into SeleniumRC Rename the selenium-java-client-driver-1.0-beta-2 folder into JavaClient Rename the selenium-server-1.0-beta-2 into JavaServer Open Windows Explorer go to C:\SeleniumRC\JavaServer Go to Start Run Cmd (enter the following command)
3. Run a Simple Test Step1: save Test case with rb extenstion Open the test case in Selenium IDE Go to Options Format Ruby Selenium RC
Select File Save Test Case As Save the file name as name.rb in C:\PrgRuby
Step2: Start the Selenium Server Go to Start Run cmd Java -jar selenium-server.jar (*7)
Keep the server running (Do not close this cmd line window) Run cmd
Step3: Run the Ruby Test Open another cmd line window, go to Start
QAPlanet
4. Platforms Supported by Selenium RC Browsers Firefox, IE, Safari and Opera etc..
Testing Frameworks Bromine, JUnit & TenstNG (Java), NUnit (.Net), RSpec & Test::Unit (Ruby), unittest (Python)
5. RC Command Line Options Usage: java -jar selenium-server.jar [-interactive] [-options] port <nnnn>:(default 4444) the port number the selenium server should use
multiWindow: Tests are executed in a separate window and supports web pages with frames.
forcedBrowserMode <browser>: (eg: *iehta) sets the forced default browser mode (e.g. "*iexplore) for all sessions, no matter what is passed in getNewBrowserSession
QAPlanet
userExtensions <file>: indicates a JavaScript file that will be loaded into selenium
avoidProxy: Uses by default proxy for browser request set this flag to make the browser use proxy only for URLs containing '/selenium-server'
firefoxProfileTemplate <dir>: By default generates a fresh empty Firefox profile for every test. Provide a directory to use your profile directory instead.
debug: Debug mode provides more trace information and used for diagnostics purpose
htmlSuite <browser> <startURL> <suiteFile> <resultFile>: Provide browser and URL to run a single HTML Selenese Test suite and then exit immediately. Provide absolute path to the HTML test suite, and HTML results file.
proxyInjectionMode: A proxy injection mode is a mode where the selenium server acts as a proxy server for all content going to the AUT. Under this mode, multiple domains can be visited.
The following additional flags are supported for proxy injection mode : dontInjectRegex <regex>: an optional regular expression that proxy injection mode can use to know when to bypass injection
QAPlanet
userJsInjection <file>: specifies a JavaScript file which will then be injected into all pages
userContentTransformation <regex> <replacement>: A regular expression which is matched against all test HTML content; the second is a string which will replace matches. These flags can be used any number of times. A simple example of how this could be useful: if you add "userContentTransformation https http" then all "https" strings in the HTML of the test application will be changed to be "http".
Normally Selenium RC overrides the proxy server configuration, using the Selenium Server as a proxy. Use these options if you need to use your own proxy together with the Selenium Server proxy. Use the proxy settings like this: java -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=1234 -jar seleniumserver.jar HTTP proxy requires authentication, you will also need to set Dhttp.proxyUser and -Dhttp.proxyPassword, in addition to http.proxyHost and http.proxyPort. java -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=1234 Dhttp.proxyUser=joe -Dhttp.proxyPassword=example -jar seleniumserver.jar
6. Selenium RC - Interactive Mode Running The "interactive mode (IM)" allows you to run your test case commands on the Selenium Server interactively. This approach is suited for novice programmers to understand. To completely automate the test suites, it is best practice to write your tests in a suitable programming language. Not using interactive mode. Type exit to quit from interactive mode
QAPlanet
6.1 Selenium RC Browser Launch Mode Browser Launch Mode Description Cross Domain
*iexplore, *iehta
Yes
Internet Explorer HTML mode Firefox in Chrome mode Firefox normal Opera mode Safari mode Custom mode
No Yes No No No Dynamic
Selenium RC getNewBrowserSession During the "interactive mode" one can get the current browser Session ID using the getNewBrowserSession command. This command accepts two parameters. Both are mandatory parameters. First Parameter: Browser Launch mode Example: *iexplore, *firefox, etc
QAPlanet
testComplete command will stop the current session. No longer you can use the same session for further testing after executing this command.
Selenium RC Interactive mode cmd Interactive mode allows you to execute commands using cmd command The format of the command is as follows: cmd={Selenese Command}&1={First Parameter}&2={Second Parameter} &sessionId={sessionID got using getNewBrowserSession} Example: cmd=type&1=q&2=energy efficient&sessionId=500b9ffb521d4c67b37e649a7bd5e527 cmd=close&sessionId=500b9ffb521d4c67b37e649a7bd5e527 cmd=waitForTextPresent&1=energy efficiency&sessionId=500b9ffb521d4c67b37e649a7bd5e527
The session ID is optional. Use session ID when you have multiple sessions. Selenese Command Parameter is mandatory. Both &1 and &2 parameters are optional. If the Selenese command contains parameter then you may need it.
Selenium RC Interactive mode Testing Open your Windows explorer go to C:\SeleniumRC\JavaServer Goto Start Run cmd
Copy the first line of the code and paste in the interactive mode (*4) cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
QAPlanet
6.2 Selenium RC Posting Test Results (firefox) Open notepad/wordpad Cut and Paste the below code. Save the batch file with name GE Test Case.bat
Keep the below files under the following directory: C:\2009 Selenium\Ex\GE TestSuite.html GE Test Case1.html GE Test Case3.html GE Test Case.bat
Double click on the GE Test Case.bat file Command window open and run the test suite After completing the test, double click on the FF GE Test Results.html
6.3 Selenium RC Posting Test Results (IE) Open the batch file GE Test Case.bat Change the *chrome into *iehta
Double click and Run the GE Test Case.bat file After completion look at the posted results in IE GE Test Results.html
QAPlanet
As you can see Selenium Grid from a single machine can invoke different Selenium RC's available to run the same tests on different combinations of browsers and Operating Systems.
QAPlanet
QAPlanet
mind.
-------------------------------------
-----------------------------------------------