ContentS InCluDe: Selenium

Transcription

Get More Refcardz! Visit refcardz.com#67Getting Started withCONTENTS INCLUDE:nnnnnnAbout SeleniumArchitecture in a NutshellInstalling SeleniumRecording/Playback using Selenium IDESelenese Table FormatSelenium Command Reference and more.SeleniumBy Frank Cohensource project. It uses Selenium RC to provide Selenium Gridlike capability with the added advantage of providing datadriven Selenium tests, results analysis charts and graphs, andbetter stability of the test operations.About SeleniumSelenium is a portable software testing framework for Webapplications. Selenium works well for QA testers needingrecord/playback authoring of tests and for software developersneeding to author tests in Java, Ruby, Python, PHP, andseveral other languages using the Selenium API. The Seleniumarchitecture runs tests directly in most modern Web browsers,including MS IE, Firefox, Opera, Safari, and Chrome. Seleniumdeploys on Windows, Linux, and Macintosh platforms.The PushToTest open-source project provides Selenium datadriven testing, load testing, service monitoring, and reporting.TestMaker runs load and performance tests (Type 3) in aPushToTest TestNode using the PushToTest SeleniumHTMLUnitlibrary and HTMLUnit Web browser (and Rhino JavaScriptengine.)Selenium was developed by a team of programmers andtesters at ThoughtWorks. Selenium is open source software,released under the Apache 2.0 license and can be downloadedand used without royalty to the originators.HotTipHTMLUnit runs Selenium tests faster than a realbrowser and requires much less memory and CPUresources.Architecture in a Nutshellwww.dzone.comInstalling seleniumSelenium Browserbot is a JavaScript class that runs within ahidden frame within a browser window. The Browserbot runsyour Web application within a sub-frame. The Browserbotreceives commands to operate against your Web application,including commands to open a page, type characters into formfields, and click buttons.Selenium IDE installs as a Firefox add-on. Below are the stepsto download and install Selenium IDE:1. Download selenium-ide-1.0.2.xpi (or similar) fromhttp://seleniumhq.org.2. From Firefox open the .xpi file. Follow the Firefoxinstructions.3. Note: Selenium Grid runs as an Ant task. You need JDK1.6, Ant 1.7, and the Selenium Grid 1.0 binary distribution.Additional directions can be found athttp://selenium-grid.seleniumhq.org/get started.html4. See http://www.pushtotest.com/products for TestMakerinstallation instructions.Selenium architecture offers several ways to play a test.Get More Refcardz(They’re free!)SeleniumnFunctional testing (Type 1) uses the Selenium IDE add-onto Firefox to record and playback Selenium tests in Firefox.Functional testing (Type 2) uses Selenium Grid to run tests ina farm of browsers and operating environments. For example,run install Selenium Grid on 3 operation environments (forexample, Windows Vista, Windows XP, and Ubutu) and on eachinstall 2 browser (for example, Microsoft Internet Explorer andFirefox) to smoke test, integration test, and functional test yourapplication on 6 combinations of operating environment andbrowser. Many more combinations of operating environmentand browser are possible. An option for functional testing(Type 2) is to use the PushToTest TestMaker/TestNode openDZone, Inc.nnnnnnAuthoritative contentDesigned for developersWritten by top expertsLatest tools & technologiesHot tips & examplesBonus content onlineNew issue every 1-2 weeksSubscribe Now for FREE!Refcardz.com www.dzone.com

