LoadRunner Interview Questions

1. Why should you automate Performance Testing?
Ans: Automated Performance Testing is a discipline that leverages products,people, and processes to reduce the risks of application, upgrade, or patch deployment. Automated performance testing is about applying production workloads to pre-deployment systems while simultaneously measuring system performance and end-user experience.

A well-constructed performance test answers questions such as:
* Does the application respond quickly enough for the intended users?
* Will the application handle the expected user load and beyond?
* Will the application handle the number of transactions required by the business?
* Is the application stable under expected and unexpected user loads?
* Are you sure that users will have a positive experience on go-live day?

2. What are the LoadRunner components?
Ans: LoadRunner contains the following components:
* The Virtual User Generator captures end-user business processes and creates an automated performance testing script, also known as a virtual user script.
* The Controller organizes, drives, manages, and monitors the load test.
* The Load Generators create the load by running virtual users.
* The Analysis helps you view, dissect, and compare the performance results.
* The Launcher provides a single point of access for all of the LoadRunner components.

3. What is Scenario?
Ans: A scenario is a file that defines the events that occur during each testing session, based on performance requirements.

4. What is Vusers?
Ans: In the scenario, LoadRunner replaces human users with virtual users or Vusers. A scenario can contain tens, hundreds, or even thousands of Vusers.

5. What is Vuser Script?

Ans: The actions that a Vuser performs during the scenario are described in a Vuser script.

6. What is transaction?
Ans: To measure the performance of the server, you define transactions. A transaction represents end-user business processes that you are interested in
measuring.

7. Tell me about load testing process?
Ans :
* Plan Load Test: Define your performance testing requirements, for example,number of concurrent users, typical business processes and required response times.
* Create Vuser Scripts: Capture the end-user activities into automated scripts.
* Define a Scenario: Use the LoadRunner Controller to set up the load test environment.
* Run a Scenario: Drive, manage, and monitor the load test from the LoadRunner Controller.
* Analyze the Results: Use LoadRunner Analysis to create graphs and reports, and evaluate the performance.

8. What is the default username/password for HP Web Tour Application ?

Ans: Username= jojo and Password = bean. (For Version 9.10)

9. What is the default test script used in loadrunner ?
Ans: demo_scenario.lrs

10. What are the different types of graph present in Loadrunner Controller?
Ans: Runtime graphs, Transaction graphs, Web resource graphs, System Resource graphs, Network graphs, web server resource graphs, Web Application server graphs, database graphs.

11. What are subtypes of Runtime graphs?
Ans: Running vusers, user defined data points, Error Statistics, vusers with Errors.

12. Explain Running Vuser graph?

Ans: Running Vusers - whole scenario graph lets you monitor the number of Vusers that are running at a given time.

13. Explain transaction response time graph?

Ans; Transaction Response Time - whole scenario graph lets you monitor the amount of time it takes for each transaction to be completed.

14. Explain HTTP/Sec graph?
Ans: Hits per Second - whole scenario graph lets you monitor the number of hits (HTTP requests) on the Web server made by Vusers during each second of the scenario run.

15. Explain Windows Resource graphs?
Ans: Windows Resources graph lets you monitor the Windows resource usage measured during a scenario (such as CPU, disk, or memory utilization).

16. Explain Virtual User Generation?
Ans: The LoadRunner Virtual User Generator works on a record-and playback principle. As you walk through a business process on your application, VuGen records your actions into automated scripts which will form the foundation of your load tests.

17. Which language loadrunner uses for scripts?

Ans: LoadRunner uses ANSI C. As your scripts become more advanced, you can leverage C to extend LoadRunner beyond record and playback.

18. What are general run-time settings that apply to all types of scripts?
Ans:
* Run Logic: the number of repetitions
* Pacing: the time to wait between repetitions
* Think Time: the time the user stops to think between steps
* Log: the level of information that you want to gather during playback

19. Explain Correlation ?
Ans: Correlation saves the changing values to a parameter. When running the emulation, the Vuser does not use the recorded value—instead, it uses the new value/session ID, assigned to it by the server.

