Automation Using Selenium Webdriver

Wednesday, 28 September 2016

Method OverLoading

Method Overloading in Java

Whenever same method name is exiting multiple times in the same class with different number of parameter or different order of parameters or different types of parameters is known asmethod overloading.

Why use method Overloading in Java ?

Suppose we have to perform addition of given number but there can be any number of arguments, if we write method such as a(int, int)for two arguments, b(int, int, int) for three arguments then it is very difficult for you and other programmer to understand purpose or behaviors of method they can not identify purpose of method. So we use method overloading to easily figure out the program. For example above two methods we can write sum(int, int) and sum(int, int, int) using method overloading concept.

Syntax

class  class_Name
{
Returntype  method()
{.........}
Returntype  method(datatype1 variable1)
{.........}
Returntype  method(datatype1 variable1, datatype2 variable2)
{.........}
Returntype  method(datatype2 variable2)
{.........}
Returntype  method(datatype2 variable2, datatype1 variable1)
{.........}
}

Different ways to overload the method

There are two ways to overload the method in java
  • By changing number of arguments or parameters
  • By changing the data type

By changing number of arguments

In this example, we have created two overloaded methods, first sum method performs addition of two numbers and second sum method performs addition of three numbers.

Example Method Overloading in Java

class Addition
{
void sum(int a, int b)
{
System.out.println(a+b);
}
void sum(int a, int b, int c)
{
System.out.println(a+b+c);
}
public static void main(String args[])
{
Addition obj=new Addition();
obj.sum(10, 20);
obj.sum(10, 20, 30);
}
}

Output

30
60

By changing the data type

In this example, we have created two overloaded methods that differs in data type. The first sum method receives two integer arguments and second sum method receives two float arguments.

Example Method Overloading in Java

class Addition
{
void sum(int a, int b)
{
System.out.println(a+b);
}
void sum(float a, float b)
{
System.out.println(a+b);
}
public static void main(String args[])
{
Addition obj=new Addition();
obj.sum(10, 20);
obj.sum(10.05, 15.20);
}
}

Output

30
25.25

Why Method Overloading is not possible by changing the return type of method?

In java, method overloading is not possible by changing the return type of the method because there may occur ambiguity. Let's see how ambiguity may occur:
because there was problem:

Example of Method Overloading

class Addition
{  
  int sum(int a, int b)
  {
  System.out.println(a+b);
  }  
  double sum(int a, int b)
  {
  System.out.println(a+b);
  }  
  public static void main(String args[])
  {  
  Addition obj=new Addition();  
  int result=obj.sum(20,20); //Compile Time Error   
  }
}  

Explanation of Code

Example

int result=obj.sum(20,20);
Here how can java determine which sum() method should be called
Note: The scope of overloading is within the class.
Any object reference of class can call any of overloaded method.

Can we overload main() method ?

Yes, We can overload main() method. A Java class can have any number of main() methods. But run the java program, which class should have main() method with signature as "public static void main(String[] args). If you do any modification to this signature, compilation will be successful. But, not run the java program. we will get the run time error as main method not found.

Example of override main() method

Example

public class mainclass
{
public static void main(String[] args)
{
System.out.println("Execution starts from Main()");
}
void main(int args)
{
System.out.println("Override main()");
}
double main(int i, double d)
{
System.out.println("Override main()");
return d;
}
}

Outpot

Execution starts from Main()

Java Object Oriented

Inheritance in Java

The process of obtaining the data members and methods from one class to another class is known as inheritance. It is one of the fundamental features of object-oriented programming.

Important points

  • In the inheritance the class which is give data members and methods is known as base or super or parent class.
  • The class which is taking the data members and methods is known as sub or derived or child class.
  • The data members and methods of a class are known as features.
  • The concept of inheritance is also known as re-usability or extendable classes or sub classing or derivation.

