Monday, July 23, 2012

Generating selenium reports using TestNG-xslt through Ant

Generating selenium reports using TestNG-xslt through Ant


Generating selenium reports using TestNG-xslt through Ant

TestNG-xslt generates user friendly reports using the TestNG results output (testng-results.xml). Its uses the pure XSL for report generation and Saxon as an XSL2.0 implementation.

Most of the material is taken from the original site.
 http://code.google.com/p/testng-xslt/

I will tell in this blog how to implement this report for your project. This implementation will tell you how to generate the testng-xslt report using ant. If your current project does not use ant build then you can use ant only for the report generation purpose.

If you dont know ant please check the Apache ant website http://ant.apache.org/.

For generating testng-xslt report for your project do the following:
1. Download the testng-xslt
2. Unzip and copy the testng-results.xsl from the testng-xslt folder(testng-xslt-1.1\src\main\resources) to your own project folder.
3. Now copy the saxon library from (testng-xslt-1.1\lib\saxon-8.7.jar)to your project lib folder.
4. Modify your build.xml of ant and add the following target to it.


<project name="test" basedir=".">
    <property name="LIB" value="${basedir}/libs" />
    <property name="BIN" value="${basedir}/bin" />
    <path id="master-classpath">
        <pathelement location="${BIN}" />
        <fileset dir="${LIB}">
            <include name="**/*.jar" />
        </fileset>
    </path>
     
    <target name="testng-xslt-report">
        <delete dir="${basedir}/testng-xslt">
        </delete>
        <mkdir dir="${basedir}/testng-xslt">
        </mkdir>
        <xslt in="${basedir}/test-output/testng-results.xml" style="${basedir}/testng-results.xsl" out="${basedir}/testng-xslt/index.html">
            <param expression="${basedir}/testng-xslt/" name="testNgXslt.outputDir" />

            <param expression="true" name="testNgXslt.sortTestCaseLinks" />

            <param expression="FAIL,SKIP,PASS,CONF,BY_CLASS" name="testNgXslt.testDetailsFilter" />

            <param expression="true" name="testNgXslt.showRuntimeTotals" />

            <classpath refid="master-classpath">
            </classpath>
        </xslt>
    </target>
</project>


The XSL transformation can be configured using the parameters described below.
  • testNgXslt.outputDir - Sets the target output directory for the HTML content. This is mandatory and must be an absolute path. If you are using the Maven plugin this is set automatically so you don't have to provide it.
  • testNgXslt.cssFile - Specifies and alternative style sheet file overriding the default settings. This parameter is not required.
  • testNgXslt.showRuntimeTotals - Boolean flag indicating if the report should display the aggregated information about the methods durations. The information is displayed for each test case and aggregated for the whole suite. Non-mandatory parameter, defaults to false.
  • testNgXslt.reportTitle - Use this setting to specify a title for your HTML reports. This is not a mandatory parameter and defaults to "TestNG Results".
  • testNgXslt.sortTestCaseLinks - Indicates whether the test case links (buttons) in the left frame should be sorted alphabetically. By default they are rendered in the order they are generated by TestNG so you should set this to true to change this behavior.
  • testNgXslt.chartScaleFactor - A scale factor for the SVG pie chart in case you want it larger or smaller. Defaults to 1.
  • testNgXslt.testDetailsFilter - Specified the default settings for the checkbox filters at the top of the test details page. Can be any combination (comma-separated) of: FAIL,PASS,SKIP,CONF,BY_CLASS
You need to provide the testng-xslt stylesheet the TestNG results xml(testng-results.xml) , the path to the style sheet testng-results.xsl and the output index.html path.

Also dont forget to add the saxon library to your target classpath else you will get an error. In my case it is the master-classpath.

Noe run the ant target for report generation (in my case "testng-xslt-report") and check the ouput folder configured by you for testng-xslt report.

Saturday, November 26, 2011

Generating Test Result Report using Ant from Java eclipse

Generating Test Result Report using Ant from Java eclipse


Always Reporting is the most important thing in testing, here described is the steps to configure and generate the test result from java eclipse using Ant.
this post is for users who have already familiar with java and eclipse. There is another post you can find in the name of "Selenium RC using Java with eclipse" for the beginners.
Generating the ANT build:
Right click on the project and select Export --> Ant Buildfiles.-->Next-->Select the project-->Finish.
Configuring jar:
Select Windows menu-->Preference -->Global Entries -->Add External JARs-->Select the folder where the eclipse is installed. eclipse -->Plugin -->Currently its located in "org.junit_4.8.1.v4_8_1_v20100427-1100"-->"junit.jar"-->OK.
Run the Ant Build:
Create a folder "junit" in side the project folder. Right click on the AntBuildfile-->RunAs -->AntBuild
Return to java project and run as junit test. End of test run you will find the test result in a html file named as index.html it will be stored inside the junit folder.


Adding Selenium Flex API in Selenium IDE

Adding Selenium Flex API in Selenium IDE