20. What Component of LoadRunner would you use to play Back the script in multi user mode?
Ans: The Controller component is used to playback the script in multi-user mode. This is done during a scenario run where a vuser script is executed by a number of vusers in a group.

21. What is a rendezvous point?
Ans: You insert rendezvous points into Vuser scripts to emulate heavy user load on the server. Rendezvous points instruct Vusers to wait during test execution for multiple Vusers to arrive at a certain point, in order that they may simultaneously perform a task. For example, to emulate peak load on the bank server, you can insert a rendezvous point instructing 100 Vusers to deposit cash into their accounts at the same time.

22. Explain the recording mode for web Vuser script?
Ans: We use VuGen to develop a Vuser script by recording a user performing typical business processes on a client application. VuGen creates the script by recording the activity between the client and the server. For example, in web based applications, VuGen monitors the client end of the database and traces all the requests sent to, and received from, the database server. We use VuGen to: Monitor the communication between the application and the server; Generate the required function calls; and Insert the generated function calls into a Vuser script.

23. Why do you create parameters?
Ans: Parameters are like script variables. They are used to vary input to the server and to emulate real users. Different sets of data are sent to the server each time the script is run. Better simulate the usage model for more accurate testing from the Controller; one script can emulate many different users on the system.

24. What is correlation? Explain the difference between automatic correlation and manual correlation?
Ans: Correlation is used to obtain data which are unique for each run of the script and which are generated by nested queries. Correlation provides the value to avoid errors arising out of duplicate values and also optimizing the code (to avoid nested queries). Automatic correlation is where we set some rules for correlation. It can be application server specific. Here values are replaced by data which are created by these rules. In manual correlation, the value we want to correlate is scanned and create correlation is used to correlate.

25. How do you find out where correlation is required? Give few examples from your projects?
Ans: Two ways: First we can scan for correlations, and see the list of values which can be correlated. From this we can pick a value to be correlated. Secondly, we can record two scripts and compare them. We can look up the difference file to see for the values which needed to be correlated. In my project, there was a unique id developed for each customer, it was nothing but Insurance Number, it was generated automatically and it was sequential and this value was unique. I had to correlate this value, in order to avoid errors while running my script. I did using scan for correlation.

26. Where do you set automatic correlation options?
Ans: Automatic correlation from web point of view can be set in recording options and correlation tab. Here we can enable correlation for the entire script and choose either issue online messages or offline actions, where we can define rules for that correlation. Automatic correlation for database can be done using show output window and scan for correlation and picking the correlate query tab and choose which query value we want to correlate. If we know the specific value to be correlated, we just do create correlation for the value and specify how the value to be created.

27. What is a function to capture dynamic values in the web Vuser script?
Ans: Web_reg_save_param function saves dynamic data information to a parameter.

28. When do you disable log in Virtual User Generator, When do you choose standard and extended logs?
Ans: Once we debug our script and verify that it is functional, we can enable logging for errors only. When we add a script to a scenario, logging is automatically disabled. Standard Log Option: When you select
Standard log, it creates a standard log of functions and messages sent during script execution to use for debugging. Disable this option for large load testing scenarios. When you copy a script to a scenario, logging is automatically disabled Extended Log Option: Select
extended log to create an extended log, including warnings and other messages. Disable this option for large load testing scenarios. When you copy a script to a scenario, logging is automatically disabled. We can specify which additional information should be added to the extended log using the Extended log options.

29. How do you debug a LoadRunner script?
Ans: VuGen contains two options to help debug Vuser scripts-the Run Step by Step command and breakpoints. The Debug settings in the Options dialog box allow us to determine the extent of the trace to be performed during scenario execution. The debug information is written to the Output window. We can manually set the message class within your script using the lr_set_debug_message function. This is useful if we want to receive debug information about a small section of the script only.

30. How do you write user defined functions in LR? Give me few functions you wrote in your previous project?
Ans: Before we create the User Defined functions we need to create the external library (DLL) with the function. We add this library to VuGen bin directory. Once the library is added then we assign user defined function as a parameter. The function should have the following format: __declspec (dllexport) char* (char*, char*)Examples of user defined functions are as follows:GetVersion, GetCurrentTime, GetPltform are some of the user defined functions used in my earlier project.

