4

I have to execute test scripts using dynamic testng.xml file which means I have to create testng.xml file thru code and pass the parameters to the @Test methods pro grammatically.

For that I have created two Java files DynamicTestNG.java which should generate testng.xml file and run SampleClass.java where the @Test method has been written along with the parameters.

DynamicTestNG.java

public class DynamicTestNG {

public void runTestNGTest(Map<String,String> testngParams) {

    //Create an instance on TestNG
     TestNG myTestNG = new TestNG();

    //Create an instance of XML Suite and assign a name for it.
     XmlSuite mySuite = new XmlSuite();
     mySuite.setName("MySuite");

    //Create an instance of XmlTest and assign a name for it.
     XmlTest myTest = new XmlTest(mySuite);
     myTest.setName("MyTest");

    //Add any parameters that you want to set to the Test.
     myTest.setParameters(testngParams);

    //Create a list which can contain the classes that you want to run.
     List<XmlClass> myClasses = new ArrayList<XmlClass> ();
     myClasses.add(new XmlClass("SampleClass"));

    //Assign that to the XmlTest Object created earlier.
     myTest.setXmlClasses(myClasses);

    //Create a list of XmlTests and add the Xmltest you created earlier to it.
     List<XmlTest> myTests = new ArrayList<XmlTest>();
     myTests.add(myTest);

    //add the list of tests to your Suite.
     mySuite.setTests(myTests);

    //Add the suite to the list of suites.
     List<XmlSuite> mySuites = new ArrayList<XmlSuite>();
     mySuites.add(mySuite);

    //Set the list of Suites to the testNG object you created earlier.
     myTestNG.setXmlSuites(mySuites);

    TestListenerAdapter tla = new TestListenerAdapter();
    myTestNG.addListener(tla);

    //invoke run() - this will run your class.
     myTestNG.run();
    }

public static void main (String args[])
{
    DynamicTestNG dt = new DynamicTestNG();

    //This Map can hold your testng Parameters.
     Map<String,String> testngParams = new HashMap<String,String> ();

     testngParams.put("searchtext1", "testdata1");
     testngParams.put("searchtext2", "testdata2");

     dt.runTestNGTest(testngParams);
}

}

And SampleClass.java

  public class SampleClass {

private WebDriver driver;

    @BeforeTest
    public void setUp()
    {
        System.setProperty("webdriver.chrome.driver","C:\\Users\\AK5040691\\Desktop\\IE driver\\chromedriver.exe");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        driver.navigate().to("http://executeautomation.com/blog/custom-testng-library-for-appium/#more-1562");
    }

    //@Parameters({"searchText1","searchText2"})
    //@Test
    public void searchText(String text1, String text2)
    {
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        driver.findElement(By.className("search-field")).sendKeys(text1);

        driver.findElement(By.className("search-field")).clear();

        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        driver.findElement(By.className("search-field")).sendKeys(text2);       
    }
}

Its not running. Please let me know the mistake here.

2
  • try with complete class name means with package name here.. myClasses.add(new XmlClass("SampleClass")); Commented Dec 1, 2017 at 14:28
  • can you elaborate "its not running" , whats the error? Commented Dec 1, 2017 at 15:48

2 Answers 2

4

You have to uncomment the @Test annotation in your SampleClass file. And if your SampleClass is in a package , then absolute package name + class name is to be specified in this statement.

myClasses.add(new XmlClass("com.some.package.SampleClass"));

Generally TestNG classes have a suffix or prefix labelled "Test" so that surefire plugin can include them in the execution flow, in case if you are using maven.

Sign up to request clarification or add additional context in comments.

Comments

0

You can instead use the constructor with parameter of class object .

myClasses.add(new XmlClass(SampleClass.class));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.