Selenium

How to Configure Selenium WebDriver

Hola Testers,

Today I’m going to to tell how to configure Selenium WebDriver. Yes, this is the first lesson for Selenium WebDriver. I hope this will be useful for new users. In here, I’m going to use Java as my programming language. I’m going to divide this tutorial for below partitions.

  • Create a project and configure .jar files
  • Configure TestNG
  • Configure Firefox browser
  • Configure Chrome browser
  • Configure Internet Explore browser

Create a project and configure .jar files

To create a project we need programming IDE. Here I’m using eclipse.

  • Open Eclipse
  • Create a new Java Project

Screen Shot 2017-04-11 at 5.25.04 PM

After create a java project we need to download selenium webdriver jars.

  • Go to seleniumhq download page
  • Download and unzip the WebDriver bindings

Screen Shot 2017-04-11 at 4.19.34 PM.png

  • Create a folder called “libs” in java project (right click on the project > New > Folder)

Screen Shot 2017-04-11 at 5.37.45 PM

  • Paste all the .jar files from extracted folder of the downloaded zip file

Screen Shot 2017-04-11 at 5.45.01 PMScreen Shot 2017-04-11 at 5.46.12 PM

Now we have to add those .jar files to build path.

Select all .jar files in “libs” folder > right click > Build Path > Add to Build Path

Screen Shot 2017-04-11 at 5.49.22 PM

  • After that you can see all the .jar files in newly created “Referenced Libraries” library folder

Screen Shot 2017-04-11 at 5.49.37 PM

Configure TestNG

Click on Help menu > Install New Software..

Screen Shot 2017-04-11 at 6.00.43 PM.png

  • Click on Add button, “Add Repository” box will appear.
  • Enter below values as inputs and click “OK”
    • Name: TestNG
    • Location: http://beust.com/eclipse

Screen Shot 2017-04-11 at 6.02.59 PM

  • Accept agreement details and install TestNG. (If it gives warning, click OK)
  • After successful installation system ask to restart eclipse, allow it.

Screen Shot 2017-04-11 at 6.15.04 PM.png

 

Configure Firebox browser

  • Download geckoDriver from seleniumhq download page Third Party Drivers, Bindings and Plugins section and unzip it

Screen Shot 2017-04-11 at 9.19.58 PM

  • Create a folder called “driver” in project and add unzipped file. Don’t copy through eclipse.

Screen Shot 2017-04-11 at 9.40.04 PM.png

  • Create a class
  • Import Firefox browser driver
import org.openqa.selenium.firefox.FirefoxDriver
  • Initialize FirefoxDriver object
System.setProperty("webdriver.gecko.driver", "path of geckodrivergeckodriver"); 
FirefoxDriver fd=new FirefoxDriver();

Sample code

@Test

  public void firefoxTest() {

 System.setProperty("webdriver.gecko.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/geckodriver");

FirefoxDriver fd=new FirefoxDriver();

fd.get("http://google.lk");

  }

If you are using windows OS, you need to put location as below

System.setProperty("webdriver.gecko.driver","path of geckodriver.exe");

Screen Shot 2017-04-11 at 8.22.38 PM.png

Screen Shot 2017-04-11 at 9.42.55 PM.png

 

Configure Chrome browser

  • Instead of gecko, you need to download chromeDriver from seleniumhq download page
  • Download the latest stable version for your OS and copy it to drivers folder
  • Import chromeDriver
import org.openqa.selenium.chrome.ChromeDriver;
  • Create new test method
  • Initailize chromeDriver object
System.setProperty("webdriver.chrome.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/chromedriver");

ChromeDriver cd=new ChromeDriver();

sample code

@Test

  public void chromeTest() {

 System.setProperty("webdriver.chrome.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/chromedriver");

ChromeDriver cd=new ChromeDriver();

cd.get("http://google.lk");

  }

Screen Shot 2017-04-11 at 9.58.12 PMScreen Shot 2017-04-11 at 9.58.25 PM

Configure Internet Explorer browser

  • you need to download InternetExplorerDriver from seleniumhq download page
  • Download the latest stable version and copy it to drivers folder
  • Import InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerDriver;
  • Create new test method
  • Initailize InternetExplorerDriver object
