Wednesday, 7 May 2014

Selenium Data-driven Text file | @DataProvider


Note|  Text in Blue [#PYTHON] and Orange [#JAVA] can be edited or mentioned important for the entire blog. All the posts are practically done by me.


This is the continuation of one my previous topics, #link.  In this method, we are using @dataProvider annotation on TestNG to fetch keywords from a Text file and passing the arguments to Test class. This is our (Prashanth Sams + Karthikeyan) implementation to work with Text file via dataprovider.


Text File | @DataProvider

The below example illustrates on how to work with @dataprovider in-order to fetch values from a text file.

1| Create a Test class file similar to the one given below:


package packagename;

import java.util.HashMap;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class Google {
    private WebDriver driver;

    @DataProvider(name="keywords")
    public Object[][] data() throws Exception {
        HashMap<String,String[]> dataSet= new Text2TestData(System.getProperty("user.dir")+"\\config.txt").getData();
        
        String search1Strings[]=dataSet.get("search1");
        String search2Strings[]=dataSet.get("search2");
        int size =search1Strings.length;
   
        // modify 2 upon the no. of rows; Here, I used two rows, 'search1' & 'search2'
        Object[][] creds = new Object[size][2];  
        for(int i=0;i<size;i++)
        {
            creds[i][0]=search1Strings[i];
            creds[i][1]=search2Strings[i];
        }
        return creds;
    }


    @BeforeTest
    public void setUp() throws Exception {
        driver = new ChromeDriver();

    }

    @Test(dataProvider = "keywords", description = "Google_Test")
    public void search(String search1, String search2) throws Exception {
   
        driver.get("http://www.google.co.in");

        // search google via keyword 1
        driver.findElement(By.name("q")).clear();
        driver.findElement(By.name("q")).sendKeys("" + search1);
        driver.findElement(By.name("q")).submit();
        Thread.sleep(4000);

        // search google via keyword 1
        driver.findElement(By.name("q")).clear();
        driver.findElement(By.name("q")).sendKeys("" + search2);
        driver.findElement(By.name("q")).submit();
        Thread.sleep(4000);

    }
    
    @AfterTest
    public void tearDown() throws Exception {
        driver.quit();
    }

}



Text2TestData

2| Create another java class file, 'Text2TestData' under the same package.


package packagename;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

public class Text2TestData {

    private String fileLocation;

    public Text2TestData(String fileLocation) {
        this.fileLocation = fileLocation;
    }

    public HashMap<String,String[]> getData(){
        FileInputStream fs;
        HashMap<String,String[]> keyValuePair=new HashMap<String,String[]>();
        try (BufferedReader br = new BufferedReader(new FileReader(fileLocation))){
            String stringLine;
            //Read File Line By Line
            while ((stringLine = br.readLine()) != null)   {
                // Print the content on the console
                String[] keyValue=stringLine.split("=");
                keyValuePair.put(keyValue[0],keyValue[1].split(","));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return keyValuePair;
    }


}



3| Create a text data-source file similar to the contents given below separated with comma (,)

search1=Prashanth Sams,bypasshacker
search2=seleniumworks.com,bypasshacker.blogspot.com

4| Now, place the config.txt file inside your project
5| Save the file and run test :)

21 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. It was very nice article and it is very useful to Selenium learners.We also provide Cub training software online training.

    ReplyDelete
  3. Hi Prasanth,
    How can i use @DataProvider(name="keywords") in another class @Test annotation(Class in same project but present other Package)
    for POM framework

    ReplyDelete
  4. Thanks for sharing great information in your blog. Got to learn new things from your Blog . It was very nice blog to learn about selenium training in chennai

    ReplyDelete
  5. http://cheyat.com/qa/selenium-online-training-tutorials

    ReplyDelete
  6. nice about selenium...
    SAS Institute introduced the SAS Certified Professional Program.
    SAS online training in hyderabad

    ReplyDelete
  7. seleni
    informatica online training
    um data driven text file..

    ReplyDelete
  8. In some places i can't understand your concept like driver.findElement(By.name("q")).sendKeys("" + search2)can you explain this code.


    Selenium Training in Chennai

    ReplyDelete
  9. Thanks for sharing great information.
    selenium training in chennai

    ReplyDelete
  10. very helpful for my site. I always follow your tips....
    msbi training in chennai

    ReplyDelete
  11. The Information which you provided is very much useful for Testing Training Learners Thank You for Sharing Valuable Information. I like this blog and this is very informative.

    Selenium Training in Bangalore

    ReplyDelete
  12. Nice and good article.. it is very useful for me to learn and understand easily.. thanks for sharing your valuable information and time.. please keep updating. Software Testing Training in Chennai | Selenium Training in Chennai

    ReplyDelete

  13. Those guidelines additionally worked to become a good way to recognize that other people online have the identical fervor like mine to grasp great deal more around this condition.

    python Training in Bangalore | python Training in Bangalore

    ReplyDelete
  14. Wow this is really amazing post. Thanks for sharing the useful informative data. I appreciate your difficulty work. Keep blogging. Protractor Training in Electronic City

    ReplyDelete
  15. I found this article very helpful and full of useful ideas.service now training online

    ReplyDelete
  16. Great post! A mulesoft developer course
    is a great way to learn API development, Anypoint Platform, DataWeave, REST APIs, connectors, and enterprise integration concepts. Hands-on practice with real-time projects helps learners build practical MuleSoft development skills and prepare for professional opportunities in API-led connectivity and integration solutions. Thanks for sharing this valuable information!

    ReplyDelete
  17. Excellent post! OpenShift training courses are a great way for IT professionals to enhance their knowledge of Kubernetes, container orchestration, DevOps practices, and cloud-native application development. A comprehensive OpenShift course with hands-on labs, real-time projects, and practical deployment scenarios helps learners understand cluster management, application deployment, security, and automation. Thanks for sharing valuable insights about OpenShift learning opportunities and career growth in modern cloud technologies!openshift training courses

    ReplyDelete