Sunday, July 15, 2012

Eclipse IDE Keyboard Shortcuts

Eclipse IDE Keyboard Shortcuts for Developers


Eclipse IDE is widely used by developers. Eclipse IDE comes with lots of keyboard shortcuts. One should aware of these shortcuts and should use them to make development faster. Following are few shortcuts of eclipse:

Ctrl + S : Save One File          
Ctrl + Shift + S : Save All Opened Files         
Ctrl + N : Open the New Dialog          
Ctrl + 1 : Quick Fix
Ctrl + A : Select All
Ctrl + Shift + F : Format highlighted lines of code or all if none selected
Ctrl + Shift + O : Organize Imports   
Shift + F2 : Open External Javadoc    
Ctrl + Space : Content Assist            
Ctrl + Shift + P : Go to matching bracket or parenthesis     
Ctrl + Shift + R : Open a file/jump to a file
Ctrl + Shift + T : Open a type (e.g.: a class, an interface) without clicking through interminable list of packages
Ctrl + L : Go to line number N in the source file
Ctrl + Q : Go to the last edit location
Ctrl + / : Comment out all lines of code that are highlighted
CTRL + F8 : Shortcut for switching perspectives
CTRL + Shift + Delete : Delete until end of line
CTRL + Delete : Delete next element
CTRL + Backspace : Delete previous element
CTRL + Up / Down : Scroll up / down a line in the editor
Ctrl + F : Find / Replace
Ctrl + O : Go directly to a member (method, variable) of a huge class file
Ctrl + E : Go to other open editors
Ctrl + Shift + F4 : Close all Opened Editors
Alt + Shift + R : For Rename the file
Alt + Shift + L : Extract to Local Variable
Alt + Shift + M : Extract to Method
F3 : Open Declaration
Alt + Shift + X, J : Run As Java Application
Alt + Shift + D, J : Debug As Java Application
Alt + Shift + W : Show the class in the package view.
Ctrl + T : Type hierarchy. Go to a supertype/subtype
Ctrl + Q : Last edit
Alt + Left : Backward History
Alt + Right : Forward History
Ctrl + 1 : Quick Fix
Ctrl + A : Select All
Alt + Shift + S + R : Generate getter and setter methods
Crtl + D : Delete entire line of code
Ctrl + F4 : Close file
Alt + Up Arrow : Move the selected line of code up
Alt + Down Arrow : Move the selected line of code down
Ctrl + H : Search workspace
Ctrl + Shift + Arrow Keys : Jump between methods up/down
Ctrl + Shift + Y/X : Converts to lowercase/uppercase
Ctrl + Shift + U : Show Occurences in File quick menu
Ctrl + Shift + L : Show Key Assist
Ctrl + Shift + G : Find references in workspace
Ctrl + G : Find declarations in workspace
Ctrl + Alt + H : Open call hierarchy
F5 : Refresh

Saturday, November 26, 2011

Setup the c++ development environment in eclipse windows platform

1.Make sure c++ compiler installed machine, if not
           Install either of any cpp compiler software MinGW GCC(clickhere) or Cygwin GCC.

2.Configure the eclipse for c++ development.
  •  Install any eclipse (galileo or helio or any latest version).
  • launch the eclipse.
  • Go to Help->Install New Software->Add Site
  • Enter the cpp plugin url "http://download.eclipse.org/tools/cdt/releases/galileo"
  • Dont other software option and follow the instructions and install it.
 3. C++ project development in eclipse
  • Create new c++ new project, Go to  File->New->C++ Project
  • Select Empty project or Hello World project and also select the MinGW GCC or Cygwin GCC from toolchain combo box.
  • Now run the app by right click on the c++ code editor and then select run as launch c++ application.













Wednesday, November 3, 2010

Cucumber Automation


What is Cucumber actually?

  • Behavior driven development testing tool.
  • Bunch of behaviors in the form of scenarios.
  • Written mainly by non-technical people
  • Written in plain English.

What should you do actually?

  • Write a behavior in the form of scenarios in a feature files.
  • Write the code in order to satisfy the scenario.
  • Run the feature file.
  • Watch it fail
  • Write the automation scripts with the template provided by the cucumber.
  • The behavior of the application is satisfied by the test script.