31. What are the changes you can make in run-time settings?
Ans: The Run Time Settings that we make are:
a) Pacing - It has iteration count.
b) Log - Under this we have Disable Logging Standard Log and
c) Extended Think Time - In think time we have two options like Ignore think time and Replay think time.
d) General - Under general tab we can set the vusers as process or as multithreading and whether each step as a transaction.

32. Where do you set Iteration for Vuser testing?
Ans: We set Iterations in the Run Time Settings of the VuGen. The navigation for this is Run time settings, Pacing tab, set number of iterations.

33. How do you perform functional testing under load?
Ans: Functionality under load can be tested by running several Vusers concurrently. By increasing the amount of Vusers, we can determine how much load the server can sustain.

34. What is Ramp up? How do you set this?
Ans: This option is used to gradually increase the amount of Vusers/load on the server. An initial value is set and a value to wait between intervals can be specified. To set Ramp Up, go to ‘Scenario Scheduling Options’

35. What is the advantage of running the Vuser as thread? Ans: VuGen provides the facility to use multithreading. This enables more Vusers to be run per generator. If the Vuser is run as a process, the same driver program is loaded into memory for each Vuser, thus taking up a large amount of memory. This limits the number of Vusers that can be run on a single generator. If the Vuser is run as a thread, only one instance of the driver program is loaded into memory for the given number of
Vusers (say 100). Each thread shares the memory of the parent driver program, thus enabling more Vusers to be run per generator.

36. What is the relation between Response Time and Throughput?
Ans: The Throughput graph shows the amount of data in bytes that the Vusers received from the server in a second. When we compare this with the transaction response time, we will notice that as throughput decreased, the response time also decreased. Similarly, the peak throughput and highest response time would occur approximately at the same time.

37. Explain the Configuration of your systems?
Ans: The configuration of our systems refers to that of the client machines on which we run the Vusers. The configuration of any client machine includes its hardware settings, memory, operating system, software applications, development tools, etc. This system component configuration should match with the overall system configuration that would include the network infrastructure, the web server, the database server, and any other components that go with this larger system so as to achieve the load testing objectives.

38. How do you identify the performance bottlenecks?
Ans: Performance Bottlenecks can be detected by using monitors. These monitors might be application server monitors, web server monitors, database server monitors and network monitors. They help in finding out the troubled area in our scenario which causes increased response time. The measurements made are usually performance response time, throughput, hits/sec, network delay graphs, etc.

39. If web server, database and Network are all fine where could be the problem?
Ans: The problem could be in the system itself or in the application server or in the code written for the application.

40. How did you find web server related issues?

Ans: Using Web resource monitors we can find the performance of web servers. Using these monitors we can analyze throughput on the web server, number of hits per second that occurred during scenario, the number of http responses per second, the number of downloaded pages per second.

41. What is the difference between Overlay graph and Correlate graph?
Ans: Overlay Graph: It overlay the content of two graphs that shares a common x-axis. Left Y-axis on the merged graph show’s the current graph’s value & Right Y-axis show the value of Y-axis of the graph that was merged. Correlate Graph: Plot the Y-axis of two graphs against each other. The active graph’s Y-axis becomes X-axis of merged graph. Y-axis of the graph that was merged becomes merged graph’s Y-axis.

42. How did you plan the Load? What are the Criteria?
Ans: Load test is planned to decide the number of users, what kind of machines we are going to use and from where they are run. It is based on 2 important documents, Task Distribution Diagram and Transaction profile. Task Distribution Diagram gives us the information on number of users for a particular transaction and the time of the load. The peak usage and off-usage are decided from this Diagram. Transaction profile gives us the information about the transactions name and their priority levels with regard to the scenario we are deciding.

43. What does vuser_init action contain?

Ans: Vuser_init action contains procedures to login to a server.

44. What does vuser_end action contain?
Ans: Vuser_end section contains log off procedures.

45. What is think time? How do you change the threshold?
Ans: Think time is the time that a real user waits between actions. Example: When a user receives data from a server, the user may wait several seconds to review the data before responding. This delay is known as the think time. Changing the Threshold: Threshold level is the level below which the recorded think time will be ignored. The default value is five (5) seconds. We can change the think time threshold in the Recording options of the Vugen.

