<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Dealing with Selenium</title><link>http://seleniumdeal.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DealingWithSelenium" /><description>The examples shown here are hacks and workaround to deal with Selenium RC. The functions are included in a wrapper class that wraps DefaultSelenium of Selenium RC.The wrapper class is a framework implementation in C#.
Context: _selObj is object of DefaultSelenium class.</description><language>en</language><managingEditor>noreply@blogger.com (Amit Vibhuti)</managingEditor><lastBuildDate>Sun, 27 Nov 2011 15:40:55 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">10</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="dealingwithselenium" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>The examples shown here are hacks and workaround to deal with Selenium RC. The functions are included in a wrapper class that wraps DefaultSelenium of Selenium RC.The wrapper class is a framework implementation in C#. Context: _selObj is object of Default</itunes:subtitle><itunes:summary>The examples shown here are hacks and workaround to deal with Selenium RC. The functions are included in a wrapper class that wraps DefaultSelenium of Selenium RC.The wrapper class is a framework implementation in C#. Context: _selObj is object of DefaultSelenium class.</itunes:summary><item><title></title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/tVg83U9xrto/to-download-modified-copy-of-selenium.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Wed, 16 Jun 2010 00:23:32 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-8834480117004659758</guid><description>To download modified copy of Selenium RC Server (To handle modal window) click here &lt;a href="http://www.4shared.com/file/qHMmvQ0G/selenium-server.html" target=_blank&gt;selenium-server.jar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tag this link to see more updates on Selenium server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-8834480117004659758?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yh1iGhukRyNKs6fKnWBzsdibyBE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yh1iGhukRyNKs6fKnWBzsdibyBE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yh1iGhukRyNKs6fKnWBzsdibyBE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yh1iGhukRyNKs6fKnWBzsdibyBE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/tVg83U9xrto" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T00:23:32.742-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2010/06/to-download-modified-copy-of-selenium.html</feedburner:origLink></item><item><title>Working with Modal Dialogs and Selenium - 2</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/okbln8Ft0Ik/working-with-modal-dialogs-and-selenium.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Sat, 03 Jul 2010 23:59:41 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-4191216667194545228</guid><description>&lt;div class="Section1"&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;TABLE OF CONTENTS&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;1. Introduction To Modal Dialog&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoToc1"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;2. Properties of a modal dialog&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoToc1"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;3. Problem with Selenium&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoToc1"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;4. Unblocking Selenium for Automation&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoToc1"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;5. Ways of Modal invocation and Challenges&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoToc1"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;strong&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;Introduction To Modal Dialog&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="Section3"&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;Internet Explorer has provided additional function, showModalDialog, to deal with Modal type windows. When we open a window using showModalDialog the java-script execution gets suspended till the window gets closed. With this feature in place parent window can set itself under wait state expecting return value from the popup window. The popup window before closing itself needs to set its returnValue property, which will be used by the parent window. A sample code is given below.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BACKGROUND: #e6e6e6; MARGIN-LEFT: 0.5in; LINE-HEIGHT: 18pt; TEXT-ALIGN: left" align="left"&gt;&lt;b&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;Main.htm&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function getUser5()&lt;br /&gt;{&lt;br /&gt;var retValue=window.showModalDialog('popup.htm','',…);&lt;br /&gt;alert(retValue);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;lt;a id="'btnModal2'" onclick="return getUser5"&amp;gt;Open Popup&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: 18pt; TEXT-ALIGN: left" align="left"&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BACKGROUND: #e6e6e6; MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: 18pt; TEXT-ALIGN: left" align="left"&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;popup.htm&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function dosubmit()&lt;br /&gt;{&lt;br /&gt;window.returnValue=document.getElementById("txtName");&lt;br /&gt;window.close();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BACKGROUND: #e6e6e6; MARGIN: 0in 0in 12pt 0.5in; LINE-HEIGHT: 18pt; TEXT-ALIGN: left" align="left"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;&amp;lt;form id="'frm'"&amp;gt;&lt;br /&gt;Name&amp;lt;input id="txtName" title="Your Google Toolbar can fill this in for you. Select AutoFill" style="BACKGROUND-COLOR: #ffffa0"&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;a id="'btnClose'" onclick="return dosubmit();"&amp;gt;Submit&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;In above example, the parent window opens up a modal window and waits for the modal to return some value. The user enters some text in textbox on the modal window and clicks the link button. The link button calls the javascript to set the returnValue and then closes itself. The return value received by parent is used for further execution.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;strong&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;Properties of a Modal dialog&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="color:#333333;"&gt;Modal effect&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#333333;"&gt;:When modal is opened, accessibility to parent window is blocked.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="color:#333333;"&gt;Passing of arguments from parent window to modal: &lt;/span&gt;&lt;/i&gt;&lt;span style="color:#333333;"&gt;Modal window has defined variable called ‘&lt;b&gt;dialogArguments&lt;/b&gt;’ which is passed as an argument to showModalDialog function. Modal window can access it with ‘&lt;b&gt;window.dialogArguments’&lt;/b&gt;reference.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="color:#333333;"&gt;Return of value from modal to parent:&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#333333;"&gt; Modal window has defined variable called ‘&lt;b&gt;returnValue&lt;/b&gt;’which needs to be set before window gets closed. This returnValue is passed as return from the modal dialog to the parent window. The value remains even after the modal has been closed.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;strong&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&lt;/span&gt;3. Problem with Selenium&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;Selenium works on Javascript. It needs to move its handle across windows to perform its operation. When showModalDialog is called the javascript gets suspended for the parent. Selenium whose handle is still pointing the parent window also gets suspended. As a result all the successive commands in Selenium script ultimately get suspended and automation gets blocked.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" sstyle="margin-left:.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;strong&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&lt;/span&gt;4. Unblocking Selenium&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;To retain the normal flow of the selenium the only solution left is to bypass showModalDialog call with normal ‘window.open’ function call. This can be achieved by overriding showModalDialog function as shown below:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BACKGROUND: #e6e6e6; MARGIN-LEFT: 0.5in; LINE-HEIGHT: 18pt; TEXT-ALIGN: left" align="left"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;window.showModalDialog = function( sURL,vArguments, sFeatures)&lt;br /&gt;{&lt;br /&gt;if(retVal!=null) return retVal;&lt;br /&gt;modalWin = window.open(sURL, 'modal', sFeatures)&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;Above function will open a non-modal dialog when ever showModalDialog function is being called. With this selenium is good to go and do any operations on the popup window. However to get the exact behavior of a modal dialog one need to understand the properties of a modal window and mimic the same behavior over non modal window. &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;To pass the argument from parent to modal we need to save the arguments in a variable on the parent window. Then we will inject a code on the modal window that will read this value from the parent and save it in ‘&lt;i&gt;window.dialogArguments&lt;/i&gt;’ variable.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;If we open the window as non-modal, the biggest challenge will be to pass the return value from the modal back to the parent window. This is because when we open a window using ‘window.open’ commands the javascript do not wait for the return value and soon comes out of the function without performing its intended operation after retrieving the return value from the modal. To overcome this we will call the instruction (probably a button click) that calls the showModalDialog function twice. First time when we do a click it will open the non-modal dialog and comes out of the function. On the second click it will use the return value that was saved by the non-modal dialog to perform post-showModalDialog operations. All the operations to be performed on the popup window will go in between the first and the second clicks.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;To pass the return value back to the caller function, we need to override the close function or inject onbeforeunload event on the popup window that will save the return value on the parent window. Parent window will use this value during the second click and perform post-showModalDialog operations.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;strong&gt;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&lt;/span&gt;3. Ways of Modal invocation and challenges&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;Some of the recognized ways of invoking a modal window and the challenges faced are given below:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Opens a normal modal window&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Intermediate window&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1.5in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;o&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Modal opens another window and closes itself:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; When a modal window opens another window and then closes itself, selenium will not be able to trace this window.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1.5in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Solution:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; To overcome this we can block auto closing of the intermediary window. Once the operation is completed on the target window then the window should be closed.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1.5in"&gt;&lt;span style="font-family:verdana;font-size:85%;color:#333333;"&gt;Ref: CSH Help window in LM.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1.5in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;o&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Modal calculates and returns a value to parent and closes self.&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; Parent then uses the value to open another modal. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1.5in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Solution:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; These scenarios can be handled by allowing the first window to open as modal and the second as non modal.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Modals invoked at Page onload:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; Selenium waits till page is completely loaded. Once loaded it then injects javascript codes to handle events on the page. However if the page calls a modal window during onload of the page, selenium will get blocked since showModalDialog is not overridden yet.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Solution:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; This can be solved by application side patch (HttpModule). The patch will embed the overridden javascript code to each page. Though this opens a non-modal window, the window is still not traceable by selenium. This is because popup at onload do not gets registered to selenium. To overcome this we can call window.open with empty URL and same window id. Doing this will attach the selenium handle to the existing window rather opening a new window.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Modal with iframe embedded&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt;: Modal iframes if calls close function closes the window. But in case of non-modal it just closes the iframe.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Solution:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; This can be worked out by overloading close function with top.close. It also requires setting the value of ‘window.returnValue’ to ‘window.top.returnValue’.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in; TEXT-INDENT: -0.25in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color:#333333;"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Multiple modals (Modal over modal):&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; When a popup opens another popup, it becomes necessary that each window should be identified uniquely in order for selenium to identify them correctly.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN-LEFT: 1in"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;&lt;span style="color:#333333;"&gt;Solution:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#333333;"&gt; Each modal window should be suffixed with a timestamp string.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;             &lt;a href="http://selenium.googlecode.com/issues/attachment?aid=-2421545763351941832&amp;amp;name=ModalDialog.txt"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Code Reference&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; : Download the attached source code and replace the given function in your selenium-browserbot.js file.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; More info at &lt;/span&gt;&lt;/span&gt;&lt;a href="http://code.google.com/p/selenium/issues/detail?id=284"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Selenium Site&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br/&gt;&lt;a href="http://seleniumdeal.blogspot.com/2010/06/to-download-modified-copy-of-selenium.html"&gt;Download modified Selenium RC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-4191216667194545228?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IJE1Bd-8W9iIMSo5gw9evWDlZvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJE1Bd-8W9iIMSo5gw9evWDlZvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IJE1Bd-8W9iIMSo5gw9evWDlZvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJE1Bd-8W9iIMSo5gw9evWDlZvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/okbln8Ft0Ik" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-03T23:59:41.343-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">28</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2010/04/working-with-modal-dialogs-and-selenium.html</feedburner:origLink></item><item><title></title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/yRO7p89l6KU/avoid-xpath-when-possible-using-xpath.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Mon, 30 Nov 2009 05:01:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-1097542985540522030</guid><description>&lt;strong&gt;Avoid XPath when possible&lt;br /&gt;&lt;/strong&gt;Using XPath as a location strategy for your elements can be dangerous for long term maintenance for your tests as changes to the markup will undoubtedly break your tests. Likewise, certain browsers (cough cough IE) have poor XPath engines and are considerably slower (IE is about 16x slower).&lt;br /&gt;Strangely enough, following accessibility guidelines also makes for better functional UI testing. So instead of XPath locators, consider:&lt;br /&gt;Use "id" whenever feasible.&lt;br /&gt;    selenium.Click("close");&lt;br /&gt;Use "alt" tags for images.&lt;br /&gt;    selenium.Click("alt=close window");&lt;br /&gt;Use text inside anchor tags when ids or images are not used.&lt;br /&gt;    selenium.Click("link=Home");&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Avoid timing code&lt;br /&gt;&lt;/strong&gt;When working with AJAX or Postback events, page load speed can vary per machine or request. Rather than putting timing code in your NUnit code (ie Thread.Sleep), take advantage of one of the selenium built-in WaitFor... selenese commands.&lt;br /&gt;To use, you place javascript code in the condition where the last statement is treated as a return value.// wait 30 seconds until an element is in the DOM&lt;br /&gt;selenium.WaitForCondition("var element = document.getElementById('element'); element;", "3000");&lt;br /&gt;This approach allows your code to be as fast as the browser rather than set to a fixed speed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-1097542985540522030?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2sLJ5dNQLf24-UUWGP6tiYcXW-0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2sLJ5dNQLf24-UUWGP6tiYcXW-0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2sLJ5dNQLf24-UUWGP6tiYcXW-0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2sLJ5dNQLf24-UUWGP6tiYcXW-0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/yRO7p89l6KU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-30T05:01:01.826-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/11/avoid-xpath-when-possible-using-xpath.html</feedburner:origLink></item><item><title>Changing Selenium Jar to globally handle Modal Dialog box</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/n6cMK2zsGZc/changing-selenium-jar-to-globally.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Fri, 18 Jun 2010 00:49:32 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-6299980089826693575</guid><description>&lt;ul&gt;&lt;li&gt;Unpack Selenium jar. (User JRE jar.exe utility)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Open selenium-browserbot.js file. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Search for function 'IEBrowserBot.prototype.modifyWindowToRecordPopUpDialogs'"&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Add following codes at the begning of this function&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-size:78%;" &gt;if(win.showModalDialog)&lt;br /&gt;{&lt;br /&gt; if (typeof(win.top.g_selRetVar) == 'undefined')&lt;br /&gt;   win.top.g_selRetVar = null;&lt;br /&gt;  win.top._UTL_SetSelRetVar = function (val){&lt;br /&gt;   win.top.g_selRetVar = val;&lt;br /&gt;   win.top.status = win.top.g_selRetVar + ' is returned from child';&lt;br /&gt;   };&lt;br /&gt;   win.showModalDialog = function( sURL, vArguments, sFeatures)&lt;br /&gt;   {&lt;br /&gt;  if ((typeof(win.top.g_selRetVar) != 'undefined') &amp;amp;&amp;amp; (win.top.g_selRetVar!=null))&lt;br /&gt;  {&lt;br /&gt;   var temp = win.top.g_selRetVar;&lt;br /&gt;   win.top.g_selRetVar = null;&lt;br /&gt;   return temp;&lt;br /&gt;  }&lt;br /&gt;  try {&lt;br /&gt;        win.top.open (sURL, 'modal', sFeatures); &lt;br /&gt;  } catch(e){ win.showModalDialog(sURL, vArguments, sFeatures); }&lt;br /&gt;   };&lt;br /&gt;}&lt;br /&gt;if(win.close)&lt;br /&gt;{&lt;br /&gt;   win.attachEvent('onbeforeunload', function _selhandler()&lt;br /&gt;   {&lt;br /&gt;  if(win.opener &amp;amp;&amp;amp; win.opener._UTL_SetSelRetVar)&lt;br /&gt;   win.opener._UTL_SetSelRetVar(win.returnValue);&lt;br /&gt;   });&lt;br /&gt;}   &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pack the jar again.  (User JRE jar.exe utility)&lt;/li&gt;&lt;/ul&gt;If you do not wish to change your jar file you can inject the javascript through your script. This has been mentioned in&lt;br /&gt;&lt;a href="http://seleniumdeal.blogspot.com/2009/01/handling-modal-window-with-selenium.html"&gt;Handling Modal windows&lt;/a&gt;&lt;br/&gt;&lt;a href="http://seleniumdeal.blogspot.com/2010/06/to-download-modified-copy-of-selenium.html"&gt;Download modified Selenium RC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-6299980089826693575?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3wqY73nkUloUSGjjilQfaP-f72s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3wqY73nkUloUSGjjilQfaP-f72s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3wqY73nkUloUSGjjilQfaP-f72s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3wqY73nkUloUSGjjilQfaP-f72s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/n6cMK2zsGZc" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-18T00:49:32.349-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/09/changing-selenium-jar-to-globally.html</feedburner:origLink></item><item><title>Locator / XPath Generator</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/SpiMnTWxHeo/locator-xpath-generator.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Tue, 14 Jul 2009 09:46:16 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-5737679245639460353</guid><description>Work in Progress. Subscribe yourself to get the release mail.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Basics:&lt;/b&gt;&lt;br /&gt;XPath/Locator plays vital role for Selenium automation. XPath for the same control can have various forms. Different people have different way of creating XPath. However best XPath is direct and small. ID is the best option for a locator. Larger the XPath, longer will be the processing time. Same is the case with wild card characters uses. Also 'contains' should be avoided if possible. Its important that XPath should be well constructed. Most of the XPath Generator available generates XPath which is either long or inefficient. This tool will be smart enough to generate best XPath for Selenium automation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Features to be included:&lt;/b&gt;&lt;br /&gt;Direct XPath: Look for Id or the smallest XPath that can identify the element.&lt;br /&gt;Relative XPath: If the element need to be identified relative to another element.&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If you have any suggestion or want some feature to be included do share with us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-5737679245639460353?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5vfvr01BuTNeUVMFmepBQIwWvOQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5vfvr01BuTNeUVMFmepBQIwWvOQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5vfvr01BuTNeUVMFmepBQIwWvOQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5vfvr01BuTNeUVMFmepBQIwWvOQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/SpiMnTWxHeo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T09:46:16.967-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/07/locator-xpath-generator.html</feedburner:origLink></item><item><title>Check if control is Enabled</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/SSQww3xIlVc/check-if-control-is-enabled.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Fri, 26 Jun 2009 23:50:12 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-7054767482323704999</guid><description>public bool IsEnabled(string controlId)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool retValue = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string disabled = _selObj.GetEval("selenium.browserbot.getCurrentWindow().getElementById('" + controlId + "').disabled");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retValue = disabled.ToLower() == "true" ? false : true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (retValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.Info(DateTime.Now.ToString() + " : Control " + controlId + " is enabled.");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.Info(DateTime.Now.ToString() + " : Control " + controlId + " is disabled.");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (Exception ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.Error(DateTime.Now.ToString() + " : Error occured while determining if control " + controlId + " is enabled");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new Exception("Error occured at SeleniumPage.IsEnabled on '" + controlId + "'", ex);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return retValue;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-7054767482323704999?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cGUo0gproco0X6-cN30KX3RDHio/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cGUo0gproco0X6-cN30KX3RDHio/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cGUo0gproco0X6-cN30KX3RDHio/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cGUo0gproco0X6-cN30KX3RDHio/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/SSQww3xIlVc" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-26T23:50:12.212-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/06/check-if-control-is-enabled.html</feedburner:origLink></item><item><title>Avoiding WaitForPageLoad</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/zz2e-UZqaD0/avoiding-waitforpageload.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Fri, 26 Jun 2009 23:39:06 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-1880248634650618003</guid><description>public bool WaitForBrowserStability(int maxWait)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool retValue = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime dtStart = DateTime.Now;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Threading.Thread.Sleep(sleepTime);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (IsBrowserLoaded())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retValue = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} while (((TimeSpan)DateTime.Now.Subtract(dtStart)).TotalMilliseconds &lt; maxWait);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return retValue;&lt;br /&gt;}&lt;br /&gt;public bool IsBrowserLoaded()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ("true" == _selObj.GetEval("((\"complete\" == selenium.browserbot.getCurrentWindow().document.readyState) &amp;&amp; (null == selenium.browserbot.getCurrentWindow().event))"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (SeleniumException selExc)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.Warn(DateTime.Now.ToString() + " : Selenium error encountered. " + selExc.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selObj.SelectWindow("");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (Exception exc)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw exc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-1880248634650618003?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uHMXH_uIPsS3rff_3GMjAkFjmBk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uHMXH_uIPsS3rff_3GMjAkFjmBk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uHMXH_uIPsS3rff_3GMjAkFjmBk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uHMXH_uIPsS3rff_3GMjAkFjmBk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/zz2e-UZqaD0" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-26T23:39:06.494-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/06/avoiding-waitforpageload.html</feedburner:origLink></item><item><title>Selecting Popup window without Id</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/ZuUxsbHiwtU/selecting-popup-window-without-id.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Mon, 22 Jun 2009 08:26:26 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-7305006960032025831</guid><description>public bool SelectTopWindow()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string[] arr = GetAllWindowNames();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (arr.Length != 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Threading.Thread.Sleep(1000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selObj.SelectWindow(arr.GetValue(arr.Length - 1).ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (Exception exc)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;                &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-7305006960032025831?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tCxtruZZc-Z-PG3QBZBSFI8ZQv8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tCxtruZZc-Z-PG3QBZBSFI8ZQv8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tCxtruZZc-Z-PG3QBZBSFI8ZQv8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tCxtruZZc-Z-PG3QBZBSFI8ZQv8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/ZuUxsbHiwtU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-22T08:26:26.149-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/06/selecting-popup-window-without-id.html</feedburner:origLink></item><item><title>Uploading Files using Selenium RC in C#</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/jAQmpldfKvU/uploading-files-using-selenium-with-c.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Sat, 27 Jun 2009 00:26:51 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-8087140935834473527</guid><description>After googling all around to overcome the Selenium incapability of handling File Upload control finally I could write a simple function in C# which will do my job. In the function given below _selObj is the object of DefaultSelenium class.&lt;br /&gt;&lt;br /&gt;public bool TypeIntoFileUpload(string controlId, string filePath)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string newFilePath = filePath.Replace('\\', '/');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _selObj.WindowFocus();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _selObj.Focus(controlId);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string jscript="";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jscript += "if(selenium.browserbot.getCurrentWindow().clipboardData){window.clipboardData.setData('Text','" + newFilePath + "');}";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _selObj.GetEval(jscript);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byte VK_CONTROL = 0x11;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byte VK_V = 0x56;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selObj.KeyDownNative(Convert.ToString(VK_CONTROL));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selObj.KeyPressNative(Convert.ToString(VK_V));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selObj.KeyUpNative(Convert.ToString(VK_CONTROL));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (Exception exc)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-8087140935834473527?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jTpMfbPsnJSAi4_M-c2TiLOe7Q8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jTpMfbPsnJSAi4_M-c2TiLOe7Q8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jTpMfbPsnJSAi4_M-c2TiLOe7Q8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jTpMfbPsnJSAi4_M-c2TiLOe7Q8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/jAQmpldfKvU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-27T00:26:51.781-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/05/uploading-files-using-selenium-with-c.html</feedburner:origLink></item><item><title>Handling Modal window with Selenium</title><link>http://feedproxy.google.com/~r/DealingWithSelenium/~3/Iik5SvK4kqA/handling-modal-window-with-selenium.html</link><author>noreply@blogger.com (Amit Vibhuti)</author><pubDate>Wed, 16 Jun 2010 00:17:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2663471515965947110.post-3781000274494956008</guid><description>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;strong&gt;Aim:&lt;/strong&gt;&lt;br /&gt;To unblock Selenium when Modal Window appears on the screen.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Basics:&lt;/strong&gt;&lt;br /&gt;Internet Explorer has provided additional function, showModalDialog, to deal with Modal type windows. When we open a window using showModalDialog the java-script execution gets suspended till the window gets closed. With this feature in place parent window can set itself under wait state expecting return value from the popup window. The popup window before closing itself needs to set its returnValue property, which will be used by the parent window. A sample code is given below.&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;&amp;lt;strong&amp;gt;Main.htm&amp;lt;/strong&amp;gt;&lt;br /&gt;&amp;lt;script type="”text/javascript”"&amp;gt;&lt;br /&gt;function getUser5()&lt;br /&gt;{&lt;br /&gt;var retValue=window.showModalDialog('popup.htm','',…);&lt;br /&gt;alert(retValue);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;a id="'btnModal2'" onclick="return getUser5();"&amp;gt;Open Popup&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;&lt;strong&gt;popup.htm&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;function dosubmit()&lt;br /&gt;{&lt;br /&gt;window.returnValue=document.getElementById("txtName");&lt;br /&gt;window.close();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;&amp;lt;form id="'frm'"&amp;gt;&lt;br /&gt;Name&amp;lt;input id="txtName" title="Your Google Toolbar can fill this in for you. Select AutoFill" style="BACKGROUND-COLOR: #ffffa0"&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;a id="'btnClose'" onclick="return dosubmit();"&amp;gt;Submit&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In above example, the parent window opens up a modal window and waits for the modal to return some value. The user enters some text in textbox on the modal window and clicks the link button. The link button calls the javascript to set the returnValue and the closes itself. The return value received by parent is used for further execution.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem with Selenium:&lt;/strong&gt;&lt;br /&gt;Selenium works on Javascript. It needs to move its handle across windows to perform its operation. When showModalDialog is called the javascript gets suspended for the parent. Selenium whose handle is still pointing the parent window also gets suspended. As a result all the successive commands in Selenium script ultimately get suspended.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Possible workaround:&lt;br /&gt;&lt;/strong&gt;To retain the normal flow of the selenium the only solution left is to bypass showModalDialog call with normal window.open function call. This can be achieved by defining a global function as shown below:&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;window.showModalDialog = function( sURL, vArguments, sFeatures)&lt;br /&gt;{&lt;br /&gt;if(retVal!=null) return retVal;&lt;br /&gt;modalWin = window.open(sURL, 'modal', sFeatures)&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;However return value from these popup could not be tracked as these windows do not have returnValue parameter. This can be overcome by writing extra line of code using selenium script to get the required value from the popup window.&lt;br /&gt;Let’s consider a simple javascript function that opens up a modal window into three sections:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;function processModal ()&lt;br /&gt;{&lt;br /&gt;Prescript&lt;br /&gt;Var returnValue = Open Modal window&lt;br /&gt;Postscript&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Opening a window with this function unblocks the Selenium. However the Postscript gets executed too early. Assuming Postscript doesn’t do any function with null set to returnValue, we can invoke the processModal twice. The first time it will open the popup and fetch the value from it. The next time it will bypass any window open executing just the Postscript based on the return value captured during the first run.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Based on above &lt;span style="font-family:verdana;"&gt;consideration&lt;/span&gt; I have written three functions:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;ClickAndSelectModalDialog:&lt;/strong&gt; This function accepts the control id on clicking which the modal dialog opens. It bypasses the modal call to open non-Modal window. It also moves the handle to the popup.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;public bool ClickAndSelectModalDialog(string controlId)&lt;br /&gt;       {&lt;br /&gt;           try&lt;br /&gt;           {&lt;br /&gt;               if (ClickForModalDialog(controlId))&lt;br /&gt;               {&lt;br /&gt;                   SelectTopWindow();&lt;br /&gt;                   string jscript = "";&lt;br /&gt;                   {  &lt;br /&gt;                       jscript += "if(selenium.browserbot.getCurrentWindow().close){";&lt;br /&gt;                       jscript += "window.attachEvent(\"onbeforeunload\", function _selhandler(){";&lt;br /&gt;                       jscript += "if(window.opener &amp;amp;&amp;amp; window.opener._UTL_SetSelRetVar){";&lt;br /&gt;                       jscript += "window.opener._UTL_SetSelRetVar(window.returnValue);";&lt;br /&gt;                       jscript += "}});}";&lt;br /&gt;                   }&lt;br /&gt;                   _selObj.GetEval(jscript);&lt;br /&gt;                   return true;&lt;br /&gt;               }&lt;br /&gt;               else throw new Exception("Error occured while opening a modal window.");&lt;br /&gt;           }&lt;br /&gt;           catch (Exception exc)&lt;br /&gt;           {&lt;br /&gt;               throw new Exception("Error occured while Clicking and selecting a modal window.", exc);&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;       public bool ClickForModalDialog(string controlId)&lt;br /&gt;       {&lt;br /&gt;           try&lt;br /&gt;           {&lt;br /&gt;               string jscript = "";&lt;br /&gt;               jscript = "typeof(window.g_selRetVar) != 'undefined' ? window.g_selRetVar :  'undefined'";&lt;br /&gt;               string modalValue = _selObj.GetEval(jscript);&lt;br /&gt;               Log.Info("Modal Return value is " + modalValue);&lt;br /&gt;               {   //Bypass showModalDialog call&lt;br /&gt;                   jscript = "if(selenium.browserbot.getCurrentWindow().showModalDialog){";&lt;br /&gt;                   {   // Define variable g_selRetVar&lt;br /&gt;                       jscript += "if (typeof(selenium.browserbot.getCurrentWindow().g_selRetVar) == 'undefined') selenium.browserbot.getCurrentWindow().g_selRetVar = null;";&lt;br /&gt;                   }&lt;br /&gt;                   {   //Define function _UTL_SetSelRetVar&lt;br /&gt;                       jscript += "selenium.browserbot.getCurrentWindow()._UTL_SetSelRetVar = function (val){ window.g_selRetVar = val; window.status = window.g_selRetVar + ' is returned from child';};";&lt;br /&gt;                   }&lt;br /&gt;                   jscript += "selenium.browserbot.getCurrentWindow().showModalDialog = function( sURL, vArguments, sFeatures)";&lt;br /&gt;                   jscript += "{if ((typeof(window.g_selRetVar) != 'undefined') &amp;amp;&amp;amp; (window.g_selRetVar!=null)) {var temp = window.g_selRetVar; window.g_selRetVar = null; return temp;}";&lt;br /&gt;                   jscript += "selenium.browserbot.getCurrentWindow().open(sURL, 'modal', sFeatures);";&lt;br /&gt;                   jscript += "};}";&lt;br /&gt;               }&lt;br /&gt;               _selObj.GetEval(jscript);&lt;br /&gt;&lt;br /&gt;               _modalControl = controlId;&lt;br /&gt;               this.Click(_modalControl);&lt;br /&gt;               if (modalValue == null || modalValue == "" || modalValue == "undefined")&lt;br /&gt;                   WaitForPopUp("modal", "60000");&lt;br /&gt;&lt;br /&gt;               return true;&lt;br /&gt;           }&lt;br /&gt;           catch (Exception exc)&lt;br /&gt;           {&lt;br /&gt;               Log.Error(exc);&lt;br /&gt;               throw new Exception("Unable to open modal window.", exc);&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;       public bool AcceptModalValue()&lt;br /&gt;       {&lt;br /&gt;           this.ClickForModalDialog(_modalControl);&lt;br /&gt;           _modalControl = "";&lt;br /&gt;           Log.Info(DateTime.Now.ToString() + " : Parent window accepted value from Modal window.");&lt;br /&gt;           return true;&lt;br /&gt;       }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Example: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Consider Page to be the object of Class that defines above method and other Selenium methods.(Wrapper class)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid grey; overflow: auto; width: 600px;"&gt;&lt;br /&gt;           //Open/Select Modal Window&lt;br /&gt;           Page.ClickAndSelectModalDialog("//a[@title='Change domain']");&lt;br /&gt;           //Perform on Modal Wiondow&lt;br /&gt;           Page.SelectFrame("//IFRAME");&lt;br /&gt;           string xpath = "//INPUT[contains(@value,'Global')]";&lt;br /&gt;           Page.Click(xpath);&lt;br /&gt;           //Perform on Modal Wiondow Continued...&lt;br /&gt;           Page.Click("idtask_Next");&lt;br /&gt;           //Select Parent Window&lt;br /&gt;           Page.SelectWindow(null);&lt;br /&gt;           //Invoke parent to accept Madal value&lt;br /&gt;           Page.AcceptModalValue();&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Note: If you want to handle this globally you need to add this code in your selenium jar file. The steps are given under &lt;a href="http://seleniumdeal.blogspot.com/2009/09/changing-selenium-jar-to-globally.html"&gt;Changing Selenium Jar to globally handle Modal Dialog box&lt;/a&gt;&lt;br/&gt;&lt;a href="http://seleniumdeal.blogspot.com/2010/06/to-download-modified-copy-of-selenium.html"&gt;Download modified Selenium RC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2663471515965947110-3781000274494956008?l=seleniumdeal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fPftjBJ3bJCdl3zAys_zZEVAiOA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fPftjBJ3bJCdl3zAys_zZEVAiOA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fPftjBJ3bJCdl3zAys_zZEVAiOA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fPftjBJ3bJCdl3zAys_zZEVAiOA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DealingWithSelenium/~4/Iik5SvK4kqA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T00:17:45.649-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">30</thr:total><feedburner:origLink>http://seleniumdeal.blogspot.com/2009/01/handling-modal-window-with-selenium.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>

