Friday, March 22, 2013
Saturday, March 16, 2013
Friday, March 1, 2013
Rapid file duplicator or copier
Recently, I was given a task to check the document processing capability of an application. The objective of the test was to check whether system can consume 2 million documents in one hour duration.
System is configured to consume the documents from the specified folder, but the question is how to create 2 million documents in a folder. Manually copying the files take lot of time and test need to be repeated multiple times. Windows file system don't work optimally when a folder contain more than 5000 files, so need to create sub-folders, each sub-folder containing 4000 files and in total 2 million files.
I have created simple VB script program that use copy method to create duplicate files, it took nearly 20 hours. Then I started redesigning the program that will run the copy method in multiple threads, so that task can be accomplished in 1 hour by utilizing the 100% CPU capacity.
It consists of two programs. Initiator program calls the duplicator program multiple times, so that each program runs in different thread and task is accomplished quickly. Program settings need to be tweaked as per the system configuration, so that threads run in an optimal way, not too many or too less threads.
Program download link
Program download link
Initiator.vbs
'Make sure you have enough space on the system, this program run in multiple threads by utilizing 100% cpu
'Just copy the files in any folder, it will automatically create subfolders
'Perform file partations in the optimal way.
FileName = "test.docx" 'Make sure file exist in the folder
NumberOfCopies = 100 'Make sure division with the below number gives reminder 0 - 1000000 (Actual Test)
NumberOfPartations = 10 'Number Of partaions or blocks for the above said file copies - 10000 (Actual Test)
TimeStampGenerationAfterCopies = 10 'Generate time stamp in the log file after creating som many files - 1000 (Actual Test)
NumberOfFilesInFolder = 4 'Number of files inside each folder - 3000 (Actual Test)
'-------------------------------------------------------------------------------------
'For appending zeros to the file name, so that files are sorted sequently
Zeros = len(NumberOfCopies)
Const ForAppending = 8
count = NumberOfCopies/NumberOfPartations
Set wshShell = CreateObject( "WScript.Shell" )
set fso=CreateObject("Scripting.FileSystemObject")
WorkingDirectory = fso.GetParentFolderName(Wscript.ScriptFullName)
'Check folder exist, else create the folder
strFolder = WorkingDirectory & "\Duplicates\"
If Not fso.FolderExists(strFolder) Then
fso.CreateFolder(strFolder)
End If
strFolder = WorkingDirectory & "\log\"
If Not fso.FolderExists(strFolder) Then
fso.CreateFolder(strFolder)
End If
Set MyFile = fso.OpenTextFile(WorkingDirectory & "\log\log.txt", ForAppending, True)
MyFile.WriteLine("###################################################")
MyFile.WriteLine("File Duplication Launch Start:" & funGetTimeStamp())
MyFile.WriteLine("Total Launches:" & count)
Start = 1
End1 = NumberOfPartations
for count1 = 1 to count
strFileName = WorkingDirectory & "\FileDuplicater.vbs" & " " & Start & " " & End1 & " " & count1 & " " & TimeStampGenerationAfterCopies & " " & NumberOfFilesInFolder & " " & FileName & " " & Zeros
wshShell.Run "wscript " & strFileName, 1, False
WScript.Sleep 3000
Start = Start + NumberOfPartations
End1 = End1 + NumberOfPartations
next
MyFile.WriteLine("File Duplication Launch End:" & funGetTimeStamp())
Set fso = Nothing
Set wshShell = Nothing
Function funGetTimeStamp()
sDateTIme = Now()
iDate = Datepart("d",sDateTime)
iLen = Len(iDate)
If iLen = 1 Then
iDate = "0" & iDate
End If
sMonth= mid(MonthName(Datepart("m",sDateTime)),1,3)
iYear = Datepart("yyyy",sDateTime)
iHour = Datepart("h",sDateTime)
iLen = Len(iHour)
If iLen = 1 Then
iHour = "0" & iHour
End If
iMinute = Datepart("n",sDateTime)
iLen = Len(iMinute)
If iLen = 1 Then
iMinute = "0" & iMinute
End If
iSec = Datepart("s",sDateTime)
iLen = Len(iSec)
If iLen = 1 Then
iSec = "0" & iSec
End If
funGetTimeStamp = sMonth & "_" & iDate & "_" & iYear & "_" & iHour & "_" & iMinute & "_" & iSec
End Function
FileDuplicator.vbs
'This program need to be called by Initiator.vbs that pass the necessary command line parameters
'Arguments
Set objArgs = WScript.Arguments
StartIndex = clng(objArgs(0))
EndIndex = clng(objArgs(1))
LaunchID = clng(objArgs(2))
TimeStampGenerationAfterCopies = clng(objArgs(3))
NumberOfFilesInFolder = clng(objArgs(4))
FileName = objArgs(5)
Zeros = clng(objArgs(6))
Set objArgs = Nothing
FolderIndex = 1
FileCount = 1
TimeStampGenerationAfterCopies1 = TimeStampGenerationAfterCopies
set fso=CreateObject("Scripting.FileSystemObject")
WorkingDirectory = fso.GetParentFolderName(Wscript.ScriptFullName)
strFolder = WorkingDirectory & "\Duplicates\" & LaunchID & "_" & FolderIndex & "\"
If Not fso.FolderExists(strFolder) Then
fso.CreateFolder(strFolder)
End If
Length = len(FileName)
JustFileName = Mid(FileName,1,Length-5) '.docx len 5
JUstFileExt = Mid(FileName,Length-4) 'docx len 4
LogFile = "\log\log_" & LaunchID & ".txt"
OrginalFileNamePath = WorkingDirectory & "\" & FileName
Set MyFile = fso.OpenTextFile(WorkingDirectory & LogFile, ForAppending, True)
MyFile.WriteLine("##########################################################")
MyFile.WriteLine("LaunchID:" & LaunchID & "---" & "Start:" & funGetTimeStamp())
MyFile.WriteLine("LaunchID:" & LaunchID & "---" & "StartIndex:" & StartIndex)
MyFile.WriteLine("LaunchID:" & LaunchID & "---" & " EndIndex:" & EndIndex)
MyFile.WriteLine("LaunchID:" & LaunchID & "---" & " TimeStamp Generated after number of files:" & TimeStampGenerationAfterCopies)
TimeStampCounter = TimeStampGenerationAfterCopies + StartIndex
if StartIndex = 1 then
else
StartIndex = StartIndex - 1
end if
Const ForAppending = 8
for count = StartIndex to EndIndex
'Logic to append zeros
FileIndexLength = len(count)
FileIndex = count
for count1 = 1 to (Zeros - FileIndexLength)
FileIndex = "0" & FileIndex
next
DuplicateFileNamePath = strFolder & JustFileName & "_" & FileIndex & JUstFileExt
fso.CopyFile OrginalFileNamePath, DuplicateFileNamePath , True
if TimeStampCounter = count then
MyFile.WriteLine("LaunchID:" & LaunchID & "---" & "Total Files Duplicated:" & TimeStampGenerationAfterCopies1 & "---" & funGetTimeStamp())
TimeStampCounter = TimeStampCounter + TimeStampGenerationAfterCopies
TimeStampGenerationAfterCopies1 = TimeStampGenerationAfterCopies1 + TimeStampGenerationAfterCopies
else
end if
if FileCount = NumberOfFilesInFolder then
FileCount = 0
FolderIndex = FolderIndex + 1
strFolder = WorkingDirectory & "\Duplicates\" & LaunchID & "_" & FolderIndex & "\"
If Not fso.FolderExists(strFolder) Then
fso.CreateFolder(strFolder)
End If
End If
FileCount = FileCount + 1
next
MyFile.WriteLine("LaunchID:" & LaunchID & "---" & " End:" & funGetTimeStamp())
MyFile.Close
Set MyFile = Nothing
'wscript.echo "File Duplication Completed. Total Files:" & NumberOfCopies
Set fso = Nothing
Function funGetTimeStamp()
sDateTIme = Now()
iDate = Datepart("d",sDateTime)
iLen = Len(iDate)
If iLen = 1 Then
iDate = "0" & iDate
End If
sMonth= mid(MonthName(Datepart("m",sDateTime)),1,3)
iYear = Datepart("yyyy",sDateTime)
iHour = Datepart("h",sDateTime)
iLen = Len(iHour)
If iLen = 1 Then
iHour = "0" & iHour
End If
iMinute = Datepart("n",sDateTime)
iLen = Len(iMinute)
If iLen = 1 Then
iMinute = "0" & iMinute
End If
iSec = Datepart("s",sDateTime)
iLen = Len(iSec)
If iLen = 1 Then
iSec = "0" & iSec
End If
funGetTimeStamp = sMonth & "_" & iDate & "_" & iYear & "_" & iHour & "_" & iMinute & "_" & iSec
End Function
Folder structure (Create below folders at any location in your file system)
---
Monday, January 14, 2013
Eclipse - Failed to create Java Virtual Machine
Eclipse - Failed to create Java Virtual Machine.
I have downloaded eclipse and opened the IDE many times. Recently I was performing selenium webdriver setup on my friends machine and came across the following error.

