And*_*rio 1 java testng selenium webdriver
我正在创建一个应用程序,以编程方式执行我们的java webdriver硒脚本。我们使用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();
Run Code Online (Sandbox Code Playgroud)
由于上述方法使用package.classname来执行该类,因此我需要一种获取所有类的方法。它们的包和类名(我们有数百个包)。
我使用此代码来抓取所有package.classnames。在简单地扫描项目的/ bin /目录中,将文件夹结构转换为程序包名称,并从类文件中删除.class扩展名。这个作品,太:
//scans the /bin directory of project to grab all packages/classes
String binPath = "V:\\Selenium\\Scripts\\bin\\";
File dir = new File(binPath);
List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
List<String> classNames = new ArrayList<String>(300);
for (File f : files) {
//instead of "V:\Selenium\Scripts\bin\package\classname.class"
//I just end up with "package.classname"
classNames.add(extractClassNameFromPath(f.getPath()));
}
Run Code Online (Sandbox Code Playgroud)
因此,在这一点上,我可以获得所有类名的String列表,并且可以将其中的任何一个放入classes.add(new XmlClass("package.classname"));行中,从而允许以编程方式运行任何测试类。大!
综上所述,这就是我现在面临的问题:类具有不同的@Test方法。通过仅启动类,将执行所有@Test方法。我希望能够提取该类中的可用@Test方法并将其呈现给用户,以便他们可以选择所需的方法。
我不知道如何从我们的测试类中提取@Test方法。
您可以使用反射库及其MethodAnnotationsScanner:
Reflections reflections = new Reflections("my.package");
Set<Method> resources =
reflections.getMethodsAnnotatedWith(org.testng.Test.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2370 次 |
| 最近记录: |