我们目前正在使用Selenium,TestNG和Saucelabs。我试图覆盖onTestSuccess
和onTestFailure
侦听器方法,以便根据方法的结果将功能设置为true/false
。
我尝试了几种方法却没有成功。简要总结一下:
MainSauceLabsClass.java
public class MainSauceLabsClass {
// .....
public static DesiredCapablities desiredCapabilities;
// ....
@BeforeMethod
//set a whole range of parameters for Saucelabs here,e.g.:
desiredCapabilities = DesiredCapabilities.iphone();
desiredCapabilities.setCapabilities("idleTimeout",300);
// etc...
}
CustomTestListener.java
public class CustomTestListener implements ITestListener {
// ...
@Override
public void onTestSuccess(ITestResult result) {
// I want to pass to saucelabs pass/fail result via "passed" capability. something like
// desiredCapabilities.setCapabilities("passed",true);
}
}
显然问题是我无法在desiredCapabilities
中引用对象CustomTestListener.java
,因为它在MainSauceLabsClass
内设置。我的问题是实现这一目标的最佳方式。之一:
desiredCapabilities
内的同一个CustomTestListener
对象来调用setCapabilities
方法?onTestSuccess
内访问MainSauceLabsClass
并将其设置为@AfterMethod
,以便在同一课程中引用desiredCapabilities
?如果需要,很高兴提供更多信息。感谢您的帮助。
答案 0 :(得分:0)
显然问题是我无法在
desiredCapabilities
中引用对象CustomTestListener.java
,因为它在MainSauceLabsClass
内设置。
作为Mrunal Gosar points out,desiredCapabilities
是public static
变量,因此您可以从CustomTestListener
“引用”它。 e.g:
public class CustomTestListener implements ITestListener {
// ...
@Override
public void onTestSuccess(ITestResult result) {
MainSauceLabsClass.desiredCapabilities.setCapabilities("passed",true);
}
}
但是,如果在CustomTestListener.onTestSuccess(ITestResult)
中的@BeforeMethod
之前调用MainSauceLabsClass
,那么您将获得NullPointerException
(这可能是您的意思“无法参考......因为它设置在MainSauceLabsClass
“)内。
如果你要做的是存储与每个测试相关的数据,那么你可以使用ThreadLocal<T>
作为每个测试,并在其自己的线程中运行其配置(之前/之后)方法。然后,您可以设置并获取当前测试的值。 e.g:
<强> MainSauceLabsClass.java 强>
@Listeners(CustomTestListener.class)
public class MainSauceLabsClass {
public static final ThreadLocal<DesiredCapabilities> CURRENT_DESIRED_CAPABILITIES =
new InheritableThreadLocal<>();
@BeforeMethod
public void setDesiredCapabilities() {
DesiredCapabilities desiredCapabilities = DesiredCapabilities.iphone();
desiredCapabilities.setCapability("idleTimeout", 300);
CURRENT_DESIRED_CAPABILITIES.set(desiredCapabilities);
}
}
<强> CustomTestListener.java 强>
public class CustomTestListener implements ITestListener {
// ...
@Override
public void onTestSuccess(ITestResult result) {
DesiredCapabilities desiredCapabilities =
MainSauceLabsClass.CURRENT_DESIRED_CAPABILITIES.get();
desiredCapabilities.setCapability("passed", true);
}
}