46. What is the difference between standard log and extended log?
Ans: The standard log sends a subset of functions and messages sent during script execution to a log. The subset depends on the Vuser type Extended log sends a detailed script execution messages to the output log. This is mainly used during debugging when we want information about: Parameter substitution. Data returned by the server. Advanced trace.

47. Explain the following functions: - lr_debug_message
Ans: The lr_debug_message function sends a debug message to the output log when the specified message class is set. lr_output_message - The lr_output_message function sends notifications to the Controller Output window and the Vuser log file. lr_error_message - The lr_error_message function sends an error message to the LoadRunner Output window. lrd_stmt - The lrd_stmt function associates a character string (usually a SQL statement) with a cursor. This function sets a SQL statement to be processed. lrd_fetch - The lrd_fetch function fetches the next row from the result set.

48. Explain Throughput?
Ans: If the throughput scales upward as time progresses and the number of Vusers increase, this indicates that the bandwidth is sufficient. If the graph were to remain relatively flat as the number of Vusers increased, it would be reasonable to conclude that the bandwidth is constraining the volume of data delivered.

49. Types of Goals in Goal-Oriented Scenario
Ans: Load Runner provides you with five different types of goals in a goal oriented scenario:
* The number of concurrent Vusers
* The number of hits per second
* The number of transactions per second
* The number of pages per minute
* The transaction response time that you want your scenario

50. Explain Analysis Scenario (Bottlenecks)?
Ans: In Running Vuser graph correlated with the response time graph you can see that as the number of Vusers increases, the average response time of the check itinerary transaction very gradually increases. In other words, the average response time steadily increases as the load
increases. At 56 Vusers, there is a sudden, sharp increase in the average response time. We say that the test broke the server. That is the mean time before failure (MTBF). The response time clearly began to degrade when there were more than 56 Vusers running simultaneously.

Jmeter Interview Questions

What is Jmeter?

Jmeter is one of the Java tools which is used to perform load testing client/server applications.
Apache JMeter is open source software, a 100% pure Java desktop application
Designed to load test functional behavior and measure performance of the application.
It was originally designed for testing Web Applications but has since expanded to other test functions

What are the other applications tested by Jmeter?

JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more)

What do u see when u open a jmeter?

By default, Test Plan and Workbench can be seen.

What is Test Plan in Jmeter?

Test plan describes a series of steps JMeter will execute when run.
A complete test plan will consist of one or more Thread Groups, logic conrollers, sample generating controllers, listeners, timers, assertions, and configuration elements.

What is Work bench?

The Workbench is simply an area to store test elements while you are in the process of constructing a test. The Workbench is a sandbox for any test or portion of a test that you are working on. When you are ready to test what you have designed in the Workbench, you can copy or move the elements into the Test Plan.
It also contains Non- Test Elements: Http mirror sever and Http Proxy server which is not available in the thread group & Test plan

What is Thread Group?

Thread group elements are the beginning points of any test plan. All controllers and samplers must be under a thread group. Listeners, may be placed directly under the test plan, in which case they will apply to all the thread groups. The controls for a thread group allow you to: Set the number of threads and Set the ramp-up period and Set the number of times to execute the test

What are the parts of thread group?

Sampler :Sends various types of requests to the server
Listeners : Results of the Run can be viewed & saved
Timer : Makes th erun more realistic by inserting delays between the requests
Controller : responsible for controlling the flow of the thread group.If we have defined request to be executed on some logic like if-then-else or loop structure in java
Config Element : Info about the requests are added to work with samplers using this.
Assertion : To check if the responses are within given time and containing expected data.

What are Controllers and its types?

JMeter has two types of Controllers :

Samplers Controllers
Samplers tell JMeter to send requests to a server. For example, add an HTTP Request Sampler if you want JMeter to send an HTTP request. You can also customize a request by adding one or more Configuration Elements to a Sampler.

Logical Controllers
Logical Controllers let you customize the logic that JMeter uses to decide when to send requests. Logic Controllers can change the order of requests coming from their child elements. For example, you can add an Interleave Logic Controller to alternate between two HTTP Request Samplers.