System.setProperty("webdriver.ie.driver", "C:\\Selenium\\IEDriverServer.exe");

InternetExplorerDriver id= new InternetExplorerDriver();

sample code

@Test

  public void chromeTest() {

System.setProperty("webdriver.ie.driver", "C:\\Selenium\\IEDriverServer.exe");

InternetExplorerDriver id= new InternetExplorerDriver();

id.get("http://google.lk");

  }

Untitled.png

I’ll add more browsers later 😉

Selenium Grid: An Introduction

Hola Testers!

Today we are going to talk about Selenium Grid!

What is Selenium Grid

Selenium Grid is a part of Selenium Suite which used to running multiple browsers on multiple environment at same time. There are two types of grid Grid 1 and Grid 2. Grid 1 is now deprecating by selenium team. So it is better to learn Grid 2.

Difference Between Grid 1 and Grid 2

Selenium Grid 1 Selenium Grid 2
Has own remote control Bundled with Selenium Server jar files
Need to install and configure Apache Ant before use Grid 1 No need to install Apache Ant
Only support Selenium RC Commands/scripts Support both Selenium RC and WebDriver scripts
Can only automate one browser per RC One RC can automate upto 5 browsers

Selenium Grid using hub-node concept to run.

What is Hub?

  • Is the central point where you need to keep your test scripts
  • There should be one hub for grid
  • All the nodes connect to the hub
  • Hub is running test, but browsers being automated in node

What is Node?

  • Selenium instances that executes tests which stores in hub
  • There can be one or more nodes per grid
  • Nodes can be launches in different platforms and different browsers

We’ll run a sample Selenium Grid test soon!

Run a TestNG project with Maven

Hola Testors!

Today I’m gonna show you how to run TestNG project with Maven. I’m taking my previous TestNG project for this one. You can download it from here.

I tried to run it in maven. Build got success. But you won’t see run anything.

Screen Shot 2015-09-20 at 2.54.58 PM

There is a solution for this: surefire plugin 😀

You need to add testng dependency to pom.xml and add below plugin too.


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>crossbrowsing.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>

Here suiteXmlFile is out testng xml. You can pass many parameters with this plugin according to your scenarios. For more info about maven testng surefire plugin visit maven page.

See you soon!

Cross Browser Testing with TestNG

Hola Testors!

Cross browser testing become important when you are executing automation script on regression. Because your customer may request to work the particular web application on different browsers. So you need to automate the application to run in different browsers. As with our current script it will support only one browser at a time. So you have to change your browser parameter and have to run it again and again. That is why cross browser concept came to picture. By using TestNG we can easily do cross browser testing. Let’s do it!

There are two ways to do cross browser testing;

  1. Sequential order
  2. Parallel order

Sequential

First we look at how to do it on sequentially.

First Create a sample project (I’m creating sample maven project called crossbrowserTest )and apply all the dependancies.

Since this is TestNG, we have to include TestNG dependancy to our pom.xml.

<dependency>
     <groupId>org.testng</groupId>
     <artifactId>testng</artifactId>
     <version>6.9.6</version>
</dependency>

You can download TestNG repositories or JAR from maven repository by clicking here.

Then I’m creating a class to test google home page in different browsers. So, I’m creating a java class called VerifyTitle under src/test/java

package com.daz.crossbrowserTest.crossbrowserTest;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class VerifyTitle {
    WebDriver driver;
    static String CHROME_PATH="drivers/chromedriver";
    static String URL="http://www.google.lk";
    
    @Test
    @Parameters("browser")
    public void VerifyPageTitle(String BrowserName)
	{
		if(BrowserName.equalsIgnoreCase("Firefox"))
		{
			driver=new FirefoxDriver();
		}
		else if(BrowserName.equalsIgnoreCase("Safari"))
		{
			driver=new SafariDriver();
		}
		else if(BrowserName.equalsIgnoreCase("Chrome"))
		{
			System.setProperty("webdriver.chrome.driver", CHROME_PATH);
			driver=new ChromeDriver();
		}
		driver.manage().window().maximize();
		driver.get(URL);
		System.out.println(BrowserName+" : "+driver.getTitle());
		driver.quit();
	}

}

Make sure to create @Test and @Parameter annotations with TestNG

Screen Shot 2015-09-16 at 10.13.58 PM Screen Shot 2015-09-16 at 10.17.54 PM

