无法将java.util.ArrayList强制转换为org.testng.xml.XmlClass-此错误是在运行脚本时引发的

无法将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

我试图在运行时创建一个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();
    }
}
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
。如果你有不同的问题,你应该问一个新问题。发布最小相关代码、预期输出和实际输出。