FlexUISelenium is an extension to the Selenium RC client driver, It enables the Selenium RC client drivers to interact the Flex UI components and methods of the Flex application.
Steps:
1. Download SeleniumFlex-API from http://sourceforge.net/projects/seleniumflexapi/files/.
2. Open Selenium IDE  Select Options --> Options.
3. Extract the zip file and add user-extensions.js as selenium Core extension in Selenium IDE.
4. Restart Selenium IDE, We can find the flex related commands in drop down.

Thursday, November 17, 2011

How to select value in drop down using Webdriver

How to select value in drop down using Webdriver, By.www.laxmiroy.blogspot.com/


This post will take you through the way you can select the value in a drop down. Webdriver does not have straight forward command "SELECT" which Selenium does.
In below example i will open home page of eBay India and search ipod in Consumer Electronic category. This page has a category drop down in which i will select
Consumer Electronics.
package com.web;
import java.io.File;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class DropDownSelection {
 private static WebDriver driver=null;
 @BeforeTest
 @org.testng.annotations.Parameters({"BROWSER"})
 public void setup(String BROWSER){
  if(BROWSER.equals("FF")){
   File profileDir = new File("C:\\nir");
     FirefoxProfile profile = new FirefoxProfile(profileDir);
     profile.setPreference("general.useragent.override", "same user agent string as above");
     driver= new FirefoxDriver(profile);
   System.out.println("Broser Selected " + BROWSER); 
  }else if(BROWSER.equals("IE")){
   System.out.println("Broser Selected " + BROWSER);
   driver = new InternetExplorerDriver();
  }else if(BROWSER.equals("HU")){
   System.out.println("Broser Selected " + BROWSER);
   driver =new HtmlUnitDriver();
  } else
  {
   System.out.println("Broser Selected " + BROWSER);
   driver = new ChromeDriver();
  }
 }
 @Test
 public void testDropDownSelection() throws InterruptedException{
 
  driver.get("http://www.ebay.in");
  WebElement search = driver.findElement(By.name("_nkw"));
  search.sendKeys("ipod");

   List dd = driver.findElement(By.name("_sacat")).findElements(By.tagName("option"));
   for (WebElement option : dd) {
    System.out.println(option.getText());
    if ("Consumer Electronics".equalsIgnoreCase(option.getText())){
     option.click();
     break;
    }
   }
   driver.findElement(By.xpath("//input[@value='Search']")).submit();
   Thread.sleep(5000);
   driver.getPageSource().contains("results found");
  driver.quit();
 }
}

TestNG.xml
Using TestNG suite we will run the test case.
<?xml version="1.0" encoding="UTF-8"?>
<suite name="webDriver" parallel="tests">
 <listeners>
  <listener class-name="org.uncommons.reportng.HTMLReporter" />
  <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
 </listeners>
 <test name="WebDriverDemo Witn FF" preserve-order="true">
  <parameter name="BROWSER" value="FF" />
  <classes>
   <class name="com.web.DropDownSelection" />
  </classes>
  </test>
  </b>
</suite>
If above code does not work with you configuration just try another way given below.
 List  options = driver.findElements(By.tagName("option"));
  for (WebElement option : options) {
   if ("Consumer Electronics".equalsIgnoreCase(option.getText())){
    option.click();
   }
      }

Running test case in multiple browsers parallely in WebDriver

Running test case in multiple browsers parallely in WebDriver, By www.laxmiroy.blogspot.com/



we can run test script in different browsers parallely using web driver. Write one test script and configure in testng xml to run that test case in IE, firefox and chrome parallely.
package com.web;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParallelRunning {

 private  WebDriver driver=null;
 @BeforeTest
 @Parameters ({"BROWSER"})
 public void setup(String BROWSER){
  System.out.println("Browser: " + BROWSER);

  if (BROWSER.equals("FF")) {
   System.out.println("FF is selected");
   driver = new FirefoxDriver();
  } else if (BROWSER.equals("IE")) {
   System.out.println("IE is selected");
   driver = new InternetExplorerDriver();
  } else if (BROWSER.equals("HU")) {
   System.out.println("HU is selected");
   driver = new HtmlUnitDriver();
  } else if (BROWSER.equals("CH")){
   System.out.println("Google chrome is selected");
   driver = new ChromeDriver();
  }
 }

 @Test
 public  void testParallel()throws Exception{
  driver.get("http://www.google.com");
  Thread.sleep(5000);
  WebElement search = driver.findElement(By.name("q"));
  search.sendKeys("automation blog by niraj");
  search.submit();
  Thread.sleep(5000);
  Assert.assertTrue(driver.getPageSource().contains("automationtricks.blogspot.com"));
  driver.findElement(By.xpath("//a[contains(@href,'automationtricks.blogspot.com')]")).click();
  Thread.sleep(15000);
  Assert.assertTrue(driver.getPageSource().contains("working as Associate Manager @CSC"));
  driver.quit();
 }
}
In the above sample program BROWSER is a variable which value would be passed from TestNG.xml and TestNG.xml will run the test multiple time each time BROWSER value would be set with different browser name and test will check the BROWSER value and decide which browser test will run.

