Thursday, November 14, 2013

Native apps live on the device and are accessed through icons on the device home screen. Native apps are installed through an application store (such as Google Play or Apple’s App Store). They are developed specifically for one platform, and can take full advantage of all the device features–they can use the camera, the GPS, the accelerometer, the compass, the list of contacts, and so on. They can also incorporate gestures (either standard operating-system gestures or new, app-defined gestures). And native apps can use the device’s notification system and can work offline.

Web apps are not real apps; they are really websites that, in many ways, look and feel like native applications. They are run by a browser and typically written in HTML5. Users first access them as they would access any web page: they navigate to a special URL and then have the option of “installing” them on their home screen by creating a bookmark to that page.

Web apps became really popular when HTML5 came around and people realized that they can obtain native-like–functionality in the browser. Today, as more and more sites use HTML5, the distinction between web apps and regular web pages has become blurry.

Hybrid apps are part native apps, part web apps. (Because of that, many people incorrectly call them “web apps”). Like native apps, they live in an app store and can take advantage of the many device features available. Like web apps, they rely on HTML being rendered in a browser, with the caveat that the browser is embedded within the app.

Often, companies build hybrid apps as wrappers for an existing web page; in that way, they hope to get a presence in the app store, without spending significant effort for developing a different app. Hybrid apps are also popular because they allow cross-platform development: that is, the same HTML code components can be reused on different mobile operating systems, reducing significantly the development costs. Tools such as PhoneGap and Sencha Touch allow people to design and code across platforms, using the power of HTML.

Thursday, August 29, 2013

Yes, you heard it right. It is almost two years with the release of the Selenium 2, now the team is focusing on the Mobile testing. Developers from the projects Appium, ios-driver and selendroid are working to create a suite that support mobile platform.

Wednesday, August 7, 2013

HP is new version of the QTP software is UTF (Unified Functional Testing).
I am attending demo offered by HP, post all the details later. Need to see how it can compete with the popular open source tool Selenium.
Mean while go through the following links and video for an overview of the HP UFT.

Monday, April 29, 2013

I was trying to understand how to build the Webdriver and came across the following content(Build Doctor) which can help us understand the Webdriver build system.

WebDriver creator Simon Stewart knows a thing or two about building code. So I was intrigued when he mentioned that he’d written a grammar for Rake, to enable building Java code.

Replacing Ant with Rake has been a compelling idea for some years now. Until now I wasn’t convinced that you weren’t going to have the same issues as Ant – poorly factored builds that rapidly evolve into a project specific DSL. This may change things.

The build system, or grammar as Simon calls it allows you to break a typical monolithic build file down into a collection of fragments. Each fragment can have one or more targets declared, and each target has some attributes. More at CrazyFunBuild.

Simon is undergoing an exceptionally drawn-out email interview on the process:

Your build tool is one of a few new players. What was your motivation for adding to the build gene pool? Were you scratching an itch, or do you have a broader motive?

Definitely scratching an itch. WebDriver started off as a simple java

project, but it quickly became obvious that it’d also be useful to

have language bindings for things like C#, ruby and python. I could

have settled on a separate build tool for each language, but there are

places where a Java component depends on a DLL (for example) Switching

build tools repeatedly when constructing a single logical unit seemed

wasteful, so I started looking around for a build tool that would

provide support for all the languages I wanted to use.

I failed, but settled on rake because it had poor support for everything

The next problem was that as the project grew, so did the Rakefile. It

ended up being obscenely long and increasingly fragile, and in the end

I was about the only person who would confidently hack around in

there. An obviously sub-optimal state of affairs. The first step in

fixing this was to break out common tasks into functions (because a

Rakefile is just a ruby script in disguise) This still left a pretty

large build file to deal with, so the next stage was to allow us to

break the script into pieces. The obvious issue is that if you do

this, where are paths relative to? The location of the top-level

Rakefile? Or the fragment of code in the subdirectory? Worse, it’d be

unwise to have duplicate task names (“test”) but detecting those while

writing a fragment of a build file would be troublesome at best.

At the same time, I like my builds to be as declarative as possible,

only breaking through the “fourth wall” to scripting when necessary.

Encouraging people to leave lots of little scripts that are the pieces

of a larger application as build files seemed like the worst way of

achieving that goal of “declarativeness”. So, I wrote a parser for a

sub-set of ruby (which mutated into a subset of python) using ragel

that parses build files and generates rake targets based on the path

to the build file and the name of the target in that file. It’s by no

means an original idea: the only thing I can take even a crumb of

credit for is the current implementation (and it’s pretty much

designed to work with selenium, so there are lots of corners cut in

there)

By clearly defining the build grammar, there’s also a chance to

clearly define how paths are interpreted, so that neatly side-steps

that problem. I also provided an “escape hatch” so that you can call

out to other rake tasks as required. Better this is just a thin skin

around other build tools (the java parts delegate to ant controlled

programatically, and the .net pieces use visual studio) but it means

that anyone can read the build files and understand how the source

code, regardless of language, is transformed into a binary.

So, yeah, scratching the itch of “I want a single, declarative build

tool that allows someone not familiar with the other build tools used

to understand how the system works, and which can work with multiple

languages”. Right now, it’s specific to the project, and I’m

comfortable with that: I want to write a browser automation framework,

Saturday, March 16, 2013

Friday, March 1, 2013

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.

'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.

Monday, January 14, 2013

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.

Sunday, November 25, 2012

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.

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

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.

Friday, November 16, 2012

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.

Thursday, November 1, 2012

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.

Chrome support from initial versions, but has following bugs
Issue16045,
Issue42939.

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

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.

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.

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.

Thursday, September 6, 2012

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.