2Record/playback using selenium ideHotTipGetting Started with SeleniumSelenese Table FormatSelenium IDE is meant to be a light-weight record/playbacktool to facilitate getting started with Selenium. It is notdesigned to be a full test development environment. WhileSelenium records in an HTML table format (named Selenese)the table format only handles simple procedural test usecases. The Selenese table format does not provide operationaltest data support, conditionals, branching, and looping. Forthese you must Export Selenese files into Java, Ruby, or othersupported languages.Selenium IDE is a Firefox add-on that records clicks,typing, and other actions to make a test, which youcan play back in the Firefox browser. Open SeleniumIDE from the Firefox Tools drop-down menu, SeleniumIDE command.Selenium IDE records interactions with the Web application,with one command per line. Clicking a recorded commandhighlights the command, displays a reference page, anddisplays the command in a command form editor. Click thecommand form entry down-triangle to see a list of all theSelenium commands.Selenium COmmand referenceSelenium comes with commands to: control Selenium testoperations, browser and cookie operations, pop-up, button,list, edit field, keyboard, mouse, and form operations.Selenium also provides access operations to examine theWeb application (details are at reference.html).Run the current test byclicking the Run TestCase icon in the iconbar. Right click a testcommand to choosethe Set Breakpointcommand. SeleniumIDE runs the test to abreakpoint and thenpauses. The icon barStep icon continuesexecuting the test onecommand at a time.CommandValue, Target, Wait CommandSelenium ControlsetTimeoutmillisecondssetMouseSpeednumber of peedAndWaitaddLocationStrategyWith Selenium IDEopen, the menu barcontext changes toprovide access toSelenium commands:Open/Close Test Caseand Test Suite. Test Suites contain one or more Test lueAndWaitassignIdlocatorassignIdAndWaitUse the Options dropdown menu, Optionscommand to setgeneral preferencesfor Selenium IDE.captureEntirePageScreenShotfilename, kwargscaptureEntirePageScreenShotAndWaitSelenium IDE providesan extensibilityAPI set called UserExtensions. You canimplement customfunctions and modifySelenium IDE behaviorby writing JavaScriptfunctions. We do notrecommend writingUser Extensions as the Selenium project makes no guaranteesto be backwardly compatible from one version to the catorfireEventAndWaitBrowser wAndWaitSelenium Context Menu provides quick commands to insertnew Selenium commands, evaluate XPath expressions withinthe live Web page, and to show all available Seleniumcommands. Right click on commands in Selenium IDE, andright-click on elements in the browser page to view theSelenium Context Menu commands.DZone, osedeleteCookienamedeleteCookieAndWait www.dzone.com

WaitsetBrowserLogLevellogLevelGetting Started with rowserLogLevelAndWaitcontextMenuAndWaitCookie sAndWaitmouseDownAtAndWaitPopup Box tmouseMoveAtAndWaitCheckbox & Radio useOverAndWaituncheckAndWaitmouseUpLists & Edit tForm nAndWaitsubmitAndWaitKeyboard OperationskeyDownWindows/Element nese Table FormatMouse OperationsclickSelenium commands identify elements within a Web page leClickidentifier idSelect the element with the specified @id attribute. If no match isfound, select the first element whose @name attribute is id.name nameSelect the first element with the specified @name attribute.The name may optionally be followed by one or more elementfilters, separated from the name by whitespace. If the filterTypeis not specified, value is assumed. For example, name stylevalue caroldom javascriptExpressionFind an element using JavaScript traversal of the ocatorDZone, Inc. www.dzone.com

