[英]java.util.ArrayList cannot be cast to org.testng.xml.XmlClass - This error is thrown while running the script
我正在尝试在运行时中创建一个testng文件,以便仅执行我想要的那些类和方法。 但是,在运行时出现强制转换错误。 请帮帮我。
我已经尝试了所有可能的组合,并提出了以下代码
package org.exela.mtclaims;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlInclude;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
public class CreateTestNGXML extends BaseClass {
public static FileInputStream fis = null;
public static XSSFWorkbook workBook = null;
public static XSSFSheet sheet = null;
public XSSFRow row = null;
public XSSFCell cell = null;
public static int rowCount = 0;
static ArrayList<String> methods = new ArrayList<String>();
static ArrayList<String> classes = new ArrayList<String>();
public static String excelPath = "D:\\Sai\\Documents\\Workspace\\IBM_MTClaims_Automation\\Data Repository\\Data - MT Claims.xlsx";
public static List<XmlInclude> constructIncludes(String... methodNames)
{
List<XmlInclude> includes = new ArrayList<XmlInclude>();
for (String eachMethod : methodNames)
{
includes.add(new XmlInclude(eachMethod));
}
return includes;
}
public static List<XmlClass> constructClasses(ArrayList<String> classNames)
{
List<XmlClass> includes = new ArrayList<XmlClass>();
//String className = "org.exela.mtclaims.";
for (String eachClass : classNames)
{
//String text = className.concat(eachClass);
if(includes.isEmpty())
{
if(!includes.contains("[XmlClass class=org.exela.mtclaims." + eachClass+"]"))
{
includes.add(new XmlClass("org.exela.mtclaims." + eachClass));
}
}
else
{
for (XmlClass xmlClass : includes)
{
if(includes.contains(xmlClass))
{
continue;
}
else
{
includes.add(new XmlClass("org.exela.mtclaims." + eachClass));
}
}
}
/*if (includes.contains("org.exela.mtclaims." + eachClass))
{
includes.add(new XmlClass("org.exela.mtclaims." + eachClass));
}
else
{
includes.add(new XmlClass("org.exela.mtclaims." + eachClass));
}*/
}
return includes;
}
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
// Creating TestNG Suite
XmlSuite suite = new XmlSuite();
suite.setName("Test Suite");
// Creating TestNG Tests
XmlTest test = new XmlTest(suite);
test.setName("Tests");
// Creating TestNG Classes and Includes to include methods
//List<XmlClass> classesToRun = new List<XmlClass>();
List<XmlClass> classesToRun = new ArrayList<XmlClass>();
List<XmlInclude> methodsToRun = new ArrayList<XmlInclude>();
// Reading data from excel
fis = new FileInputStream(excelPath);
workBook = new XSSFWorkbook(fis);
sheet = workBook.getSheet("TestCases");
rowCount = sheet.getLastRowNum();
// Including methods that should run
for (int i = 2; i < rowCount; i++)
{
if (readDataFromCell(excelPath, "TestCases", "Should Run", i).equals("Yes"))
{
methods.add(readDataFromCell(excelPath, "TestCases", "Methods", i));
}
}
methodsToRun = constructIncludes(new String[] { String.join(",", methods) });
// Including classes that should run
for (int i = 2; i < rowCount; i++)
{
if (readDataFromCell(excelPath, "TestCases", "Should Run", i).equals("Yes")) {
classes.add(readDataFromCell(excelPath, "TestCases", "Classes", i));
}
}
//classesToRun = constructClasses(new String[] { String.join(",", classes) });
classesToRun = constructClasses(classes);
//test.setXmlClasses (Arrays.asList (new XmlClass[] { classesToRun }));
test.setXmlClasses (classesToRun);
// Adding Include to classes
((XmlClass) classesToRun).setIncludedMethods(methodsToRun);
// Adding Classes to tests
test.setXmlClasses((List<XmlClass>) classesToRun);
// Adding suites
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
// Printing the created suite file
System.out.println("Printing TestNG Suite Xml");
System.out.println(suite.toXml());
// Creating and running the TestNG file
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
}
}
问题在第129行, ((XmlClass) classesToRun).setIncludedMethods(methodsToRun);
。 我不明白怎么了 有人可以为此提供解决方案吗?
classesToRun
是列表XmlClass
,它不能被转换为单一XmlClass
。 您需要遍历列表
for (XmlClass xmlClass : classesToRun) {
xmlClass.setIncludedMethods(methodsToRun);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.