【问题标题】:Create TestNG.xml file dynamically and pass parameter动态创建 TestNG.xml 文件并传递参数
【发布时间】:2023-03-06 02:17:01
【问题描述】:

我必须使用动态 testng.xml 文件执行测试脚本,这意味着我必须通过代码创建 testng.xml 文件并将参数传递给 @Test 方法以编程方式。

为此,我创建了两个 Java 文件 DynamicTestNG.java,它们应该生成 testng.xml 文件并运行 SampleClass.java 其中 @测试方法已与参数一起编写。

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);
}

}

还有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);       
    }
}

它没有运行。请在这里告诉我错误。

【问题讨论】:

  • 尝试使用完整的类名意味着这里使用包名.. myClasses.add(new XmlClass("SampleClass"));
  • 你能详细说明“它没有运行”,错误是什么?

标签: java selenium automation webdriver testng


【解决方案1】:

您必须在 SampleClass 文件中取消注释 @Test 注释。如果您的 SampleClass 在一个包中,则在此语句中将指定绝对包名 + 类名。

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

通常,TestNG 类具有标记为“Test”的后缀或前缀,因此如果您使用 ma​​ven,surefire 插件可以将它们包含在执行流程中。

【讨论】:

    【解决方案2】:

    您可以改为使用带有类对象参数的构造函数。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-09
      • 2019-06-30
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2020-02-22
      • 2017-03-13
      • 2019-01-14
      相关资源
      最近更新 更多