Why use Inheritance ?

  • For Method Overriding (used for Runtime Polymorphism).
  • It's main uses are to enable polymorphism and to be able to reuse code for different classes by putting it in a common super class
  • For code Re-usability
  • Syntax of Inheritance

    class Subclass-Name extends Superclass-Name  
    {  
       //methods and fields  
    }  
  • Real life example of inheritance

    The real life example of inheritance is child and parents, all the properties of father are inherited by his son.
  • Real life example of inheritance

    The real life example of inheritance is child and parents, all the properties of father are inherited by his son.
    real life example of inheritance
  • The following diagram use view about inheritance
  • In the above diagram data members and methods are represented in broken line are inherited from faculty class and they are visible in student class logically.

    Advantage of inheritance

    If we develop any application using concept of Inheritance than that application have following advantages,
    • Application development time is less.
    • Application take less memory.
    • Application execution time is less.
    • Application performance is enhance (improved).
    • Redundancy (repetition) of the code is reduced or minimized so that we get consistence results and less storage cost.
    Note: In Inheritance the scope of access modifier increasing is allow but decreasing is not allow. Suppose in parent class method access modifier is default then it's present in child class with default or public or protected access modifier but not private(it decreased scope).

    Tpyes of Inheritance

    Based on number of ways inheriting the feature of base class into derived class we have five types of inheritance; they are:
    • Single inheritance
    • Multiple inheritance
    • Hierarchical inheritance
    • Multilevel inheritance
    • Hybrid inheritance

    Single inheritance

    In single inheritance there exists single base class and single derived class.

    Example of Single Inheritance

    class Faculty
    {  
    float salary=30000;  
    }  
    class Science extends Faculty
    { 
    float bonous=2000;
    public static void main(String args[])
    {
    Science obj=new Science(); 
    System.out.println("Salary is:"+obj.salary);  
    System.out.println("Bonous is:"+obj.bonous);  
    }  
    } 

    Output

    Salary is: 30000.0
    Bonous is: 2000.0
    
    single inheritance

    Multilevel inheritances in Java

    In Multilevel inheritances there exists single base class, single derived class and multiple intermediate base classes.
    Single base class + single derived class + multiple intermediate base classes.

    Intermediate base classes

    An intermediate base class is one in one context with access derived class and in another context same class access base class.
  • Hence all the above three inheritance types are supported by both classes and interfaces.

    Example of Multilevel Inheritance

    class Faculty
    {  
    float total_sal=0, salary=30000;  
    }  
    
    class HRA extends Faculty
    {  
    float hra=3000;  
    }  
    
    class DA extends HRA
    {  
    float da=2000;  
    }  
    
    class Science extends DA
    { 
    float bonous=2000;
    public static void main(String args[])
    {
    Science obj=new Science(); 
    obj.total_sal=obj.salary+obj.hra+obj.da+obj.bonous;
    System.out.println("Total Salary is:"+obj.total_sal);   
    }  
    }

    Output

    Total Salary is: 37000.0
    

    Multiple inheritance

    In multiple inheritance there exist multiple classes and singel derived class.
    multiple inheritance
    The concept of multiple inheritance is not supported in java through concept of classes but it can be supported through the concept of interface.

    Hybrid inheritance

    Combination of any inheritance type
    In the combination if one of the combination is multiple inheritance then the inherited combination is not supported by java through the classes concept but it can be supported through the concept of interface.
    hybrid inheritance

    Inheriting the feature from base class to derived class

    In order to inherit the feature of base class into derived class we use the following syntax

    Syntax

    class ClassName-2 extends ClasssName-1
    {
    variable  declaration;
    Method declaration;
    }
    extends keyword

    Explanation

    1. ClassName-1 and ClassName-2 represents name of the base and derived classes respectively.
    2. extends is one of the keyword used for inheriting the features of base class into derived class it improves the functionality of derived class.

    Important Points for Inheritance:

    • In java programming one derived class can extends only one base class because java programming does not support multiple inheritance through the concept of classes, but it can be supported through the concept of Interface.
    • Whenever we develop any inheritance application first create an object of bottom most derived class but not for top most base class.
    • When we create an object of bottom most derived class, first we get the memory space for the data members of top most base class, and then we get the memory space for data member of other bottom most derived class.
    • Bottom most derived class contains logical appearance for the data members of all top most base classes.
    • If we do not want to give the features of base class to the derived class then the definition of the base class must be preceded by final hence final base classes are not reusable or not inheritable.
    • If we are do not want to give some of the features of base class to derived class than such features of base class must be as private hence private features of base class are not inheritable or accessible in derived class.
    • Data members and methods of a base class can be inherited into the derived class but constructors of base class can not be inherited because every constructor of a class is made for initializing its own data members but not made for initializing the data members of other classes.
    • An object of base class can contain details about features of same class but an object of base class never contains the details about special features of its derived class (this concept is known as scope of base class object).
    • For each and every class in java there exists an implicit predefined super class called java.lang.Object. because it providers garbage collection facilities to its sub classes for collecting un-used memory space and improved the performance of java application.

    Example of Inheritance

    class Faculty
    {  
    float salary=30000;  
    }  
    class Science extends Faculty
    { 
    float bonous=2000;
    public static void main(String args[])
    {
    Science obj=new Science(); 
    System.out.println("Salary is:"+obj.salary);  
    System.out.println("Bonous is:"+obj.bonous);  
    }  
    } 

    Output

    Salary is: 30000.0
    Bonous is: 2000.0
    

    Why multiple inheritance is not supported in java?

    Due to ambiguity problem java does not support multiple inheritance at class level.

    Example

    class A
    {
    void disp()
    {
    System.out.println("Hello");
    }
    }
    class B
    {
    void disp()
    System.out.println("How are you ?");
    }
    }
    class C extends A,B  //suppose if it were
    {
    Public Static void main(String args[])
    {  
    C obj=new C();  
    obj.disp();//Now which disp() method would be invoked?  
    }  
    }  
    In above code we call both class A and class B disp() method then it confusion which class method is call. So due to this ambiguity problem in java do not use multiple inheritance at class level, but it support at interface level.

    Difference between Java Inheritance and C++ Inheritance

    The main difference between java Inheritance and C++ Inheritance is; Java doesn’t support multiple inheritance but C++ support.