Cucumber Installation on Windows Platform:

 1. Ruby Installation.

·        First, go to Ruby site and download the latest version of Ruby installer. Click on Rube installer exe file and then install the ruby.

·        Set up the classpath for Ruby by adding home directory path of the ruby into the Classpath variable.

·        Setup the Path system variable for Ruby by add the path string of the ruby bin dir into the path system variable.

·        Make sure ruby installed properly by open the command prompt and type the command ‘gem update --system’.
Note: More details about Ruby http://www.sapphiresteel.com/IMG/pdf/LittleBookOfRuby.pdf

2. Install Cucumber:

·        Make sure Ruby installed properly by doing the steps of the Ruby installation.
·        Open command prompt and execute the command “gem install cucumber win32console” and wait for some time for installation.
·        Once installation is done and make sure cucumber installed or not by the command “cucumber --version”.
3. Install Rspec gem:
·        RSpec Cucumber is an engine that lets you map English statements (or any language actually) to executable code in order to validate software specifications written as scenarios with the code written to fulfill them.
·        Install Rspec by the command “gem install rspec”

4. Install watir gem:
·        Watir is an open-source family of Ruby libraries for automating web browsers. It allows you to write tests that are easy to read and maintain. It is simple and flexible.
·        Install watir by the command “gem install watir”

Demo Project:

Demo in windows platform (Please refer “Cucumber Installation on Windows Platform” section for installations before starting the project).

Let’s consider the test case, search some word in Google search home page).

1. First, create a sample project (i.e. create any directory) and then create a sub directory “features’.

2. Create a feature file with extension ‘.feature’ inside the features directory.

3. Copy the below info into the feature file.

Feature: Google Search
In order to find out more about cucumber benefits
I need to able to search Google

Scenario: Google Search for cucumber benefits
Given that I am on the Google Homepage
When I search for cucumber benefits
Then I should see "Cucumber Benefits for Great Skin and Eyes"

Let’s consider the sample project dir structure as below

4. Now go to command prompt, run the command “cucumber features” as below
 

It will generate the template of the step definitions (blue text in screen shot)) for the above scenario

5. Now create a ‘step_definitions’ directory inside of the features directory and then create a ruby file and then copy the step definitions template.

6. Now, implement the logic for the step definitions by using Ruby, Watir Driver scripts.

Please find below the sample step-definitions file.


7. Finally, execute the features in command prompt as above.

Monday, November 1, 2010

Selenium with CSS locators.

XPath locator is one of the most quirky and one of the most precise locator. This disadvantage is clearly seen while running the tests under IE while Firefox works with xpath pretty well. This problem is related to internal browser features in particular to the libraries being used for elements location definition. But this is another story. The main thing is that tests which intensively use XPath work extremely slow under IE and this feature is the cause of huge variety of problems related to execution speed as well as quality of the tests itself especially during operations with dynamic content. For this reason CSS locators can be good alternative of XPath.
What can we do with CSS locators?

First of all,
CSS locators also give the ability to describe object hierarchy. For instance, the XPath locator like:
Xpath=//div//span/a

can be described via
CSS in the following way:
css=div * span > a

From the sample above we may see analogy for XPath and
CSS namely:
a) Character "/"  meaning next level of
DOM hierarchy corresponds to CSS operator ">".
b) Character "//" meaning any object hierarchy level under current object corresponds to
CSS operator "*".

Secondly, just like XPath, the
CSS locators can locate object by thier attribute values. For example the locator like:
Xpath=//div[@id="some_id"]

can be described via
CSS in the following way:
css=div[id=some_id]

Also there\'s abitity to check for partial attribute value matching. But
CSS locators are a little bit limited in this area. There\'s ability to verify that attribute value consists of several space-separated words but one word equals to some value. It means that the XPath locator like:
xpath=//div[contains(@title,"title")]

can be expressed via
CSS like:
css=div[@title~=title]

Both the locators can detect the element like 

<div title="some multiword title" />  while the element like  <div title="my_title" />
  