Our class is ready now. What Next?

We have to pass the browser to our test class. That is the place we do cross browsing.

Right Click on Class > TestNG > Convert to TestNG.

It will display “Refactoring” dialog box. There you can give a any name for the xml (I’m giving crossbrowsing.xml) and click Finish

Screen Shot 2015-09-16 at 10.50.14 PM    Screen Shot 2015-09-16 at 10.50.39 PM

Open the crossbrowsing.xml and add tests to the suite as below

<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="FirefoxTest">
  	<parameter name="browser" value="Firefox"/>
  	<classes>
  		<class name="com.daz.crossbrowserTest.crossbrowserTest.VerifyTitle">
  	</classes>
  </test>
  <test name="SafariTest">
  <parameter name="browser" value="Safari"/>
  <classes>
  	<class name="com.daz.crossbrowserTest.crossbrowserTest.VerifyTitle"/>
  </classes>
  </test>
  <test name="ChromeTest">
  	<parameter name="browser" value="Chrome"/>
  	<classes>
  		<class name="com.daz.crossbrowserTest.crossbrowserTest.VerifyTitle"/>
  	</classes>
  </test>
</suite>

Here I explain what the <class name> in above xml. That is your test class name. You can give it as <package_name>.<class_name>.

Now you can run the test by right click on crossbrowsing.xml > Run As > TestNG Suite

Screen Shot 2015-09-16 at 11.09.44 PM

Since this is sequential, it will run according to the order of browsers giving on crossbrowsing.xml.

In our example it will Firefox, Opera and Chrome. Here I add console output and TestNG output

Screen Shot 2015-09-16 at 11.12.59 PM  Screen Shot 2015-09-16 at 11.13.09 PM

Parallel

Now we can look how to do parallel test. Now it is easy 😉

Open crossbrowsing.xml file and do below change

<suite name="Suite" parallel="tests">

Save the xml

Right click on crossbrowsing.xml > Run As > TestNG Suite.

In this scenario all the browsers will open parallel. But you can see test results will differ from sequential order. Because fastest browser will finish the test first.  Here I attach my parallel test results as well.

Screen Shot 2015-09-16 at 11.18.29 PM    Screen Shot 2015-09-16 at 11.18.42 PM

You can find sample code for this project from my GitHub by clicking here

See you soon!

Pass Parameters from Command Line to a Selenium Project using Maven Command

Hola Testors,

Today we will look at a little cool trick we can use for selenium automation “How to pass values from command line to a selenium project through maven commands”. This trick is very important if you have to test your project on different parameters to your projects. Suppose you have to test your project on different URLs/ environments (Dev/CI/QA/Production) or you have to test on different browsers on different time etc. You can use this trick for that kind of scenarios.

First, you need to create a selenium project from maven.

Then include all the needed dependancies to pom.xml

After that you can create a test file. Here, I’m creating a sample java class to test different URLs with different browsers.


package com.daz.passparameters.passparameters;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.safari.SafariDriver;
import junit.framework.TestCase;
class AppTest extends TestCase
{
private String URL=System.getProperty("url");
private String BROWSER=System.getProperty("browser");
static WebDriver driver;
static String CHROME_PATH="drivers/chromedriver";
    @org.junit.Test
    public void testparam()
    {
    if(BROWSER.equalsIgnoreCase("Firefox"))
    {
    driver=new FirefoxDriver();
    }
    else if(BROWSER.equalsIgnoreCase("Safari"))
    {
    driver=new SafariDriver();
    }
    else if(BROWSER.equalsIgnoreCase("Chrome"))
    {
    System.setProperty("webdriver.chrome.driver", CHROME_PATH);
    driver=new ChromeDriver();
    }
    driver.get(URL);
    driver.quit();
    }

}

Here I included two lines to capture values from command line

private String URL=System.getProperty("url");
private String BROWSER=System.getProperty("browser");

We can use System.getProperty() to capture values from command line.

Then save to program.

When you are running your application with maven you have to give all the mentioned parameters with command.

For above example you can give parameters like

mvn clean install -Durl="http://www.google.lk" -Dbrowser="Chrome"

Hope you enjoyed this cool trick.

PS: You can download the sample code from my GitHub repo by clicking here