4dom javascriptExpression(continued)Document Object Model. DOM locators must begin with“document.” For example:dom document.forms[‘form1’].myListdom document.images[1]xpath xpathExpressionLocate an element using an XPath expression. Here are a fewexamples:xpath //img[@alt ’The image alt text’]xpath //table[@id //div[@id ’manage messages iterator’]//tr[@class ’SelectedRow’]/td[2]//td[child::text() ��@’)]link textPatternSelect the link (anchor) element which contains text matching thespecified pattern.css cssSelectorSyntaxSelect the element using css selectors. For example:Getting Started with SeleniumUse the Selenium IDE File menu, Export, Python Selenium RCcommand to export the test to a jUnit-style TestCase written inPython. The following shows the Java source code:package com.example.tests;from selenium import seleniumimport unittest, time, reclass franktest(unittest.TestCase):def setUp(self):self.verificationErrors []self.selenium selenium(“localhost”, 4444, “*chrome”, /”)self.selenium.start()def test franktest(self):sel self.seleniumsel.open(“/”)sel.type(“q”, “sock puppet”)sel.click(“sa”)sel.wait for page to load(“30000”)sel.click(“//div[@id k(“//div[@id ’res’]/div[1]/ol/li[1]/div/h2/a/em”)sel.wait for page to load(“30000”)css a[href ”#id1”]css span#firstChild spanSelenium 1.0 css selector locator supports all css1, css2 and css3selectors except namespace in css3, some pseudo classes(:nthof-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type,:visited, :hover, :active, :focus, :indeterminate) and pseudoelements(::first-line, ::first-letter, ::selection, ::before, ::after).Without an explicit locator prefix, Selenium uses the followingdefault strategies:def l([], self.verificationErrors)dom, for locators starting with “document.”xpath, for locators starting with “//”identifier, otherwiseif name “ main ”:unittest.main()Your choice of element locator type has an impact on thetest playback performance. The following table comparesperformance of Selenium element locators using Firefox 3 andInternet Explorer 7.Locator usedTypeFirefox 3InternetExplorer 7qLocator47 ms798 ms//input[@name ’q’]XPath32 ms563 ms//html[1]/body[1]//form[1]//input[2]XPath47 ms859 ms//input[2]XPath31 ms564 msdocument.forms[0].elements[1]DOM Index31 ms125 msAn exported test like the one above has access to all ofPython’s functions, including conditionals, looping andbranching, reusable object libraries, inheritance, collections,and dynamically typed data formats.Selenium provides a Selenium RC client package for Java,Python, C#, Ruby, Groovy, PHP, and Perl. The client objectidentifies the Selenium RC service in its constructor:self.selenium selenium(“localhost”, 4444, “*iexplore”, /”)self.selenium.start()The above code identifies the Selenium RC service running onthe localhost machine at port 4444. This client will run the testin Microsoft Internet Explorer. The third parameter identifiesthe base URL from which the recorded test will operate.Additional details on Selenium performance can be found posiumScript-Driven TestingSelenium implements a domain specific language (DSL) fortesting. Some applications do not lend themselves to record/playback: 1) The test flow changes depending on the resultsof a step in the test, 2) The input data changes dependingon the state of the application, and 3) The test requiresasynchronously operating test flows. For these conditions,consider using the Selenium DSL in a script driven test.Selenium provides support for Java, Python, Ruby, Groovy, PHP,and C#.Using the selenium.start() command initializes and starts theSelenium RC service. The Selenium RC client module (importselenium in Python) provides methods to operate the SeleniumDSL commands (click, type, etc.) in the Browserbot runningin the browser. For example, selenium.click(“open”) tells theBrowserbot to a click command to the element with an id tagequal to “open”. The browser responds to the click commandand communicates with the Web application.Selenium IDE helps get a script-driven test started byexporting to a unit test format. For example, consider thefollowing test in the Selenese table format:At the end of the test the selenium.stop() command ends theSelenium RC service.Selenium and ajaxAjax uses asynchronous JavaScript functions to manipulatethe browser’s DOM representation of the Web page. ManySelenium commands are not compatible with Ajax. Forexample, ClickAndWait will time-out waiting for the browserDZone, Inc. www.dzone.com

