Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当以编程方式运行TestNG时,如何从测试类中获取@Test方法_Java_Selenium_Webdriver_Testng - Fatal编程技术网

Java 当以编程方式运行TestNG时,如何从测试类中获取@Test方法

Java 当以编程方式运行TestNG时,如何从测试类中获取@Test方法,java,selenium,webdriver,testng,Java,Selenium,Webdriver,Testng,我正在创建一个应用程序,以编程方式执行java webdriver selenium脚本。我们使用TestNG 我能够使用虚拟XML文件启动这些类。此有效: XmlSuite suite = new XmlSuite(); suite.setName("TmpSuite"); XmlTest test = new XmlTest(suite); test.setName("TmpTest"); List<XmlClass> classes =

我正在创建一个应用程序,以编程方式执行java webdriver selenium脚本。我们使用TestNG

我能够使用虚拟XML文件启动这些类。此有效

    XmlSuite suite = new XmlSuite();
    suite.setName("TmpSuite");

    XmlTest test = new XmlTest(suite);
    test.setName("TmpTest");
    List<XmlClass> classes = new ArrayList<XmlClass>();

    Map<String, String> parameters = new HashMap<String, String>(); 
    parameters.put("browser", "Firefox"); 
    suite.setParameters(parameters);

    classes.add(new XmlClass("package.classname"));
    test.setXmlClasses(classes) ;

    List<XmlSuite> suites = new ArrayList<XmlSuite>();
    suites.add(suite);
    TestNG tng = new TestNG();
    tng.setXmlSuites(suites);
    tng.run();
所以在这一点上,我能够得到我所有类名的字符串列表,并且我可以将它们中的任何一个放入
classes.add(newxmlclass(“package.classname”)行,允许我以编程方式运行任何测试类。太好了

综上所述,我现在面临的问题是: 这些类有不同的@Test方法。通过只启动该类,所有@Test方法都将被执行。我希望能够提取该类中可用的@Test方法,并将它们呈现给用户,以便他们可以选择想要的方法

我不知道如何从我们的测试类中提取@Test方法。

您可以使用及其方法注释扫描程序:

Reflections reflections = new Reflections("my.package");
Set<Method> resources =
    reflections.getMethodsAnnotatedWith(org.testng.Test.class);
Reflections=newreflections(“my.package”);
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.Test.class);
您可以使用及其方法AnnotationsCanner:

Reflections reflections = new Reflections("my.package");
Set<Method> resources =
    reflections.getMethodsAnnotatedWith(org.testng.Test.class);
Reflections=newreflections(“my.package”);
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.Test.class);

您需要Java反射:祝您好运!您需要Java反射:祝您好运!谢谢,但是有没有办法从一个类中获得@test方法?(而不是整个程序包)是,使用
类作为参数。看,我用“package.name”和
类都试过了,但是它似乎从来没有返回任何东西。无论我尝试getMethods
getMethodsAnnotatedWith(org.testng.annotations.Test.class)
还是只尝试getMethodsReturn(String.class)
(作为测试,我仍然只需要带注释的方法),结果总是一个空集。(这可能与此无关,但在添加
javaassist
库之前,我一直收到一个
NoClassDefFoundError
错误)。我会尝试在我这方面进行测试,但您可能应该根据反思库问一个新问题谢谢,这就是我要做的。我发现这个构造函数可以工作,但是它返回项目中每个类的带注释的方法(不仅仅是指定的包)
Reflections Reflections=new Reflections(new ConfigurationBuilder().setURL(ClasspathHelper.forPackage(“abercrombie.desktop.abercrombie”)。setScanners(new methodAnnotationsCanner());
谢谢,但是有没有办法从一个类中获取@test方法?(而不是整个包)是的,以
类作为参数。请参阅。我用“package.name”尝试了这两种方法还有一个
,但是它似乎永远不会返回任何东西。无论我尝试使用getMethods
getMethodsAnnotatedWith(org.testng.annotations.Test.class)
还是只使用
getMethodsReturn(String.class)
(作为测试,我仍然只需要带注释的方法),结果总是一个空集。(这可能不相关,但在添加
javaassist
库之前,我得到了一个
NoClassDefFoundError
错误)。我将尝试在我这方面进行测试,但您可能应该基于反射库问一个新问题谢谢,这就是我要做的。我发现这个构造函数可以工作,但是它返回项目中每个类(而不仅仅是指定的包)的带注释的方法。
reflections=new reflections(新建ConfigurationBuilder().setURL(ClasspathHelper.forPackage(“abercrombie.desktop.abercrombie”)).setScanners(新建方法AnnotationsCanner());