In order to resolve this issue, I have updated the eclipse.ini file located in the eclipse folder, replaced the "-vmargs" with "-vm C:\Program Files\Java\jdk1.7.0_09\bin\javaw.exe", this solved the issue.
The order way is to create a short cut for eclipse.exe and open the properties windows using right click and update the target path as shown below. This is similar to passing the command line arguments while opening the eclipse.
---
I have downloaded eclipse and opened the IDE many times. Recently I was performing selenium webdriver setup on my friends machine and came across the following error.
In order to resolve this issue, I have updated the eclipse.ini file located in the eclipse folder, replaced the "-vmargs" with "-vm C:\Program Files\Java\jdk1.7.0_09\bin\javaw.exe", this solved the issue.
The order way is to create a short cut for eclipse.exe and open the properties windows using right click and update the target path as shown below. This is similar to passing the command line arguments while opening the eclipse.
---
Tuesday, December 18, 2012
Selenium 2.28 ready for download
Selenium 2.28
Download from this link.
| v2.28.0 |
| ======= |
| WebDriver: |
| * "null" can now be passed to executeScript |
| * .Net: Corrected FileUtilities.FindFile() to correctly return the |
| current directory if the specified file is located there. |
| * .Net: Introduces the Updating the CustomFinderType property to the |
| .NET FindsByAttribute. This allows use of custom By subclasses in |
| the PageFactory. The custom finder must be a subclass of By, and |
| it must expose a public constructor that takes a string argument. |
| * SafariDriver: better attempts to catch native dialogs from user |
| defined onbeforeunload handlers. |
| * Updating HtmlUnit to 2.11 |
| * Added the PhantomJS bindings to the release. You'll still need to |
| download PhantomJS itself separately. |
| RC: |
| * Implemented getAllWindowNames in WebDriverBackedSelenium |
| * Implemented openWindow in WebDriverBackedSelenium to allow opening |
| relative URLs |
| v2.27.0 |
| ======= |
| WebDriver: |
| * Added support for native events for Firefox 17. |
| * Added support for ghostdriver (PhantomJS) |
| * Adding new capability "enableElementCacheCleanup" to the IE |
| driver. When set to true, the IE driver will clean the |
| known-element cache of invalid elements after every page |
| load. This is intended to keep memory usage down and improve |
| performance. However, it is an intrusive change, so this |
| capability is provided temporarily to allow disabling this |
| behavior if problems arise. The default of this new capability is |
| "true", meaning this behavior is turned on by default. |
| * Added shift key handling to the synthetic keyboard actions. |
| * Modifying scroll behavior in IE driver SendKeysCommandHandler to |
| call Element::GetLocationOnceScrolledIntoView() instead of calling |
| the DOM scrollIntoView() function. Should result in less page |
| scrolling during test runs. |
| * Checking if CSS transforms on elements, or their parents, are |
| hiding them and therefore returning they arent visible. |
| * Add not, refreshed, invisibilityOfElementWithText to |
| ExpectedConditions. |
| * Added support for new IE10 pointer events. |
| * FIXED: 1543: Allowing equal sign in a cookie value. |
| * FIXED: 2103, 3508: Modified to no longer hang on alerts triggered |
| by onchange of <select> elements or by onsubmit of <form> |
| elements. |
| * FIXED: 2035: Returning a simple result (null) after opening a new |
| window instead of the window object (that can't be serialized to |
| JSON). |
| * FIXED: 2353: Only call blur() for IE if the element is not the |
| <body> element. |
| * FIXED: 3043: Better error message reporting when browser launch |
| fails. |
| * FIXED: 4490: Checking script evaluation result to prevent null |
| reference exception. |
| * FIXED: 4736: Added all of the extended colour keywords to the |
| Colors enum in support of |
| http://www.w3.org/wiki/CSS3/Color/Extended_color_keywords. |
| * FIXED: 4800: Fixed calculation of coordinates for elements in |
| frames/iframes where the element is scrolled out of view within |
| the frame. |
| Grid: |
| * FIXED: 3818: Generating session identifiers with UUID to prevent duplication. |
| RC: |
| * FIXED: 4668: Fixing ability to open relative URLs in WDBS. |
| * FIXED: 4273: Added getCssCount to the list of the methods |
| supported by WebDriverBackedSelenium. |
| * FIXED: 4055: WDBS implementation of getValue for radio buttons now |
| reflects behaviour of RC. |
| * FIXED: 4784: Processing locators before use in getCssCount and |
| getXpathCount. |
----
Sunday, November 25, 2012
Selenium - java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.ie.driver system property;
Selenium - java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.ie.driver system property;
IE browser will fail with the above mentioned exception if we upgrade the Selenium webdriver with 2.26.
Reason?
From 2.26 vesrion, IE driver got decoupled from selenium jar file and entire IE driver software is stored in a separate exe file, there are 32 and 64 bit versions.
You need to download the exe file similar to chrome driver and use the following code to run the test.
Sample code Java/TestNG
WebDriver driver;
@BeforeMethod public void StartDriver() { File file = new File("C:/Seleniumjars/IEDriverServer.exe"); System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); driver = new InternetExplorerDriver(); } @AfterMethod(alwaysRun = true) public void StopDriver() throws Exception { driver.quit(); } @Test(groups = { "GoogleTest" }, enabled = true,timeOut = 90000) public void Test_TC_01_1() throws Exception { driver.get("www.google.com"); }
Technical Reason?
IE driver original implementation was in dll using native C++. As per the client language bindings .dll was extracted during run-time.
For Java extracting from the .jar file.
For .NET extracting it from resource package into WebDriver.dll assembly.
Ruby and Python directly relied on the files, no extraction is required, just reference to the path.
The language bindings would use following method to load the dll and expose the API
JNI for Java
P/Invoke for .NET
ctypes for Python
FFI for Ruby
It works fine for simple scenarios, but due to above differences, IEdriver was showing different behavior between language bindings.
The way .NET bindings loading and managing the .dll, it was able to support multiple instances of IE.
Java bindings was not able to support multiple instances.
In order to unify the experience across all the languages, separate process was created IEDriverServer.exe because now the process management is defined my the operating system (Different version of Windows) and client bindings can interact directly with the process API.
As there is windows limitation where 32 bit process can't be loaded with 64 bit dll, separate 32 and 64 bit process are created.
As the IE driver got decoupled from the selenium release, it is possible to ship the fixes of IE driver without having to wait for complete selenium release.
It is easy to debug a standalone dll then dll loaded by the laungage binding.
Thanks a lot to Jim Evans (IE driver and .NET bindings project lead) for sharing the details and contributing to the open source community.
---
IE browser will fail with the above mentioned exception if we upgrade the Selenium webdriver with 2.26.
Reason?
From 2.26 vesrion, IE driver got decoupled from selenium jar file and entire IE driver software is stored in a separate exe file, there are 32 and 64 bit versions.
You need to download the exe file similar to chrome driver and use the following code to run the test.
Sample code Java/TestNG
WebDriver driver;
@BeforeMethod public void StartDriver() { File file = new File("C:/Seleniumjars/IEDriverServer.exe"); System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); driver = new InternetExplorerDriver(); } @AfterMethod(alwaysRun = true) public void StopDriver() throws Exception { driver.quit(); } @Test(groups = { "GoogleTest" }, enabled = true,timeOut = 90000) public void Test_TC_01_1() throws Exception { driver.get("www.google.com"); }
Technical Reason?
IE driver original implementation was in dll using native C++. As per the client language bindings .dll was extracted during run-time.
For Java extracting from the .jar file.
For .NET extracting it from resource package into WebDriver.dll assembly.
Ruby and Python directly relied on the files, no extraction is required, just reference to the path.
The language bindings would use following method to load the dll and expose the API
JNI for Java
P/Invoke for .NET
ctypes for Python
FFI for Ruby
It works fine for simple scenarios, but due to above differences, IEdriver was showing different behavior between language bindings.
The way .NET bindings loading and managing the .dll, it was able to support multiple instances of IE.
Java bindings was not able to support multiple instances.
In order to unify the experience across all the languages, separate process was created IEDriverServer.exe because now the process management is defined my the operating system (Different version of Windows) and client bindings can interact directly with the process API.
As there is windows limitation where 32 bit process can't be loaded with 64 bit dll, separate 32 and 64 bit process are created.
As the IE driver got decoupled from the selenium release, it is possible to ship the fixes of IE driver without having to wait for complete selenium release.
It is easy to debug a standalone dll then dll loaded by the laungage binding.
Thanks a lot to Jim Evans (IE driver and .NET bindings project lead) for sharing the details and contributing to the open source community.
---
Sunday, November 18, 2012
VS2012 - Web Performance Test - Virtual Users Limit
VS2012 - Web Performance Test - Virtual Users Limit.
I was surprised to see there is no virtual users restrictions (Number of users) for conducting load test using Visual Studio 2012 Ultimate. Generally any commercial load test tool fix the tool cost based on the number of virtual users, technologies (AJAX, Flex, Silver-light..) and monitoring agents, now the trend got changed, need to see how other commercial load test tools like HP loadrunner, Neoload change the licence structure.
---
I was surprised to see there is no virtual users restrictions (Number of users) for conducting load test using Visual Studio 2012 Ultimate. Generally any commercial load test tool fix the tool cost based on the number of virtual users, technologies (AJAX, Flex, Silver-light..) and monitoring agents, now the trend got changed, need to see how other commercial load test tools like HP loadrunner, Neoload change the licence structure.
---
Labels:
Visual Studio,
Visual Studio Performance
Friday, November 16, 2012
Visual Studio 2012 - Versions for GUI and Performance Testing
Visual Studio 2012 - Versions for GUI and Performance Testing
Recently I started working with CodedUI and Performance testing using Visual Studio. I have VS2012 Professional and didn't find any option to select CodedUI project, so started investigating which all versions of VS2012 support GUI testing and performance testing. Below screen shot helped me to understand the supported versions of VS2012.
Approx cost of VS2012.
---
Recently I started working with CodedUI and Performance testing using Visual Studio. I have VS2012 Professional and didn't find any option to select CodedUI project, so started investigating which all versions of VS2012 support GUI testing and performance testing. Below screen shot helped me to understand the supported versions of VS2012.
Approx cost of VS2012.
---
Labels:
CodedUI,
Visual Studio,
Visual Studio Performance
Thursday, November 8, 2012
Selenium 2.26 is ready for download.
Selenium 2.26
Download from this link.
Following are the major bug fixes and enhancements.
Hats-off to the development team for frequent releases and you determination to enhance the tool.
Download from this link.
Following are the major bug fixes and enhancements.
Hats-off to the development team for frequent releases and you determination to enhance the tool.
| v2.26.0 |
| ======= |
| WebDriver: |
| * Updated OperaDriver to 0.15. |
| * Added transparency support to the Color class. |
| * Increased lock time a bit for the FirefoxDriver to make tests more |
| stable on Windows. |
| * Added the enablePersistenHover capability to allow the user to specify |
| whether to use the persistent hover thread in the IE driver. Defaults |
| to true for IE. |
| * Added support for native events for Firefox 15 and 16. |
| * Removed deprecation from ChromeDriver constructors that take a Capabilities |
| object. Also added a method to set experimental options in ChromeOptions |
| which may be used to set options that aren't exposed through the ChromeOptions |
| API. |
| * Fixed SafariDriver to allow calling .quit() consecutively without error. |
| * Modified FirefoxDriver to use atoms to switch between frames. |
| * FIXED: 4535: Hover still does not work perfectly in IE. |
| * FIXED: 4676: Unable to fire javascript events into SVG's. |
| * FIXED: 4320: Impossible to IE run tests in parallel via TestNG. |
| * FIXED: 4309: 'Could not convert Native argument arg 0' error with Firefox. |
| * FIXED: 4593: Alert.accept() Cancels the Resend Alert/Dialog Box. |
| * FIXED: 4321: Upgrade HtmlUnitDriver to HtmlUnit 2.10. |
| * FIXED: 4639: Webdriver 2.25 fails to quit on Windows. |
| * FIXED: 3774: New SafariDriver sessions do not come with a clean profile. |
| * FIXED: 4375: Executing javascript hangs Firefox. |
| * FIXED: 4203: Java SafariDriver has limited websocket frame size. |
| * FIXED: 4165: WebDriver fails on a machine with no IP address. |
| * FIXED: 3969: SafariDriver should auto-dismiss alerts. |
| WebDriverJS: |
| * FIXED: 4648: findElement errros not helpful. |
| * FIXED: 4687: webserverjs cannot find module in node.js. |
| * FIXED: 4649: Wrong Content-Length calculation in webdriverjs. |
| * FIXED: 4425: Webdriver.js regression: webdriver.By.* selectors defect when |
| using Node.js. |
| Grid: |
| * FIXED: 4433: NPE at grid launch if invalid servlet class name is specified. |
| * FIXED: 4526: elenium node stop responding when there are 2 or more tests |
| waiting for a specific node. |
| * FIXED: 2549: "-role hub" doesn't allow Firefox to starts. --- |
Thursday, November 1, 2012
Webdriver - Display Browser Version and Name
Webdriver - Display Browser Version and Name.
Tests are getting executed on different browsers, some time getting confused with the browser name and version of the test results, so I have implemented following code to make an entry in the log file.
String script = "return navigator.appName;";
Temp = (String) ((JavascriptExecutor) driver).executeScript(script);
Print(Temp);
script = "return navigator.appVersion;";
Temp = (String) ((JavascriptExecutor) driver).executeScript(script);
Print(Temp);
script = "return navigator.platform;";
Print((String) ((JavascriptExecutor) driver).executeScript(script));
Print() is a user defined method created in our framework, to know more details select this link.
---
Tests are getting executed on different browsers, some time getting confused with the browser name and version of the test results, so I have implemented following code to make an entry in the log file.
String script = "return navigator.appName;";
Temp = (String) ((JavascriptExecutor) driver).executeScript(script);
Print(Temp);
script = "return navigator.appVersion;";
Temp = (String) ((JavascriptExecutor) driver).executeScript(script);
Print(Temp);
script = "return navigator.platform;";
Print((String) ((JavascriptExecutor) driver).executeScript(script));
Print() is a user defined method created in our framework, to know more details select this link.
---
Sunday, October 14, 2012
Webdriver - Modal dialog support
Webdriver modal dialog support
How to handle IE modal pop-up in Selenium Webdriver?
Modal dialog? When it is called system displays a dialog that user need to deal with before interacting with the rest of the page.
How to handle IE modal pop-up in Selenium Webdriver?
Modal dialog? When it is called system displays a dialog that user need to deal with before interacting with the rest of the page.
We can handle the modal dialog through selenium2.0 (Webdriver) in IE, but at few places Selenium is getting stuck with the
modal dialog, need to use alternative approach to over come this limitations ( Java Robot class).
Currently, Selenium don’t support the modal dialog in Firefox, Safari, Chrome and Opera.
IE support the modal dialog from Version 4.
Firefox added the support from Version 3.
Safari added the support from version 5.1.
Opera don’t support.
Other issues:
1.
Modal dialog as popup – Firefox, chrome and
safari consider it as popup and default block it, user need to turn it on.
2.
Debugging – We can’t debug the code even on the
latest IE9. Firefox, safari and chrome will let us open the Firebug/Web
inspector but difficult to debug.
3.
Mobile – Currently no mobile browser support
modal dialog.
It is an old API, but it has been added to the HTML5 spec as there are many old applications written using modal dialog, better to eliminate the “Modal dialog” in the new implementation where multi browser support is required and
usefollowing better options.
---
Wednesday, October 3, 2012
webdriver - modal dialog present
selenium webdriver modal dialog present
Recently we came across a situation where there is no modal dialog or alert, but selenium through "modal dialog present" exception, this issue occurred when there are multiple alerts in the same transaction.
Even the JavaScript executor is not working at this stage, I think Selenium team need to remove the "Modal Dialog Present" validation from the executor, so that when can proceed ahead by running code through JavaScript .
In order to overcome this situation we have used alert.dismiss(), so that selenium proceeded ahead without any exception.
---
Recently we came across a situation where there is no modal dialog or alert, but selenium through "modal dialog present" exception, this issue occurred when there are multiple alerts in the same transaction.
Even the JavaScript executor is not working at this stage, I think Selenium team need to remove the "Modal Dialog Present" validation from the executor, so that when can proceed ahead by running code through JavaScript .
In order to overcome this situation we have used alert.dismiss(), so that selenium proceeded ahead without any exception.
---
Sunday, September 23, 2012
Webdriver change-log URL
Webdriver change-log URL
http://code.google.com/p/selenium/source/browse/trunk/java/CHANGELOG
This link will help you understand the changes and bug-fixes made to Webdriver.
---
http://code.google.com/p/selenium/source/browse/trunk/java/CHANGELOG
This link will help you understand the changes and bug-fixes made to Webdriver.
---
Wednesday, September 19, 2012
Webdriver NodeJS
What languages do Selenium2/ Webdriver support ?
I think many people are not aware of NodeJS.
Selenium server speaks a simple language called the Webdriver Protocol.
We have NodeJS module called wd that has implemented Webdriver protocol in JavaScript.
What is NodeJS? Below screen shot can help you understand
---
I think many people are not aware of NodeJS.
Selenium server speaks a simple language called the Webdriver Protocol.
We have NodeJS module called wd that has implemented Webdriver protocol in JavaScript.
What is NodeJS? Below screen shot can help you understand
---
Thursday, September 13, 2012
Sunday, September 9, 2012
SeleniumWebdriver - Page objects Implementation - Part 2
SeleniumWebdriver - Page objects Implementation - Part 2
SeleniumWebdriver - Page objects Implementation - Part 1
After numerous requests, today I have got time to remove the unnecessary and confidential code and upload the entire project.
This framework is built by integrating Selenium2 + TestNG + ANT + VB Script.
It has taken lot of time to develop this framework, as Selenium is open-source I would like to dedicate this framework to the open-source community. Thanks a lot to Selenium Team for developing awesome tool.
Download Link (Extract the files into a folder, Elclipse can't extract the files)
1. Create new project "MercuryTours" in eclipse, download the rar file and extract directly into new MercuryTours folder of your corresponding work space.
2. Add the Selenium libraries using configure build path and refresh the project. If there are no error, every thing went fine, attaching the screen shot below.
How to setup Selenium?
3. If you have ANT setup, you can directly run the entire project by selecting the "run", attaching the screen shot below OR you can run the test directly in the eclipse by selecting any class or method and hit play.
4. Test results will be automatically stored the following location "C:\Selenium2_Results\MercuryTours" with time stamp. It will automatically send email notifications, update the details in the "SendEmail.vbs".
I hope above framework will be used for those people who are planning to implement keyword driven framework using page objects.
There are lot of things to explain in this framework, I would suggest to go through the part1 and explore the code.
Good Luck!
SeleniumWebdriver - Page objects Implementation - Part 1
After numerous requests, today I have got time to remove the unnecessary and confidential code and upload the entire project.
This framework is built by integrating Selenium2 + TestNG + ANT + VB Script.
It has taken lot of time to develop this framework, as Selenium is open-source I would like to dedicate this framework to the open-source community. Thanks a lot to Selenium Team for developing awesome tool.
Download Link (Extract the files into a folder, Elclipse can't extract the files)
1. Create new project "MercuryTours" in eclipse, download the rar file and extract directly into new MercuryTours folder of your corresponding work space.
2. Add the Selenium libraries using configure build path and refresh the project. If there are no error, every thing went fine, attaching the screen shot below.
How to setup Selenium?
3. If you have ANT setup, you can directly run the entire project by selecting the "run", attaching the screen shot below OR you can run the test directly in the eclipse by selecting any class or method and hit play.
4. Test results will be automatically stored the following location "C:\Selenium2_Results\MercuryTours" with time stamp. It will automatically send email notifications, update the details in the "SendEmail.vbs".
I hope above framework will be used for those people who are planning to implement keyword driven framework using page objects.
There are lot of things to explain in this framework, I would suggest to go through the part1 and explore the code.
Good Luck!
Thursday, September 6, 2012
Selenium - java.lang.NullPointerException
Selenium - java.lang.NullPointerException
When do we get this exception?
If we don't initialize the driver object and start using it in the code we can notice this exception.
In the below screen shot I have commented the initialize code and started running the test, system displayed NullPointerException. In my case, unknowing commented it while debugging the code.
When you get this king of exception, check the driver object initialization.
When do we get this exception?
If we don't initialize the driver object and start using it in the code we can notice this exception.
In the below screen shot I have commented the initialize code and started running the test, system displayed NullPointerException. In my case, unknowing commented it while debugging the code.
When you get this king of exception, check the driver object initialization.
---
Friday, July 27, 2012
How To Setup - Selenium 2.0(Webdriver), JDK, TestNG, ANT on Windows
How To Setup - Selenium 2.0(Webdriver), JDK, TestNG, ANT on Windows
I have written similar post for Selenium1, now it is updated to Selenium2(Webdriver)
Selenium setup checklist
1. JDK
2. ANT
3. Eclipse IDE
4. Eclipse TestNG
5. Selenium
6. How to create selenium project in Eclipse IDE
7. How to execute code in eclipse IDE using TestNG
Select following link to for Selenium full-fledged implementation.
Note: You need to have admin privileges to install few software's.
1. JDK
Download from http://www.oracle.com/technetwork/java/javase/downloads/index.html
JDK is machine and OS dependent, Check whether your machine is 32 OR 64 Bit.
How to Check?
Programs -> Accessories -> System Tools -> System Information
Download your corresponding JRE file and install on your PC.
Check whether it is installed correctly?
Type java -version at the command prompt, you should see the version related info.
2. ANT (Optional, required to build standalone jar files and scheduling the run)
Download from http://code.google.com/p/winant/
It is a self installable exe file, located the java JDK directory during installation.
Logoff and login for complete installation.
Check whether it is installed correctly?
Type ant - version at the command prompt, you should see the version related info.
3. Eclipse IDE
It is not required to install this software, just run the exe file to open the editor.
4. Eclipse TestNG
Inside the eclipse, select Help - > Eclipse Market Place
Search for TestNG and install directly into IDE.
5. Selenium
Download from http://code.google.com/p/selenium/downloads/list
Download Selenium-Server-Standalone-xxx.jar, it is a single jar file and easy to manage.
7. How to create selenium project in Eclipse IDE
Open the Eclipse IDE by selecting eclipse.exe file.
Select File->New -> Java Project
Enter project name and hit “Next”
Select “Finish”
Now you will see the project name "MyFirstProject" in the “Package Explorer” window.
Right click on the project name and create “Package”
Click on finish after typing the package name "Selenium".
In the package explorer, right click on the package name “Selenium” and select “Configure Build Path”.
Add downloded JAR files showed in the below screen by selecting “Add external jar” button.
You will not be able to run your test without this file, it contain the all the Selenium methods.
Now, right click on the package "Selenium" and select class
In the package explorer, right click on the package name “Selenium” and select “Configure Build Path”.
Add downloded JAR files showed in the below screen by selecting “Add external jar” button.
You will not be able to run your test without this file, it contain the all the Selenium methods.
Now, right click on the package "Selenium" and select class
You will notice a new class is created in the package explorer.
In the same way create classes as per your requirement and place necessary code.
8. How to execute code in eclipse IDE using TestNG
Copy the code from the below link and execute the test by selecting the "Play" button.
http://bharath-marrivada.blogspot.com/2011/07/selenium-testng-parameterization-excel.html
http://bharath-marrivada.blogspot.in/2012/06/selenium2webdriver-startiefirefoxchrome.html
If you still see any errors on the screen, place the cursor over the error code, Eclipse IDE provide auto suggestion on how to resolve the issue.
---
Thursday, July 12, 2012
Thursday, July 5, 2012
Android - Setting up Office 365
Android - Setting up Office 365
Recently we have migrated to office 365, following video helped me to setup on my mobile with ease.
Find your server related details by logging into www.portal.microsoftonline.com and select the link "Settings for POP, IMAP..." shown in the following screen shot.
Note: Following items are not covered in the below video
(1) Setting - Accounts and Sync - Background Data need to be checked.
(2) Once mail is configured, you will get - "Update Security Settings" Alert. Select this message from the notifications and Select "Allow" button.
---
Recently we have migrated to office 365, following video helped me to setup on my mobile with ease.
Find your server related details by logging into www.portal.microsoftonline.com and select the link "Settings for POP, IMAP..." shown in the following screen shot.
Note: Following items are not covered in the below video
(1) Setting - Accounts and Sync - Background Data need to be checked.
(2) Once mail is configured, you will get - "Update Security Settings" Alert. Select this message from the notifications and Select "Allow" button.
---
Monday, July 2, 2012
Optical fiber router picture
Optical fiber router data capacity
My ISP provide around 30 Mbps speed which is far greater than my office internet speed (6Mbps), so I was curious to know how he is able to provide me huge bandwidth, this made me to open the router box and investigate the connections, I was amazed to see that one single optical fiber string (size of human hair) is carrying the data, awesome technology. Now I can understand why we left the copper wires technology. Attaching the router box picture, there are 4 optical fibers, out of which 3 are made dummy, only one is connected to the router.
---
Friday, June 29, 2012
Webdriver - Calculate Page Load Time
Webdriver - Calculate Page Load Time
I have a similar post for Selenium1.
Selenium2 automatically wait during page load this is an awesome feature not required to write explicit wait or sync statement, but for AJAX calls need to write extra line of code.
How to calculate the page load time? Using java timers.
You can implement the following code in 3 different ways.
long start;
start = System.currentTimeMillis();
driver.get(url); or click();
Print (driver.getTitle() + " - " + (System.currentTimeMillis() - start) + " MilliSec");
1. Copy the above code where page response calculation is required, but it create redundancy.
2. Implement the code in page object. Below code contain 3 classes, 1 test class and 2 page objects. This code will help you to understand page object implementation and calculate the page download time.
package MercuryTours;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import MercuryTours.PageObjects.UtilityScript;
import MercuryTours.PageObjects._01_Initilize;
import MercuryTours.PageObjects._02_Login;
public class MercuryTours_TC_05 extends UtilityScript {
private static WebDriver driver;
@BeforeMethod
public static void StartDriver() {
driver = new InternetExplorerDriver();
}
@AfterMethod(alwaysRun = true)
public void StopDriver() {
driver.quit();
}
@Test(groups = { "MercuryToursTestCases" }, enabled = true,timeOut = 90000)
public void Test_TC_01() throws Exception {
_01_Initilize Initilize = PageFactory.initElements(driver,_01_Initilize.class);
Initilize.zOpen("http://newtours.demoaut.com/");
_02_Login Login = PageFactory.initElements(driver,_02_Login.class);
Login.zEnterCrediantials("qtp123", "qtp123");
}
}
package MercuryTours.PageObjects;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
public class _01_Initilize extends UtilityScript {
private WebDriver driver;
public _01_Initilize(WebDriver driver) throws InterruptedException {
this.driver = driver;
}
public _01_Initilize zOpen(String url) throws Exception {
driver.manage().timeouts().implicitlyWait(ImplicitWait, TimeUnit.SECONDS);
driver.manage().window().maximize();
long start;
start = System.currentTimeMillis();
driver.get(url);
Print (driver.getTitle() + " - " + (System.currentTimeMillis() - start) + " MilliSec");
return this;
}
}
package MercuryTours.PageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class _02_Login extends UtilityScript {
private WebDriver driver;
public _02_Login(WebDriver driver) throws InterruptedException {
this.driver = driver;
}
public _02_Login zEnterCrediantials(String UserNameTxt, String PasswordTxt)
throws InterruptedException {
Wait(3000);
driver.findElement(By.name("userName")).sendKeys(UserNameTxt);
driver.findElement(By.name("password")).sendKeys(UserNameTxt);
//driver.findElement(By.name("login")).click();
click(driver.findElement(By.name("login")));
Print("UserName:" + UserNameTxt);
Print("---Login");
Wait(3000);
return this;
}
public void click(WebElement element) {
long start;
start = System.currentTimeMillis();
element.click();
Print (driver.getTitle() + " - " + (System.currentTimeMillis() - start) + " MilliSec");
}
}
Note: Print() is a custom function written in Utility class, replace it with System.out.Println();
3. By extending the click() method using Webdriver interface.
---
Wednesday, June 13, 2012
Webdriver - How to start different browsers.
Webdriver - How to start different browsers.
Following example will help you understand how to invoke different browsers using Webdriver, you can also implemented case structure so that browser selection is automatic instead of comment and uncomment the code.
package MercuryTours;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
//@Listeners({ MercuryTours.TestNG.TestNGCustom.class, MercuryTours.TestNG.TestNGCustomeListener.class })
public class MercuryTours_TC_04 {
private static WebDriver driver;
@BeforeMethod
public static void StartDriver() {
driver = new InternetExplorerDriver();
/* //Download chromedriver.exe from http://code.google.com/p/chromedriver/downloads/list and place in following location
System.setProperty("webdriver.chrome.driver","C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
driver = new ChromeDriver(options);*/
/* FirefoxProfile Profile = new FirefoxProfile();
Profile.setPreference("browser.safebrowsing.malware.enabled", false);
driver = new FirefoxDriver(Profile);*/
//Safari driver still in experimental stage and run only on Mac
//For Windows need to relay on Selenium1 or RC
//Selenium browser = new DefaultSelenium("localhost", 4444, "*safari", "http://www.google.com");
//driver = new OperaDriver();
}
@AfterMethod(alwaysRun = true)
public void StopDriver() {
driver.quit();
}
@Test(groups = { "MercuryToursTestCases" }, enabled = true,timeOut = 90000)
public void Test_TC_01() throws Exception {
driver.get("http://newtours.demoaut.com/");
Thread.sleep(7000);
}
}
Following example will help you understand how to invoke different browsers using Webdriver, you can also implemented case structure so that browser selection is automatic instead of comment and uncomment the code.
package MercuryTours;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
//@Listeners({ MercuryTours.TestNG.TestNGCustom.class, MercuryTours.TestNG.TestNGCustomeListener.class })
public class MercuryTours_TC_04 {
private static WebDriver driver;
@BeforeMethod
public static void StartDriver() {
driver = new InternetExplorerDriver();
/* //Download chromedriver.exe from http://code.google.com/p/chromedriver/downloads/list and place in following location
System.setProperty("webdriver.chrome.driver","C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
driver = new ChromeDriver(options);*/
/* FirefoxProfile Profile = new FirefoxProfile();
Profile.setPreference("browser.safebrowsing.malware.enabled", false);
driver = new FirefoxDriver(Profile);*/
//Safari driver still in experimental stage and run only on Mac
//For Windows need to relay on Selenium1 or RC
//Selenium browser = new DefaultSelenium("localhost", 4444, "*safari", "http://www.google.com");
//driver = new OperaDriver();
}
@AfterMethod(alwaysRun = true)
public void StopDriver() {
driver.quit();
}
@Test(groups = { "MercuryToursTestCases" }, enabled = true,timeOut = 90000)
public void Test_TC_01() throws Exception {
driver.get("http://newtours.demoaut.com/");
Thread.sleep(7000);
}
}
-----------------
Subscribe to:
Posts (Atom)


