On test case failure take a screenshot with Selenium WebDriver

Take Screen Shot in Selenium

We have discussed about simple way of taking a screen shot earlier. Now in this , 
we will see how to take screen shot.


import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;


public class Screenshoot {

public static WebDriver driver;
public static void main(String[] args) throws IOException
{
//Step1:Launch FirefoxDriver
        //Step2:Navigate to http://newtours.demoaut.com/
//Take screenshot
System.out.println("********Excution stating wait*********");
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
driver=new ChromeDriver();
driver.get("http://newtours.demoaut.com/");
//code for taking screenshot
File Srcfile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(Srcfile, new File("E:\\Jagan\\Screenshot.png"));
System.out.println("Screen shot taken");
        driver.close();
}


}Take Screen Shot in selenium


On test case failure take a screenshot with Selenium WebDriverOn test case failure take a screenshot with Selenium WebDriver


Don't you think "A picture is worth a thousand words.." :)

It is always(at least in most of the cases :P) better to take screenshot of webpage when
the test runfails.

Because with one look at the screenshot we can get an idea of where exactly the script got failed.
Moreover reading screenshot is easier compare to reading 100's of console errors :P

Here is the sample code to take screenshot of webpage
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

FileUtils.copyFile(scrFile, new File("PathOnLocalDrive")

To get screenshot on test failure , we should put the entire code in try-catch block . In the catch block
make sure to copy the above screenshot code.

In my example I am trying to register as a new user. For both first and last name fields
I have used correct locator element whereas for emailaddress field I have used wrong locator
element i.e name("GmailAddress1").

So when I run the script , test failed and I got the screenshot with pre filled first and last names
but not email address.

Here is the sample code :
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TakeScreenshot {
 
   WebDriver driver;
 
 @BeforeTest
 public void start(){
  driver = new FirefoxDriver();
 }
 
 @Test
 public void Test() throws IOException{
 try{
  driver.get("https://mail.google.com/");
  driver.findElement(By.id("link-signup")).click();
  driver.findElement(By.name("FirstName")).sendKeys("First Name");
  driver.findElement(By.name("LastName")).sendKeys("Last Name");
  driver.findElement(By.name("GmailAddress1")).sendKeys("GmailAddress@gmail.com");
  
 }catch(Exception e){
  //Takes the screenshot  when test fails
     File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
     FileUtils.copyFile(scrFile, new File("E:\\jagan\\failure.png"));
   
  }
 }
}
And here is the screenshot of webpage on test failure

On test case failure take a screenshot with Selenium WebDriver