Wednesday, January 4, 2012

ISuiteListener and ITestListener

Sample usage

public class TestReporter implements ITestListener {

    static int count;

    public void onFinish(ITestContext arg0) {

        System.out.println("Test Finished !!!!!!!!");
    }

    public void onStart(ITestContext arg0) {
        ISuite suite = arg0.getSuite();
        System.out.println("Driver is : ");
        ITestNGMethod[] value = arg0.getAllTestMethods();
        System.out.println("Method Number : "+value.length);
        count = value.length;

    }

    @Override
    public void onTestFailure(ITestResult arg0) {
//    System.out.println("Finished Executing Test: "+arg0.getName()+" Status: Failed"+"\n Reason:"+arg0.getThrowable());
    }

    @Override
    public void onTestSkipped(ITestResult arg0) {
//    System.out.println("Skipped test: "+arg0.getName()+".Reason"+arg0.getThrowable());
    }

    @Override
    public void onTestStart(ITestResult arg0) {
//    System.out.println("Starting Test: "+arg0.getName());
//    System.out.println("\n Starting Test: "+count--);

    }

    @Override
    public void onTestSuccess(ITestResult arg0) {
    System.out.println("Finished Executing Test: "+arg0.getName()+" Status: Success.");
    System.out.println("Class Name : "+arg0.getTestClass());

    Object[] ab = arg0.getParameters();
    System.out.println("Param Set : "+ab.length);
    for(int i = 0 ; i < ab.length ; i++)
        System.out.print(ab[i]+" ");

//    System.out.println("Method Name : "+arg0.getMethod().getMethodName());
    }

    public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {
//    System.out.println("Test failed but within success percentage");
    }
}


public class SuiteReporter implements ISuiteListener {

    @Override
    public void onFinish(ISuite arg0) {
    System.out.println("Finished executing the suite");
    System.out.println("********Results*******");

    }

    @Override
    public void onStart(ISuite arg0) {
    System.out.println("Starting Execution");
    //Print suiteName
    System.out.println("Suite Name:"+arg0.getName());
    //Print HostName
//    System.out.println("Host Name:"+arg0.getHost());
    //Returns null if it runs locally

    }
}





 <suite name="Sample Suite">
<!--
    <listeners>
    <listener class-name="com.clearspring.qa.tellurium.SuiteReporter" />
    <listener class-name="com.clearspring.qa.tellurium.TestReporter" />
   </listeners>
<test>
</test>
</suite>

Saturday, December 17, 2011

Clear Browser Cache

We can press Control + F5 using webdriver to clear the browser cache.

            Actions actionObject = new Actions(driver);
            actionObject.keyDown(Keys.CONTROL).sendKeys(Keys.F5).keyUp(Keys.CONTROL).perform();

Disabling caching in ChromeDriver

For disabling caching in ChromeDriver we can use the chrome switches with  DesiredCapabilities

DesiredCapabilities dc = DesiredCapabilities.chrome();
                ArrayList<String> switches = new ArrayList<String>();
                switches.add("--proxy-server="+InetAddress.getLocalHost().getHostAddress()+ ":" + Integer.parseInt(port));
                switches.add("--proxy-bypass-list=local.addthis.com");
                switches.add("--disable-application-cache");
                dc.setCapability("chrome.switches", switches);

More details about chrome switches

Maven ant run plugin

Simulate all the tasks of ant script and also used to call external ant targets from a maven pom.


<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <configuration>
      <tasks>
        <echo message="hello ant, from Maven!" />
        <echo>Maybe this will work?</echo>

        <ant antfile="${basedir}/build.xml">
          <target name="test" />
        </ant>

       <exec dir="${basedir}" executable="cmd"
         failonerror="true">
         <arg line="/K start" />
         <arg line="one.bat" />
       </exec>

      </tasks>
    </configuration>
   </plugin>
Sample Usage : mvn antrun:run

Tuesday, November 1, 2011

Disabling caching in FirefoxDriver

 Firefox profile with no caching enabled.

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.cache.disk.enable", false);
profile.setPreference("browser.cache.memory.enable", false);
profile.setPreference("browser.cache.offline.enable", false);
profile.setPreference("network.http.use-cache", false);
WebDriver driver = new FirefoxDriver(profile);

Similarly profile with alert, prompt etc disabled

  profile.setPreference("capability.policy.policynames", "strict") ;
  profile.setPreference("capability.policy.strict.Window.alert", "noAccess") ;
  profile.setPreference("capability.policy.strict.Window.confirm", "noAccess") ;
  profile.setPreference("capability.policy.strict.Window.prompt", "noAccess") ;

Saturday, October 29, 2011

CSS selectors

For selecting a particular column in a table.

XPATH : //table[@class='stb']//tr[2]/td[2]

CSS : css=table.stb tr:nth-child(2)>td:nth-child(1)

XPATH : //input[@name="myName"]

CSS : css=input[name=myName]

 XPATH : //a[@title="Sign In"]

CSS : css=a[title='Sign In']

css=a.addthis_counter>a:nth-child(2)

a class="addthis_counter addthis_bubble_style"  //With space btw css
driver.findElement(By.cssSelector("a[class~='addthis_bubble_style']"));

More information here

Using properties file

There are a number of ways to perform data driven testing. Here i will mention how to use a properties file to get data and use it for testing purpose.   


        InputStream is = this.getClass().getResourceAsStream("/conf/datasuite.properties"); 
        Properties prop = new Properties(); 
        prop.load(is);
        String directory = prop.getProperty("Directory"); 
        String numberOfFiles = prop.getProperty("NumberOfFiles"); 
        String  fileExtension = prop.getProperty("Extension"); 
        is.close();
       
        System.out.println(directory+" "+numberOfFiles+" "+fileExtension);

Contents of datasuite.properties file.

       Directory = C:/prodFiles/
       NumberOfFiles = 25
       Extension = javaworlddfg


One thing to note is that the 'conf' folder is referenced with respect to the class files created.