5Run the above JavaScript function from within a Selenium testusing the AssertEval command.to load the Web page because Ajax functions that manipulatethe current Web page in response to a click event do notreload the page. We recommend using Selenium commandsthat poll the DOM until the Ajax methods complete their tasks.For example, waitUntilElementPresent polls the DOM untilthe JavaScript function adds the desired element to the pagebefore continuing with the rest of the Selenium script.AssertEval MCE.execCommand(‘mceInsertContent’,false,’ b Hello world!! /b ’);Data ProductionConsider the following checklist when using Selenium with Ajaxapplications: Selenium offers no operational test data production capabilityitself. For example, a Selenium test of a sign-in page usuallyneeds sign-in name and sign-in password operational test datato operate. Two options are available: 1) Use the data accessfeatures in Java, Ruby, or one of other supported languages,2) Use PushToTest TestMaker’s Selenium Script Runner toinject data from comma separated value (CSV) files, relationaldatabases, objects, and Web services.See http://tinyurl.com/btxvn4 for details.Your Selenium tests may require a large number of extra commands to ensure the teststays in synchronization with the Ajax application. Consider an Ajax application thatrequires a log-in, then displays a selection list of items, then presents an order form.Ajax enabled applications often deliver multiple steps of function on a single pageand show-and-hide elements as you work with the application. Some even disableform submit buttons and other user interface elements until you enter enough validinformation. For an application like this you will need a combination of Seleniumcommands. Consider the following Selenium test:waitForElementPresent pauses the test until the Ajax application adds the requisiteelement to the page. waitForCondition pauses the test until the JavaScript functionevaluates to true. Some Ajax applications use lazy-loading techniques to improve user interactionwith the application. A stock market application provides a list of 10 stock quotesasynchronously after the user clicks the submit button. The list may take 10 to 50seconds to completly update on the screen. Using waitForXPathCount pauses thetest until the page contains the number of nodes that match the specified XPathexpression. Many Ajax applications use dynamic element id tags. The Ajax application that namedthe Log-out button app 6 may later rename the button to app 182. We recommendusing DOM element locator techniques, or XPath techniques if needed, to dynamicallyfind elements on a positional or other attribute means.Getting Started with SeleniumCreate a Comma-Separated-Value file. Use your favorite texteditor or spreadsheet program. Name the file data.csv. Thecontents must be in the following form.The first row of the data file contains column names. Thesewill be used to map values into the Selenium test. Change theSelenium test to refer to mapping name. PushToTest mapsthe data from the named column in the CSV data file to theSelenium test data using the first row definitions.Working with tinymce and ajax objectsConnect the Data Production Library (DPL) to the Selenium testin a TestMaker TestScenario. Begin by definition a HashDPL.This DPL reads from CSV data files and provides the data to thetest.Ajax is about moving functions off the server and into thebrowser. Selenium architecture supports innovative newbrowser-based functions because Selenium’s Browserbot is aJavaScript class itself. The Browserbot even lets Selenium testsoperate JavaScript functions as part of the test. For example,TinyMCE (http://tinymce.moxiecode.com) is a graphical texteditor component for embedding in Web pages. TinyMCEsupports styled text and what-you-see-is-what-you-get editing.Testing a TinyMCE can be challenging. Selenium offers clickand type functions that interact with TinyMCE but no directcommands for TinyMCE’s more advanced functions. Forexample, imagine testing TinyMCE’s ability to stylize text.The test needs to insert test, move the insertion point, selecta sentence, bold the text, and drag the sentence to anotherparagraph. This is beyond Selenium’s DSL. Instead, theSelenium test may include JavaScript commands that interactwith TinyMCE’s published ). DataSources dpl name ”mydpl” type ”HashDPL” argument name ”file” dpl ”rsc” value ”getDataByIndex” index ”0”/ /dpl /DataSources Next, tell the TestScenario to send the data.csv and Seleniumtest files to the TestNodes that will operate the test. resources data path ”data.csv”/ selenese path ”CalendarTest.selenium”/ /resources Then tell the Selenium ScriptRunner to use the DPL provideddata when running the Selenium test. run name ”CalendarTest” testclass ”CalendarTest.selenium”method ”runSeleneseFile” langtype ”selenium” argument dpl ”mydpl” name ”DPL Properties”value ”getNextData”/ /run Here is an example of using the TinyMCE API from a Seleniumtest context:The getNextData operation gets the next row of data from theCSV file. The Selenium ScriptRunner injexts the data into theSelenium ecCommand(‘mceInsertContent’,false,’ b Hello world!! /b ’);DZone, Inc. www.dzone.com

