Automation Using Selenium Webdriver

Tuesday, 8 November 2016

Test Case Grouping using TestNG ‘Groups’ Annotations

TestNG allows us to group several tests together. You can group certain tests based on what behavior/aspect they are actually testing. You may have a scenario where few tests belong to a certain group(say Regression) and other ones belong to other group(say Sanity) and yet another one belong to other group(say Login). With this approach you may decide to execute only certain group of test and skip other ones(let’s say there was a regression on related code, so we prefer to only execute Sanity related tests).The group test is a new innovative feature in TestNG, it doesn’t exist in Junit framework
Method annotated with @BeforeGroups gets executed only once for a group before any of the test of that group executes. Method annotated with @AfterGroups gets executed only once for a group only after all of the tests of that group finished execution.
Let’s see this with a simple example:
Review a test group example.
  1. checkMail(),deleteMail() and composeMail() are belong to group ‘Sanity’.
  2. checkDrafts(), checkAccountDetails() and checkPromotions() are belong to group ‘Regression’.
  3. If i chose to execute only ‘Sanity’ then Step1 should be  executed.
package samples;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
public class TestNG_Groups {
@BeforeGroups(“Login”)
public void login_Account() {
System.out.println(“Account Login”);
}
@Test(groups = “Sanity”)
public void checkMail() {
System.out.println(“Checking Mail in the Inbox”);
}
@Test(groups = “Regression”)
public void checkDrafts() {
System.out.println(“Checking Drafts”);
}
@Test(groups = “Regression”)
public void checkPromotions() {
System.out.println(“Checking Promotions”);
}
@Test(groups = “Regression”)
public void checkAccountDetails() {
System.out.println(“Checking Account Details”);
}
@Test(groups = “Sanity”)
public void composeMail() {
System.out.println(“Send a Mail “);
}
@Test(groups = “Sanity”)
public void deleteMail() {
System.out.println(“Delete a Mail”);
}
@AfterGroups(“Login”)
public void logout_Account() {
System.out.println(“Account Logout”);
}
}
Now create testng.xml file,
<suite name=”Build 2.0.1″>
<test name=”groups Test”>
<classes>
<class name=”samples.TestNG_Groups” />
</classes>
<groups>
<run>
<include name=”Sanity” />
</run>
</groups>
</test>
</suite>


When you run this xml only the Sanity testcases should be executed.We can also use ‘exclude’ to exclude desired testcases.

Monday, 7 November 2016

How To Set Proxy Settings In Selenium WebDriver Test

How To Set Proxy Settings In Selenium WebDriver Test
Sometimes, You need to set proxy settings of browser to run your selenium webdriver test.
 As you know, selenium launch fresh browser every time you run test so default proxy setting
will be No Proxy. You can set It In two ways.
1. Creating firefox profile and then use that profile In selenium test.
2. Using DesiredCapabilities. We will use DesiredCapabilities of selenium to set proxy.
What is DesiredCapabilities?
Using DesiredCapabilities, we can set and configure webdriver browser driver Instance
settings before launching It. Simplest example Is -> I wants to set proxy settings for
my webdriver browser Instance. I can do It using DesiredCapabilities.

How to set proxy settings of browser using DesiredCapabilities
I have created simple example to set proxy settings for firefox browser. It will set firefox driver
 browser Instance proxy settings as bellow.

HTTP Proxy = localhost, Port = 8080
SSL Proxy = localhost, Port = 8080
FTP Proxy = localhost, Port = 8080
SOCKS Host = localhost, Port = 8080

Example to set proxy for firefox driver Instance.
package Testing_Pack;

import java.io.IOException;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class ProxySettings {

 WebDriver driver;

 @BeforeTest
 public void setUpDriver() {
  //Set proxy IP and port. Here localhost Is proxy IP and 8080 Is Port number.
  //You can change both values as per your requirement.
  String PROXY = "localhost:8080";
  //Bellow given syntaxes will set browser proxy settings using DesiredCapabilities.
  Proxy proxy = new Proxy();
  proxy.setHttpProxy(PROXY).setFtpProxy(PROXY).setSslProxy(PROXY)
    .setSocksProxy(PROXY);
  DesiredCapabilities cap = new DesiredCapabilities();
  cap.setCapability(CapabilityType.PROXY, proxy);
  //Use Capabilities when launch browser driver Instance.
  driver = new FirefoxDriver(cap);
 }

 @Test
 public void start() throws IOException {
  System.out.println("Check your webdriver driver Instance's proxy setttings.");
 }
}

Run above example In your eclipse. It will open firefox browser driver Instance.
Check proxy settings for It from browser menu Tools -> Options -> Advanced tab -> Network tab -> Settings button. Click on Settings button. It will open connection settings popup as bellow.



You can see that proxy settings are set as given In test DesiredCapabilities configuration.
 You can change proxy IP and port number as per your requirement.


Maximize browser window using webdriver

Maximize browser window using webdriver


There are times when we want to to maximize the browser window during the execution of our script .For this purpose webdriver providers a built-in method and here is the syntax :

WebDriver driver;
driver.manage().window().maximize();

Here is the sample code using TestNG framework. :
import java.awt.Toolkit;
import java.io.IOException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Reporter;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class MaximizeWindow {

WebDriver driver;

@BeforeTest
public void setUpDriver() {
driver = new FirefoxDriver();
      }
  

@Test
public void maximize() {
 //declare varibales for windows
org.openqa.selenium.Dimension defaultDim;
org.openqa.selenium.Dimension maximizeDim;
//Load google website on browser
driver.get("http://google.com");
//Display the current screen dimensions
defaultDim=driver.manage().window().getSize();
System.out.println("screenHeight before maximizing"+defaultDim.getHeight());
System.out.println("screenWidth before maximizing"+defaultDim.getWidth());
//maximize the window using webdriver method
driver.manage().window().maximize();
//Display the maximized window dimensions
maximizeDim=driver.manage().window().getSize();
System.out.println("screenHeight after maximizing:"+maximizeDim.getHeight());
System.out.println("screenWidth after maximizing:"+maximizeDim.getWidth());

      }


  }