What is Configuration element?

A configuration element works closely with a Sampler. Configuration elements can be used to set up defaults and variables for later use by samplers. Note that these elements are processed at the start of the scope in which they are found, i.e. before any samplers in the same scope.

Its elements:

CSV Data Set Config: Used to read lines from a file, and split them into variables.
HTTP Authorization Manager : You can specify one or more user logins for web pages that are restricted using server authentication
Java Request Defaults: You can set default values for Java testing
HTTP Cookie Manager: The Cookie Manager element has two functions: 
It stores and sends cookies just like a web browser.
Second, you can manually add a cookie to the Cookie Manager.However, if you do this, the cookie will be shared by all JMeter threads

HTTP Request Defaults: This element lets you set default values that your HTTP Request controllers use.
HTTP Header Manager : The Header Manager lets you add or override HTTP request headers

What are Listeners?

A listener is a component that shows the results of the samples
The results can be shown in a tree, tables, graphs or simply written to a log file

The Graph Results listener plots the response times on a graph.
The "View Results Tree" Listener shows details of sampler requests and responses, and can display basic HTML and XML representations of the response.
Other listeners provide summary or aggregation information.

Every listener in JMeter provides a field to indicate the file to store data to.
They also provide means to view, save, and read saved test results.

Selenium Interview Questions

What is Selenium?
Selenium is a set of tools that supports rapid development of test automation scripts for web based applications. Selenium testing tools provides a rich set of testing functions specifically
designed to fulfil needs of testing of a web based application.

What are the main components of Selenium testing tools?
Selenium IDE, Selenium RC and Selenium Grid

What is Selenium IDE?
Selenium IDE is for building Selenium test cases. It operates as a Mozilla Firefox add on and provides an easy to use interface for developing and running individual test cases or entire test
suites. Selenium-IDE has a recording feature, which will keep account of user actions as they are performed and store them as a reusable script to play back.

What is the use of context menu in Selenium IDE?
It allows the user to pick from a list of assertions and verifications for the selected location.

Can tests recorded using Selenium IDE be run in other browsers?
Yes. Although Selenium IDE is a Firefox add on, however, tests created in it can also be run in other browsers by using Selenium RC (Selenium Remote Control) and specifying the name of the test
suite in command line.

What are the advantage and features of Selenium IDE?
1. Intelligent field selection will use IDs, names, or XPath as needed
2. It is a record & playback tool and the script format can be written in various languages including C#, Java, PERL, Python, PHP, HTML
3. Auto complete for all common Selenium commands
4. Debug and set breakpoints
5. Option to automatically assert the title of every page
6. Support for Selenium user-extensions.js file

What are the disadvantage of Selenium IDE tool?
1. Selenium IDE tool can only be used in Mozilla Firefox browser.
2. It is not playing multiple windows when we record it.

What is Selenium RC (Remote Control)?
Selenium RC allows the test automation expert to use a programming language for maximum flexibility and extensibility in developing test logic. For example, if the application under test returns
a result set and the automated test program needs to run tests on each element in the result set, the iteration / loop support of programming language’s can be used to iterate through the result set,
calling Selenium commands to run tests on each item.

Selenium RC provides an API and library for each of its supported languages. This ability to use
Selenium RC with a high level programming language to develop test cases also allows the automated testing to be integrated with the project’s automated build environment.

What is Selenium Grid?
Selenium Grid in the selenium testing suit allows the Selenium RC solution to scale for test suites that must be run in multiple environments. Selenium Grid can be used to run multiple instances of
Selenium RC on various operating system and browser configurations.

How Selenium Grid works?
Selenium Grid sent the tests to the hub. Then tests are redirected to an available Selenium RC, which launch the browser and run the test. Thus, it allows for running tests in parallel with the entire
test suite.

What you say about the flexibility of Selenium test suite?
Selenium testing suite is highly flexible. There are multiple ways to add functionality to Selenium framework to customize test automation. As compared to other test automation tools, it is
Selenium’s strongest characteristic. Selenium Remote Control support for multiple programming and scripting languages allows the test automation engineer to build any logic they need into their
automated testing and to use a preferred programming or scripting language of one’s choice. Also, the Selenium testing suite is an open source project where code can be modified and
enhancements can be submitted for contribution.