6Getting Started with Seleniumcreates reusable software classes, and 3) PushToTest TestMakersupports multiple use cases with parameterized test use cases.Browser Sandbox, Redirect, and proxy issuesIn Selenium IDE, the File menu enables tests to be saved astest cases or test suites. Record a test, use File - Save TestCase. Create a second Test Case by choosing File - New TestCase. Record the second test use case. Save the TestSuite forthese two test use cases by choosing File - Save TestSuite.Click the “Run entire test suite” icon from the Selenium IDEtool bar.Selenium RC launches the browser with itself as the proxyserver to inject the Javascript of the Browserbot and yourtest. This architecture makes it possible to run the same teston multiple browsers. However, some browsers will warn theuser of possible security threats when the proxy starts andwhen the test requests functions or pages outside of theoriginating domain. The browser takes control and stops theBrowserbot operations to display the warning message. Whenthis happens, the test stops until a user dismisses the warning.There are no reliable cross-browser workarounds.TestMaker defines test use cases using a simple XML notation: usecases usecase name ”MailerCheck usecase” test Some Web applications redirect from http to https URLs. Thebrowser will often issue a warning that stops the Selenium test. run name ”LogIn” testclass ”Login.selenium”instance ”myinst”Selnium does not support a test moving across domains. Forexample, a test that started with a baseurl of www.mydomain.com may not open a page on www.secondomain.com.method ”runSeleneseFile” langtype ”selenium” /run run name ”OrderProduct” testclass ”OrderProduct.selenium” instance ”myinst”selenium rc browser profilesmethod ”runSeleneseFile” langtype ”selenium” Selenium Remote Control (RC) enables test operation onmultiple real browsers. A browser profile attribute may beany of the following installed browsers: chrome, konqueror,piiexplore, iehta, mock, opera, pifirefox, safari, iexplore andcustom. Append the path to the real browser after browserprofile if your system path does not state the path to thebrowser. For example: /run /test /usecase /usecases Reporting options*firefox lenium offers no results reporting capability of its own.Two options are available: 1) Write your tests as a set of JUnittests and use JUnit Report eport.html) to plot success/failure charts, 2)Use PushToTest TestMaker Results Analysis Engine to producemore than 300 charts from the transaction and step timetracking of Selenium tests.Component approach exampleMany organizations pursue a “Test and Trash” methodology toachieve agile software development lifecycles. For example, anorganization in pursuit of agile techniques may change up to30% of an application with an application lifecycle of 8 weeks.Without giving the change much thought, up to 30% of theirrecorded tests break!For example, TestMaker tracks Selenium command durationin a test suite or test case. Consider the following chart. Thisshows the “Step” time it takes to process each Seleniumcommand in a test use case over 10 equal periods of time thatthe test took to operate.We recommend a component approach to building tests.Test components perform specific test operations. We writeor record tests as individuals components of test function.For example, a component operates the sign-in functionof a private Webapplication. When thesign-in portion of theapplication changes,we only need tochange the sign-in testand the rest of testcontinues to performnormally.Selenium supports thecomponent approachin three ways:Selenium IDE supportsTest Suites and TestCases, exportingSelenium tests todynamic languages(Java, Ruby, Perl, etc.)DZone, Inc. www.dzone.com