can\'t be detected by CSS locator from above.

Also
CSS has simplified form for some attributes. For instance, the element having the id attribute like  <div id=some_id /> can be located by the following CSS:
css=div#some_id

In addition to that
CSS locators have specific way to define the object by the class attribute. The XPath locator like:
xpath=//div[@class="myclass"]

has the following
CSS analog:
css=div.myclass

Such features make
CSS suitable in some cases.

 More details about CSS can be found by the forllowing URL: http://www.w3.org/TR/CSS2/selector.html

So, in some cases CSS locators are the analogs of XPath locators with one serious advantage: CSS works fast no matter what the browser we use.

Of course,
CSS locators have their own limitations like: problems to locate objects by index, problem to locate objects higher in the object hierarchy or so.

Tuesday, October 12, 2010

Selenium-RC setup

Selenium-RC automation Setup:

 Follow the below steps for setup the RC project.
 1.Install Java
2.Install any java IDE ( Eclipse or any IDE)
3.Download RC from SeleniumHQ downloads page
4.Start any java IDE (eclipse or any IDE)
5.Create new project
6.Add to your project classpath selenium-java-client-driver.jar
7.Record your test from Selenium-IDE and translate it to java code (Selenium IDE has automatic translation feature to generate tests in variety of languages)
8.Run selenium server from console
9.Run your test in the IDE

Selenium automation problems

Handling Ajax events:

If you want to automate an UI which is having some UI elements are behaving based on ajax events.
Suppose there is an UI element (text field),when you type some text on the field  that will invoke some ajax call for hitting the server and get some info from server and showing on the screen.
Now problem is when you use the type command in selenium ,it wont call the ajax events.You need to call
ajax events after type the text into the text field.

Selenium is providing the following commands for automate the ajax events.

Selenium.type(xpath of element,some text); // this will do the type the text ,but it wont invokes the ajax events
Selenium.fireEvent(xpath of element,"blur"); //this will do the ajax calls.

Verify vertical scrollbar appears for the text-area element:

Selenium is not providing any command to checking the appearance of the vertical scrollbar.
We need to findout by using java script and need to invoke the script by the selenium.
Selenium API is providing the command for executing the java script.

Use below script when you know only the classname for the text-area.

Selenium.type(xpath of the text-area element,text value);
String str1=Selenium.getEval("this.browserbot.getCurrentWindow().document.getElementsByClassName('cssclassname')[0].clientHeight");
String str = Selenium.getEval("this.browserbot.getCurrentWindow().document.getElementsByClassName('cssclassname')[0].scrollHeight");
int clientHeight = Integer.parseInt(str1);
int scrollHeight = Integer.parseInt(str);

if(clientHeight < scrollHeight){
System.out.println("Vertical scrollbar appears");
}else{
System.out.println("Vertical scrollbar is not appear");
}

Note: If you know the Id or Name of the text-area field then
use getElementById() or getElementByName() instead of the getElementByClassName method.

I'm unable to upload a file using selenium core; when I try to type in the file upload text field, nothing happens!

There seems to be two inter-related problems:

1 – Unfortunately, this is yet another JavaScript security restriction; JS is not allowed to modify the value of input type=”file” form fields. You can work around this by running your tests under Selenium IDE or under Selenium RC running in the experimental “*chrome” mode for Firefox, but at present there is no straight forward way to do this in Selenium Core.

2 – Handling of the “Choose File” dialog box with Selenium alone is not possible. We need to have another program running to select the path and file from the “Choose File” dialog box.

So, How can we upload files?
Fortunately, there exists a workaround to the above problems. This is where the magic of AutoIt and Selenium combination can work wonders!

First we will write a simple script in AutoIt and save the file as an executable: (please read documentation on AutoIt website to learn how to save the scripts as an executable file)


1    WinWaitActive("Choose file")
2    Send("C:\attach\samplefile.txt") \\location of the file you want to attach to the form and submit
3    Send("{ENTER}")

We shall name the above file as attachFile.exe

Now, within a Java code, we can run a process which will execute the above program just before when we want to upload and submit a file.

