出身背景
我有以下情况:
org。testng。ITest
助手
,包含当前测试环境的信息(例如,正在测试的设备)例如:
com.company.appundertest.Helper h;
public class TestClass implements org.testng.ITest {
private String testName;
//Helper is initialized externally in Factory + DataProvider
//and passed to Constructor.
public TestClass(com.company.appundertest.Helper hh) {
this.h = hh;
//constructor sets the test-name dynamically
//to distinguish multiple parallel test runs.
this.testName = "some dynamic test name";
}
@Override
public String getTestName() {
return this.testName;
}
@Test
public void failingTest() {
//test that fails...
}
}
这个问题本质上归结为:
如何访问TestNG测试类中的字段?
工具书类
@Vish的解决方案很好,但是您可以通过以下方式避免反思:
interface TestWithHelper {
Helper getHelper();
}
您的TestClass
将在其中实现它。然后:
private void getCurrentTestHelper(Object testClass) {
if (testClass instanceof TestWithHelper) {
Helper helper = ((TestWithHelper) testClass).getHelper();
...
}
}
这里有一个例子方法。您可以将其插入到测试监听器类中(扩展了TestListenerAdapter
)
public class CustomTestNGListener extends TestListenerAdapter{
//accepts test class as parameter.
//use ITestResult#getInstance()
private void getCurrentTestHelper(Object testClass) {
Class<?> c = testClass.getClass();
try {
//get the field "h" declared in the test-class.
//getDeclaredField() works for protected members.
Field hField = c.getDeclaredField("h");
//get the name and class of the field h.
//(this is just for fun)
String name = hField.getName();
Object thisHelperInstance = hField.get(testClass);
System.out.print(name + ":" + thisHelperInstance.toString() + "\n");
//get fields inside this Helper as follows:
Field innerField = thisHelperInstance.getClass().getDeclaredField("someInnerField");
//get the value of the field corresponding to the above Helper instance.
System.out.println(innerField.get(thisHelperInstance).toString());
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
将其称为:
@Override
public void onTestFailure(ITestResult tr) {
getCurrentTestHelper(tr.getInstance());
}
我使用TestNG6.8+Selenium WebDriver2.32来测试web应用程序的GUI。在测试失败的情况下,我想拍摄应用程序GUI的截图。 我所拥有的: null null 您能否建议一种方法,如何获得在AbstractGuitTest中声明的WebDriver实例,以便我可以使用它在GuiTestListener类中进行截图?
问题内容: 我有一个名为 Geometry 的基类,在该基类中存在 Sphere 子类: 和一个子类: 我有一个包含所有 Geometry 对象的ArrayList,我想对其进行迭代以检查是否正确读取了文本文件中的数据。到目前为止,这是我的迭代器方法: 如何访问和打印 球体的 半径和中心字段?提前致谢 :) 问题答案: 如果要访问子类的属性,则必须转换为子类。 但是,这并不是最OO的处理方式:一旦
我正在尝试使用TestNg并行运行测试。我有3个类(两个扩展了BaseTest类的测试类) BaseTest类只有“设置”和“拆卸”,没有其他东西。 当我尝试像这样并行运行测试时,一个带有测试的类运行,而另一个类只打开一个浏览器(但不执行测试) 但是当我从BaseTest类中剪切代码并将其直接放到我的每个测试类中(因此不扩展BaseTClass)时,代码工作,测试并行运行 为什么?我根本没有做任何
我正在尝试从Java切换到Kotlin。但我有很多遗留代码和第三方库。我看到,Java类中经常存在没有getter和setter的公共字段,这些字段必须从其他类访问。如果没有Kotlin代码中的getter,我如何访问Java类的公共字段?
使用java和testNG,我在两个不同的类test1.class和test2.class中有两个测试,还有一个包含大多数方法的base.class:
当我使用Selenium网格在appium(Android)中运行并行测试脚本时,我得到以下错误。 默认套件运行得测试总数:6,失败:0,跳过:3配置失败:1,跳过:0 堆栈跟踪消息:org.openqa.selenium.sessionNotCreatedException:无法创建新会话。(原始错误:请求了一个新会话,但一个正在进行)我的TestNG xml文件: config.json文件: