Create TestNG.xml file dynamically and pass parameter

10,181

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.

Share:
10,181
Karunagara Pandi
Author by

Karunagara Pandi

Hi, I'm Karunagara Pandi G, currently working as Associate QA Lead at Sri Mookambika Infosolutions Pvt Ltd - Madurai. I have experience in both Automation and Manual testing and have been with this industry for 6.8 years. I have also worked with the tools like JMeter for performance testing, SOAP UI for webservices My highest educational qualification is Master of Computer Applications (MCA). Kindly consider my application and give an opportunity for the same. Thanks

Updated on June 05, 2022

Comments

  • Karunagara Pandi
    Karunagara Pandi almost 2 years

    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.