What test can Selenium do?
Selenium is basically used for the functional testing of web based applications. It can be used for testing in the continuous integration environment. It is also useful for agile testing

What is the cost of Selenium test suite?
Selenium test suite a set of open source software tool, it is free of cost.

What browsers are supported by Selenium Remote Control?
The test automation expert can use Firefox, IE 7/8, Safari and Opera browsers to run tests in Selenium Remote Control.

What programming languages can you use in Selenium RC?
C#, Java, Perl, PHP, Python, Ruby

What are the advantages and disadvantages of using Selenium as testing tool?
Advantages: Free, Simple and powerful DOM (document object model) level testing, can be used for continuous integration; great fit with Agile projects.

Disadvantages: Tricky setup; dreary errors diagnosis; can not test client server applications.

What is difference between QTP and Selenium?
Only web applications can be testing using Selenium testing suite. However, QTP can be used for testing client server applications. Selenium supports following web browsers: Internet Explorer,
Firefox, Safari, Opera or Konqueror on Windows, Mac OS X and Linux. However, QTP is limited to Internet Explorer on Windows.

QTP uses scripting language implemented on top of VB Script. However, Selenium test suite has the flexibility to use many languages like Java, .Net, Perl, PHP, Python, and Ruby.

What is difference between Borland Silk test and Selenium?
Selenium is completely free test automation tool, while Silk Test is not. Only web applications can be testing using Selenium testing suite. However, Silk Test can be used for testing client server
applications. Selenium supports following web browsers: Internet Explorer, Firefox, Safari, Opera or Konqueror on Windows, Mac OS X and Linux. However, Silk Test is limited to Internet Explorer and
Firefox. Silk Test uses 4Test scripting language. However, Selenium test suite has the flexibility to use many languages like Java, .Net, Perl, PHP, Python, and Ruby.

Security Testing : How to Start

Testing a software application will require you to think about various ways of attempting to break the software. A quality assurance engineer typically will be able to come up with all sorts of methods to verify the functionality of the feature or component. But you need to go deeper. Think like a malicious user, consider the cases that shouldn't be allowed, input things that no one would ever really put in, try to twist and break that application in any way you possibly can.

Take for example a web based form that has a textbox asking for the user to input a number

<form>
<input type="text" size=3 name="age">Enter your age</input>
</form>

Even though the textbox is informing the user to enter the age, think how could I break this. As the QA tester you are attempting to validate the textbox actually works. As the security tester you are verifying that the developer has coded and validated the input as it is being received. Think of ways to break this. You are not verifying that the feature works, you are verifying that nothing bad could occur if invalid data is entered. Try to think like a malicious user would. This requires time and experience to be good at this, but anyone can learn and become more proficient with security testing. Try entering some of the following combinations.

Try letters instead of numbers
Try special characters
Try double byte chars
Try encoded characters
Try to determine the boundaries; Can you enter an age of 0? Can you enter an age of 1024
Try entering nothing. Null character
Try entering an enormous entry
Try entering a SQL backtick ' if the application is fronted by a database
Try entering a ldap search query if the application is fronted by an ldap server

As you can see typically to verify the functionality of the textbox is only the start. The input must be verified and validated before the developer should even begin to use the input. Just because the textbox provides you with help to determine what should be entered in the textbox, does not mean a malicious user will also obey those suggestions.
Security testing takes a different mindset than QA testing. As a security tester you must think how to break and abuse this application as a black hat hacker or malicious user would.

Be mean to the application, try to do something that will cause problems to the underlying code. Just thinking out of the box will considerably help you on your way to become more security oriented.

To really understand how a black hat hacker or malicious user could break and abuse your software, you need to understand some of the techniques that he/she would use. You can refer the blogs under category 'Security Testing'. Each post will describe some how each of the attack methods are performed, how you can test for them, and how to block, protect, and code security protection.

Reading all of this can be a daunting task and requires a large amount of learning. To start the process, create testcases for limit and boundary conditions, test negative input, try special characters. This alone is much more than the typical feature testing that occurs within the normal software development lifecycle.

