Integration of Webdriver ruby RSpec test suite with CircleCi

CircleCI has a continuous integration tool which builds and run your application in cloud environment. You can integrate and build your automation test scripts. CircleCI support following language:
Language:
1. Ruby.
2. PHP.
3. Java.
4. Python

Mobile Platform:
1. Android
2. iOS

How to setup:
1. You must have a git account.
2. Click on login circleci it will redirect git account login page.
3. Login in to git with your credential.
4. Click on Add Projects menu.
5. Choose a repository, of GitHub such as pushes and pull requests. It will kick off the first build immediately, and a new build will be initiated each time someone pushes commits.

Working in Git branches

In this post you will learn how to work in Git branches like: create, delete, merge branch data.
1. List all branches of your repository.
$ git branch

2. Create new branch.
$ git branch {branchName}

Example:
$git branch qa

3. Delete the specified branch. This is a “safe” operation in that Git prevents you from deleting the branch if it has unmerged changes.
$ git branch -d {branchName}

Example:
$git branch -d qa

How to read XML file data in Java || How to create object repository in selenium

As most of the commercial automation tools has feature of object repository concept, which separate application objects from automation scripts, it help us to modify object when AUT object change without going into code.  Also if we create object repository then it reuse throughout scripts from one place.

In Webdriver we can put locator (object) of web elements in to xml, properties, excel file etc at one place, and can separate from test scripts with logically divided into files.

In this post I am going to show you how to read data and put locators into xml files.

We create xml files for object locator like “Header.xml” where put all locators related to header menus, “Login.xml” for locators of login page, “Dashborad.xml” for locator of dashboard page.

Codeception webdriver integration

In my previous post of codeception, I posted that how to setup and create codeception acceptance test using phpbrowser. As phpbrowser has following limitation:

  • Can click only on links with valid urls or form submit buttons
  • Not support input fields that are not inside a form
  • Not support JavaScript interactions, like modal windows, datepickers, etc.

So we can integrate codeception with selenium webdriver and can easily handle phpbrowser drawbacks

Road to Codeception setup and first test script for beginner

Codeception:  Codeception is PHP testing framework in BDD stype,It is easy to setup and use, not required any dependency except php. It has three sections for testing
  1. Acceptance Testing
  2. Functional Testing
  3. API testing 
Features:
  1. Can be integrated with selenium Webdriver
  2. Supported Symphony2, Laravel4, YII, Phalcon, Zend framework integration.
  3. BDD style data set.
  4. API testing Rest, Soap, XML-RPC
  5. Report in HTML, XML, JSON.
  6. Parallel execution

Road to generate html report for Python Webdriver test suite using HTMLTestRunner

In my previous post ""Road to create test suite for python Webdriver scripts, I posted that how to create Suite file for webdriver python test script, but In this post I will show you how to integrate test suite with HTMLTestRunner to generate report in html format.

Before going through this post click here ( “Road to create test suite for python Webdriver scripts” ) to see both webdrive python unit test scripts.  I am taking these as example.

Follow below steps to setup:
1. Click on link "HTMLTestRunner" and download “HTMLTestRunner.py”, and “test_HTMLTestRunner.py” file put in your webdriver python project root folder.
2. Import all your test script in “test_HTMLTestRunner.py” as below:
import WebdriverTest2
import WebdriverTest1

Road to create test suite for python Webdriver scripts

In this post I will show you how to create suite file for Webdriver python UnitTest.
Following are two webdriver python unit test script.
1. WebdriverTest1.py

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import unittest, time, re