7Getting Started with Seleniumnative interface. This solves the test playback stability issuein Selenium 1.0 but requires the Selenium project to maintainindividual API drivers for all the supported browsers. Whilethere is no release date for Selenium 2.0, the WebDriver codeis already functional and available for download athttp://code.google.com/p/webdriver.Selenium BiosphereTest Maker allows repurposing Selenium tests as load testservice monitors. http://www.pushtotest.comBrowserMob facilitates low-cost Selenium load s provides a farm of Selenium RC servers for testing.http://saucelabs.com/Available TrainingThoughtWorks Twist can be used for test authoring t-agile-test-automationSkillsMatter.com, Think88com, PushToTest.com, RTTSWeb.com,and Scott Bellware (http:blog.scottbellware.com) offer trainingcourses fro Selenium. PushToTest offers free Open Source TestWorkshops (http://workshop.pushtotest.com) as a meet-up forSelenium and other Open Source Test tool users.Running a Selenium test as a functional test in TestMaker.TestMaker displays the success/failure of each command in thetest and the duration in milliseconds of each step.About The name seleniumThe Future, Selenium 2.0 (AKA Webdriver)Selenium lore has it that the originators chose the nameof Selenium after learning that Selenium is the antidote toMercury poisoning. There appears to be no love between theSelenium team and HP Mercury, but perhaps a bit of envyThe Selenium Project started the WebDriver project, to bedelivered as Selenium 2.0. WebDriver is a new architecturethat plays Selenium tests by driving the browser through itsA B O U T t h e A ut h orR E C O M M E N D E D B oo kAs a Java developer, you want a guide that shows youhow to add Ajax functionality to your web applicationswith a minimum of effort. Well look no further than ProAjax and Java Frameworks. In this book, recognizedJava experts and authors of the best-selling Apresstitle, Foundations of Ajax, will show you how.Frank Cohen is, Founder of PushToTest, Author ofFastSOA. Through his speaking, writing and consulting, FrankCohen, is the expert that information technology professionalsand enterprises go to when they need to understand and solveproblems in complex interoperating information systems,especially Service Oriented Architecture (SOA), Ajax, andWeb services. PushToTest is the open-source test automationsolutions business, and maintainer of the popular TestMakeropen-source projectWebsite: www.pushtotest.comThe Cohen Blog: l Cheat Sheets You Can Trustby.rnsettn PagisDe“Exactly what busy developers need:simple, short, and to the point.”ldonaMcDsonaJByz.com#8iredInsp eby thGoF llerseBestE:LUDIN CilityTSENnsibNTspoCOf ReoindChamanCom reterrpIntetor.oreItera tordmdiad anMe rverthoseMeSObRNplateTTETemChaMoefre RcnGetcontinuedsn’tr doendlee had thst anquerele ahaveJames Ward, Adobe Systemstorndlee haith thst wuereqome.inthee torencrefe listed inicksActa qus, asNPjernebeIGvids,patt able OproDESram .ignusardUTdesdiaglef RerefcroF)ABOmpts olassokeernsexaInvur (G lemenes cdoPattdhrlFnfoigsucs: Einclugoal wnrnDesrncDaereeisje tsttGgANThpatt , and at ob mentinl 23 sign PaMcahucMintrendEationpleCOorigmaonskDre.rmaomto c their imboo SoftwantteCinfoedcreCliethedage: Us d fromndCon()ente on, usmar nsctcuteOriCom )tiupleattesbje( exeloweolanaal P e decois alpnrgcutechxolae. Ths suati exets.rman bbject nshipccfoCrejeyan otioetoobd as ed relams,t thedeateasriththaarate: Usbe tr ject bts.m.r nsdispalgocrit to lly obeteyeejegsnttgivbasywinonaPaanaallo traditis.Receen oralen mderuestto m betwectutwent orreq ndled inn.sasedsvariaStrus be.latecatioe hacans: Uor inilitiepsuinvoto b llbackscturethatthetimesEnca questnsibcatterny.struipslingreandriantnalitl Pa d respoingthenshhandraposeuingnctio led at vaocturcess befuuetiionjePlaobproavndack,aas qtoethet ree ha eded.bcallbnous nalitycBeh nshipsbmednrojeedtofroay neneedobis ne upledynchnctiotioat cYouut an iss ne questse as the fucorelawiths thitithoueste tharrebe delitat pattern ssing w tation articulReqy ofealsshipfaciouldpdenstorceUsetione: De.A hi voker shned to mman for pro implem ents its ting.relacop runtimcoy Proatd imjecue isare utilizing a job q of theCueue e queObueswithygedenqdgethques. Ben tohaneals me.croxyJob orithm be giv knowle that is terfaceDPe:gctbntieinSrleof al ed ca to have d obje of theermpcoppileratoutanExaservnesss S at comexec e queue commDecoObconfiSClaethBdthen. Thfordengekingletoithininvo hm wFacachaSingodtoryRefcardz.comnnn.comnzw. doneDZone communities deliver over 6 million pages each month sitStramore than 3.3 million software developers, architects and decisionwwSBridSgeBuildCerBBBBrmakers. DZone offers something for everyone, including news,Bfin otyCha tBehralavioYtutorials, cheatsheets, blogs,featurearticles, source code and more.ILITNSIBSPRESOsuccessorOAIN“DZone is a developer’sdream,” says PC Magazine.CHF aceterf r in andleHst ( )queleredn haUpcoming TitlesMost PopularRichFacesAgile Software DevelopmentBIRTJSF 2.0Adobe AIRBPM&BPMNFlex 3 ComponentsSpring ConfigurationjQuery SelectorsWindows PowershellDependency Injection with EJB 3Netbeans IDE JavaEditorGetting Started with EclipseVery First Steps in FlexDZone, Inc.1251 NW MaynardCary, NC 27513888.678.0399919.678.0300Refcardz Feedback Welcomerefcardz@dzone.comSponsorship Opportunitiessales@dzone.comsCopyright 2009 DZone, Inc. All rights reserved.No part of this publicationmay be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical,r2ntdleClieHanete publisher.photocopying, or otherwise, without prior written permission CoftheReference:st ( )oncrqueerna rdit! V isarzre f cnnity,Download Nownnibilndtcle al ouay haanhandsmentiahenjectle to.pot.Wblele obtern ethodbject ld be abptapatultip ecific on Maccethis if the m up theshouspctse.entsis ansee passedbe aobje runtim ndledplem ks tode toeimt ofcoatbUsehaecsetilldchgestn Aninedbeingshou peats un parenimenguaermWhenote la the runt or if itdetores reuestsomdtion proces e no mreqg in methocepn Aee arandline ex ack ththern ha rown in ndle thll stuntilptiothe caExce ion is sm to ha up th

Selenium architecture offers several ways to play a test. Functional testing (Type 1) uses the Selenium IDE add-on to Firefox to record and playback Selenium tests in Firefox. Functional testing (Type 2) uses Selenium Grid to run tests in a