01    package com.company;
02   
03    import java.io.IOException;
04    import com.thoughtworks.selenium.Selenium;
05   
06    public class AddAttachment {
07       public static void attach(Selenium selenium, String fileName) {
08          try {
09             String[] commands = new String[]{};
10             commands = new String[]{"c:\\test\\attachFile.exe"}; //location of the autoit executable
11             Runtime.getRuntime().exec(commands);
12          } catch (IOException e) {}
13   
14          //autoit executable is now waiting for a "Choose file" dialog to popup
15          selenium.click("name=browseButton");
16          //once the "Choose file" dialog is opened, the autoit will input the path and file name
17       }
18    }

The above seems to be the easiest way to deal with file uploads and attachments using Selenium.

Note: Use AutoIt for the things which are not automated by the selenium-core like handling browser certification,authentication popups etc.

How to start selenium server using Java code

When test automating a web application using Selenium, we have to start the Selenium server first, so that a new Selenium session is created to talk to the web browser. This can be either done manually, i.e user running a command line to start the Selenium server, or to get the pure automation effect of Selenium, it is best to start the Selenium server via a program code.

01    package com.company;
02    import org.openqa.selenium.server.RemoteControlConfiguration;
03    import org.openqa.selenium.server.SeleniumServer;
04    import com.thoughtworks.selenium.Selenium;
05    import java.net.BindException;
06    import java.net.ServerSocket;
07   
08    public class Server {
09        public static SeleniumServer server;
10        public static void startSeleniumServer() throws Exception {
11   
12           try {
13            ServerSocket serverSocket = new ServerSocket(RemoteControlConfiguration.DEFAULT_PORT);
14            serverSocket.close();
15                    //Server not up, start it
16                    try {
17                     RemoteControlConfiguration rcc = new RemoteControlConfiguration();
18                     rcc.setPort(RemoteControlConfiguration.DEFAULT_PORT);
19                     server = new SeleniumServer(false, rcc);
20   
21                    } catch (Exception e) {
22                        System.err.println("Could not create Selenium Server because of: "
23                                + e.getMessage());
24                        e.printStackTrace();
25                    }
26                    try {
27                        server.start();
28                        System.out.println("Server started");
29                    } catch (Exception e) {
30                        System.err.println("Could not start Selenium Server because of: "
31                                + e.getMessage());
32                        e.printStackTrace();
33                    }
34                } catch (BindException e) {
35                    System.out.println("Selenium server already up, will reuse...");
36                }
37        }
38   
39        public static void stopSeleniumServer(Selenium selenium){
40            selenium.stop();
41            if (server != null)
42              {
43                 try
44                 {
45                     selenium.shutDownSeleniumServer();
46                     server.stop();
47   
48                    server = null;
49                 }
50                 catch (Exception e)
51                 {
52                    e.printStackTrace();
53                 }
54              }
55        }
56   
57    }

Selenium Failed to start new browser in iexplore mode when starting/stoping the server dynamically by the code in IE.

I'm unable to run my scripts with IE using iexplore mode when starting the server using java code(dynamically) and I'm getting below error

java.lang.RuntimeException: Could not start Selenium session: Failed to start new browser session: Error while launching browser
    at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:89)
    at com.aol.patch.util.SeleniumBase.openBrowser(SeleniumBase.java:91)
    at com.aol.patch.tests.CommonTest.testEnter(CommonTest.java:28)
Caused by: com.thoughtworks.selenium.SeleniumException: Failed to start new browser session: Error while launching browser
    at com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:97)
    at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:91)
    at com.thoughtworks.selenium.HttpCommandProcessor.getString(HttpCommandProcessor.java:262)
    at com.thoughtworks.selenium.HttpCommandProcessor.start(HttpCommandProcessor.java:223)
    at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:81)
   
Here the problem is selenium is trying to start in iehta mode eventhough  specified that start in a iexplore mode.


After doing some quick search, I found that there is work around to start a selenium in iehta mode.

The only way to get the original iexplore is to change the browser mode to "*iexploreproxy" or "piiexplore".

So, I changed my config file to start selenium using "*iexploreproxy" instead of "*iexplore" and  working fine with IE.
I hope this can be helpful.