TestNG.xml
<?xml version="1.0" encoding="UTF-8"?>
<suite name="webDriver" parallel="tests">
  <test name="WebDriverDemo Witn FF" preserve-order="true">
  <parameter name="BROWSER" value="FF" />
  <classes>
   <class name="com.web.ParallelRunning" />
  </classes>
 </test>
  <test name="WebDriverDemo with IE" preserve-order="ture">
  <parameter name="BROWSER" value="IE"></parameter>
  <classes>
   <class name="com.web.ParallelRunning"></class>
  </classes>
 </test>

 <test name="WebDriverDemo with HTML unit" preserve-order="true">
  <parameter name="BROWSER" value="HU"></parameter>
  <classes>
   <class name="com.web.ParallelRunning"></class>
  </classes>
 </test>
   <test name="WebDriverDemo with HTML unit" preserve-order="true">
  <parameter name="BROWSER" value="CH"></parameter>
  <classes>
   <class name="com.web.ParallelRunning"></class>
  </classes>
 </test>
</suite>

Monday, November 14, 2011

Runing test script in multiple browsers using WebDriver

Runing test script in multiple browsers using WebDriver, Selenium Notes, Examples, videos, by.www.laxmiroy.blogspot.com/


we can run test script in different browsers using web driver. Write one test script and configure in testng xml to run that test case in IE, firefox chrome.
package com.web;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.Assert;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class WebDriverDemo {
  private static WebDriver driver = null;
  @Test
 @Parameters( {"BROWSER"})
 public  void testread(String BROWSER)throws Exception{
  System.out.println("Browser: " + BROWSER);
  if (BROWSER.equals("FF")) {
   System.out.println("FF is selected");
   driver = new FirefoxDriver();
  } else if (BROWSER.equals("IE")) {
   System.out.println("IE is selected");
   driver = new InternetExplorerDriver();
  } else if (BROWSER.equals("HU")) {
   System.out.println("HU is selected");
   driver = new HtmlUnitDriver();
  } else if (BROWSER.equals("CH")){
   System.out.println("Google chrome is selected");
   driver = new ChromeDriver();
  }
  driver.navigate().to("http://www.yahoo.com");
  Thread.sleep(10000);
 
  WebElement search= driver.findElement(By.name("p"));
  search.sendKeys("automation blog by niraj");
  search.submit();
  Thread.sleep(5000);
  Assert.assertTrue(driver.getPageSource().contains("automationtricks.blogspot.com"),"Failed in "+ BROWSER);
  driver.close();
 }
}
In the above sample program BROWSER is a variable which value would be passed from TestNG.xml and TestNG.xml will run the test multiple time each time BROWSER value would be set with different browser name and test will check the BROWSER value and decide which browser test will run.
TestNG.xml
<?xml version="1.0" encoding="UTF-8"?>
<suite name="webDriver">
 <test name="WebDriverDemo Witn FF" preserve-order="true">
  <parameter name="BROWSER" value="FF" />
  <classes>
   <class name="com.web.WebDriverDemo" />
  </classes>
 </test>
  <test name="WebDriverDemo with IE" preserve-order="ture">
  <parameter name="BROWSER" value="IE"></parameter>
  <classes>
   <class name="com.web.WebDriverDemo"></class>
  </classes>
 </test>
 <test name="WebDriverDemo with HTML unit" preserve-order="true">
  <parameter name="BROWSER" value="HU"></parameter>
  <classes>
   <class name="com.web.WebDriverDemo"></class>
  </classes>
 </test>
 <test name="WebDriverDemo with chrome" preserve-order="true">
  <parameter name="BROWSER" value="CH"></parameter>
  <classes>
   <class name="com.web.WebDriverDemo"></class>
  </classes>
 </test>
</suite>

Easy Way To Automate Using WebDriver

Easy Way To Automate Using WebDriver, Selenium Notes, Examples, videos, by.www.laxmiroy.blogspot.com/


WebDriver is a clean, fast framework for Automation development of web-apps. WebDriver takes many advantages over selenium because selenium is written in java-script which causes a significant weakness: browsers impose a pretty strictly model , try to upload a file ,form control etc.
webDriver takes a different approach to solve the same problem as selenium. Rather than being running a java-script application within a browser, it uses whichever the mechanism is most appropriate to control the browser. Like for Firefox ,this means that webDriver is implemented as an extension.
The real beauty which I like most is real time environment, which means we are more closely modeling how the user interacts with the browser, and that we can type into "file" input elements. WebDriver can make use of facilities offered by the Operating System.
With the benefit of hindsight, we have developed a cleaner, Object-based API for WebDriver, rather than follow Selenium's dictionary-based approach.

Please download the respective jar related to your language from google code selenium project Download

Now follow below steps:-
1:- Extract the download file into a folder name and include the jars file ion your ClassPath
2:- Sample coding in java
import junit.framework.TestCase;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class WebDriverTest extends TestCase{
@Test
public void test_hellotest()throws Exception{
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
driver.get(http://www.google.com/webhp?complete=1&hl=en);
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Niraj Kumar");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
driver.close();
}
}