If a lot of this is over your head, don't worry, everyone started out as a beginner. Because you are here at this site means you are striving to learn. Read, learn, and digest as much information at this site and others to become more proficient at security testing.

Capturing Screen Shot

/*********************************************************************

Script Summary

Title  : Webdriver Script019 : Capturing Screen Shot
Author : Gaurav Khanna

1. Set the Base URL to http://not-just-a-tester.blogspot.in
2. Capture the screenshot.
3. Save it to directory.

 *********************************************************************/

package com.gaurav.webdriver;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;

public class s019_CapturingScreenShot {

    // Declaring variable 'webDriver' of WebDriver Type
    WebDriver webDriver;

    // Declaring baseURL variable of String Type
    String baseUrl;

    @BeforeMethod
    public void startUp() throws Exception {

        // Initializing FireFox Driver
        webDriver = new FirefoxDriver();

        // Assigning URL to variable 'baseUrl'
        baseUrl = "http://not-just-a-tester.blogspot.in";
    }

    @Test
    public void testscript019() throws Exception {

        // Open the link
        webDriver.get(baseUrl);

        // Captures the screen shot
        File scrFile = ((TakesScreenshot) webDriver)
                .getScreenshotAs(OutputType.FILE);

        // Copying screen shot to the desired location
        FileUtils.copyFile(scrFile, new File("c:\\gk\\screenshot.png"));

    }

    @AfterMethod
    public void shutDown() throws Exception {

        // This will close the browser
        webDriver.quit();
    }
}

Printing Drop Down Values

/*********************************************************************

 Script Summary

 Title  : Webdriver Script016 : Printing Drop Down Values
 Author : Gaurav Khanna

 1. Set the Base URL to "http://book.theautomatedtester.co.uk/chapter1".
 2. Find the Drop Down menu.
 3. Print the values of options present.
 4. Click on option 'Selenium Grid'.
 5. Prints the selected option in drop down.

 *********************************************************************/

package com.gaurav.webdriver;

import java.util.List;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class s016_PrintingDropDownValues {

    // Declaring variable 'webDriver' of WebDriver Type
    WebDriver webDriver;

    // Declaring baseURL variable of String Type
    String baseUrl;

    @BeforeMethod
    public void startUp() throws Exception {

        // Initializing FireFox Driver
        webDriver = new FirefoxDriver();

        // Assigning URL to variable 'baseUrl'
        baseUrl = "http://book.theautomatedtester.co.uk/chapter1";
    }

    @Test
    public void testscript016() throws Exception {

        // Open the link
        webDriver.get(baseUrl);

        // Maximize browser window
        webDriver.manage().window().maximize();

        // Creates a List of type WebElement which will store all values present
        // in dropdown
        List<WebElement> dropDownValues = webDriver.findElements(By
                .xpath("//*[@id='selecttype']"));

        // This loop will assign all values present in 'dropDownValues' to
        // 'dropDownElements'
        for (WebElement dropDownElements : dropDownValues) {

            // This will print the List "dropDownElements"
            System.out.println(dropDownElements.getText());
        }

    }

    @AfterMethod
    public void shutDown() throws Exception {

        // This will close the browser
        webDriver.quit();
    }

}

Printing Count of Web Element Present

/*********************************

Title  : Printing Count of Web Element Present
Author : Gaurav Khanna

 *********************************/

package com.gaurav.webdriver;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class PrintingCountOfWebElementPresent {

// Declaring variable 'webDriver' of WebDriver Type
WebDriver webDriver;

// Declaring baseURL variable of String Type
String baseUrl;

// Declaring count variable of Int Type
int count;

@Test
public void testprintingCountOfWebElementPresent() {

// Initializing FireFox Driver
webDriver = new FirefoxDriver();

// Assigning URL to variable 'baseUrl'
baseUrl = "http://not-just-a-tester.blogspot.in";

// Open the link
webDriver.get(baseUrl);

// size() method count the number of anchor tags present
count = webDriver.findElements(By.xpath("//a")).size();

// Prints the value of count variable
System.out.println("Total Number of Links Present: " + count);

// This will close the browser
webDriver.quit();
}

}