无法将java.util.ArrayList强制转换为org.testng.xml.XmlClass-此错误是在运行脚本时引发的
我试图在运行时创建一个testng文件,这样我就可以只执行我想要的类和方法。但是,在运行时,我得到了一个演员错误。请帮帮我 我尝试了所有可能的组合,并得出了以下代码无法将java.util.ArrayList强制转换为org.testng.xml.XmlClass-此错误是在运行脚本时引发的,java,testng,Java,Testng,我试图在运行时创建一个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
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();
}
}
package org.exela.mtclaims;
导入java.io.FileInputStream;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.xssf.usermodel.XSSFCell;
导入org.apache.poi.xssf.usermodel.XSSFRow;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.testng.testng;
导入org.testng.xml.XmlClass;
导入org.testng.xml.xmlclude;
导入org.testng.xml.XmlSuite;
导入org.testng.xml.XmlTest;
公共类CreateTestNGXML扩展了基类{
公共静态FileInputStream fis=null;
公共静态XSSFWorkbook工作簿=null;
公共静态XSSFSheet=null;
public XSSFRow row=null;
公共XSSFCell单元=null;
公共静态int rowCount=0;
静态ArrayList方法=新建ArrayList();
静态ArrayList类=新ArrayList();
公共静态字符串excelPath=“D:\\Sai\\Documents\\Workspace\\IBM\u MTClaims\u Automation\\datarepository\\Data-MTClaims.xlsx”;
公共静态列表构造函数包括(字符串…方法名)
{
List includes=new ArrayList();
for(字符串eachMethod:methodNames)
{
includes.add(新的xmlclude(eachMethod));
}
回报包括:;
}
公共静态列表类(ArrayList类名)
{
List includes=new ArrayList();
//String className=“org.exela.mtclaims。”;
for(字符串eachClass:类名)
{
//String text=className.concat(每个类);
if(包括.isEmpty())
{
如果(!includes.contains(“[XmlClass class=org.exela.mtclaims.+eachClass+”]))
{
includes.add(新的XmlClass(“org.exela.mtclaims.”+eachClass));
}
}
其他的
{
for(XmlClass XmlClass:includes)
{
if(includes.contains(xmlClass))
{
继续;
}
其他的
{
includes.add(新的XmlClass(“org.exela.mtclaims.”+eachClass));
}
}
}
/*如果(includes.contains(“org.exela.mtclaims.+eachClass))
{
includes.add(新的XmlClass(“org.exela.mtclaims.”+eachClass));
}
其他的
{
includes.add(新的XmlClass(“org.exela.mtclaims.”+eachClass));
}*/
}
回报包括:;
}
@抑制警告(“未选中”)
公共静态void main(字符串[]args)引发异常{
//创建TestNG套件
XmlSuite=newxmlsuite();
set.setName(“测试套件”);
//创建TestNG测试
XmlTest=新的XmlTest(套件);
test.setName(“测试”);
//创建TestNG类和include to include方法
//List classesToRun=新列表();
List classesToRun=new ArrayList();
List methodsToRun=new ArrayList();
//从excel中读取数据
fis=新文件输入流(excelPath);
工作簿=新XSSF工作簿(fis);
sheet=workBook.getSheet(“测试用例”);
rowCount=sheet.getLastRowNum();
//包括应该运行的方法
对于(int i=2;i
问题出现在第129行,
((XmlClass)classesToRun).setIncludedMethods(methodsToRun)代码>。我不明白怎么了。有人能提供解决方案吗?classesToRun
是XmlClass
的列表,不能转换为单个XmlClass
。您需要在列表上迭代
for (XmlClass xmlClass : classesToRun) {
xmlClass.setIncludedMethods(methodsToRun);
}
谢谢你的意见。你的回答是对的。但是,我还有一个疑问,为什么我的include是这样创建的:
,而不是
?@electronibrat抱歉,我不熟悉XmlClass
。如果你有不同的问题,你应该问一个新问题。发布最小相关代码、预期输出和实际输出。