class WebdriverTest1(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://en.wikipedia.org"
       
    def test_Wikipedia(self):
        driver = self.driver
        driver.get(self.base_url + "/wiki/Main_Page")
        driver.find_element_by_id("searchInput").clear()
        driver.find_element_by_id("searchInput").send_keys("India")
        driver.find_element_by_id("searchButton").click()    
   
    def tearDown(self):
        self.driver.quit()       

if __name__ == "__main__":
    unittest.main()

TestNG factory class with example

TestNG factory class is used to create instance of testNg class at runtime (dynamically). When we apply Factory annotation on method, it always return object array of Object class ( “Object[]”). This is useful annotation when you run test multiple time.

TestNG pick @Factory method from class and consider each object mentioned in factory test as a TestNg class and invoke in separate.

Example:  FactoryClassImp.java
package com.tests;

import org.testng.annotations.Factory;

public class FactoryClassImp {

 @Factory
 public Object[] createTest() {
  Object[] res = new Object[3];
  res[0] = new FactoryTestClass(2, 2);
  res[1] = new FactoryTestClass(2, 3);
  res[2] = new FactoryTestClass(2, 4);

  return res;
 }
}


TestNG - Exception Test

In this post I will show you how to handle exception in Testng. TestNg provides expectedExceptions parameter  which is used along with @Test annotation, exp @Test(expectedExceptions)

package com.test;

import org.testng.annotations.Test;

public class TestNgException {

        @Test(expectedExceptions = ArithmeticException.class)
        public void testException() {
               int a = 10;
               int b = 0;
               a = a / b;
        }

        @Test
        public void testException1() {
               int a = 10;
               int b = 0;
               a = a / b;
        }
}

In test method testException I used “@Test(expectedExceptions = ArithmeticException.class)” so airthmetic exception handle but in  test testException1 exception generated.

TestNG - Ignore Test

In this post I will show you how to ignore testng test case to execute,  TestNg provide attribute enabled which make the test to be execute or not, if test mark @Test(enabled = false) then test will not execute. By default enabled value is true.

Here is example for ignore test case:

package com.test;

import org.testng.Assert;
import org.testng.annotations.Test;

public class IgnoreTestClass {

        @Test
        public void testMethod1() {
               Assert.assertTrue(true);
        }

        @Test(enabled = false)
        public void testMethod2() {
               Assert.assertTrue(true);
        }

        @Test(enabled = true)
        public void testMethod3() {
               Assert.assertTrue(true);
        }
}

Run above test you will see that testMethod2 will ignored and not executed:

PASSED: testMethod1
PASSED: testMethod3

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
====================================   

How to read write data in properties file using Java

For reading and writing data into properties file I am using Properties class in this post.
Create a file name with extension .properties like I have created “File.properties” below file:

Reading Data: Below code read data from above file using key and file name as an arguments.
package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class FileReader {
   
    public String readData(String key, String fileName) {
           String value = "";
           try {

                         Properties properties = new Properties();
                         File file  = new File("File.properties");
                         if (file.exists()) {
                                             properties.load(new FileInputStream(file));
                                             value = properties.getProperty(key);
                        }
            } catch (Exception e) {
                        System.out.println(e);
            }
           return value;
    }
   
    public static void main(String []str){
                        
             FileReader fileReader = new FileReader();                           
                        
                         String name = fileReader.readData("Name", "fileName");
                         System.out.println("Name :"+name);
                         String url = fileReader.readData("URL", "fileName");
                         System.out.println("URL :"+url);
        }
}
If you run above file you will get Name and Url values and print on console

Road to publish Webdriver TestNg report in Jenkins

In this post I will show you how to publish TestNg report on Jenkins server.

Installation TestNG plug-in.
1. After launching Jenkins server go to "Manage Jenkins>>Manage Plugins"
2. Enter TestNg in filter field, you will see “TestNg Results Plugin” like below screen.


3. Click on check box and then click on installation button.

How to read write data in properties file using php

For reading and writing data into properties file I am using parse_ini_file() function in this post.
Create a file name with extension .properties like I have created below:


Reading Data: below code read data from above file using key:
function getValue($key)
{
    $ini_array = parse_ini_file("File.properties");
    $value =  $ini_array[$key];
    return $value;
}
getValue(“Name”);
getValue(“URL”);

Road to capture screen shot of failed Webdriver test script part2

In my previous post ( "Road to capture screen shot of failed webdriver test script part1") I have posted how to capture screen shot using exception handling, but in this post I will show you how to capture screen shot by overriding testng listeners.

Here is code (MyListner.java) where I override onTestFailure,  onTestSuccess and onTestSkipped methods of class TestListenerAdapter.  Created function CaptureScreenShot and called it into onTestFailure function.

package com.webdriver.test;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;

public class MyListner extends TestListenerAdapter{   
           
     @Override
     public void onTestFailure(ITestResult result){ 
            CaptureScreenShot(result);
            System.out.println(result.getName()+" Test Failed \n");
     }
           
     @Override
     public void onTestSuccess(ITestResult result){
           System.out.println(result.getName()+" Test Passed \n");
     }
           
     @Override
     public void onTestSkipped(ITestResult result){
           System.out.println(result.getName()+" Test Skipped \n");
     }
            
     public void CaptureScreenShot(ITestResult result){
           Object obj  = result.getInstance();
           WebDriver driver = ((FailedTestScreenCapture) obj).getDriver();
                        
           File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
                                         
           try {
                  FileUtils.copyFile(scrFile, new File(“screenshot/” result.getName()+".png"));
           }
           catch (IOException e) {
                e.printStackTrace();
           }
      } 
}

I called above created listeners java file in below “FailedTestScreenCapture.java” TestNg file.

Road to create Virtual device (Emulator ) for beginner

In this post I will show you how to install android SDK , setup Android SDK path in system environments variable, How to update android API and how to create Virtual Devices.

Installation:
  1. Download Androd sdk exe or Zip file from link: download
  2. Install exe file in your machine or extract the zip file.
Setup Path:
1. Right click on the "My Computer" icon.
2. Click Properties
3. Click Advanced tab
4. Click Environment Variables button, You should see below screen:

Road to setup Selendroid and create first test script of android application

About Selendroid:  Selendroid is an open source automation framework which drives of UI of android native, hybrid and mobile web application. It supports both emulator and real device. It uses Json Wire Protocol to run webdriver test scripts on device. It can be integrated with selenium grid for parallel execution on multiple nodes. No need any modification in application and not need source code to automate application.

Prerequisites:
  • JDK should be installed and java home path setup in your machine.
  • Android SDK should be installed on your machine and android path should be setup in your machine
  • Download Selendroid from link: Download
  • Selenium jar file from: Download
  • Eclipse.
  • Create new Emulator or attached real devices with you machine.

Difference between Selenium RC and Webdriver

S.N. Selenium RC Webdriver
1 It doesn’t supports Record and playback It doesn’t supports Record and playback
2 Core engine is Javascript based and interacts browser with remotely. Interacts natively with browser application
3 It is easy and small API As compared to RC, it is bit complex and large API.
4 Its API’s are less Object oriented Its API’s are entirely Object oriented
5 Need to start server before executing the test script No need to start server.
6 It does not support headless htmlunit browser. It  support headless htmlunit browser. Which is fater in execution
7 It doesn’t supports of moving mouse cursors. It supports of moving mouse cursors.
8 It does not supports listeners It supports the implementation of listeners
9 It does not support to test iphone/Android applications It support to test iphone/Android applications
10 Selenium RC is slower than Webdriver It is faster than selenium RC
11 Selenium RC has automatically generate Report in Html build report Webdriver has no command which automatically generate report