Java 如何从TestNG IInvokedMethodListener获取测试字段?
我正在使用TestNG 6.8+Selenium WebDriver 2.32测试web应用程序的GUI。在测试失败的情况下,我想做一个应用程序GUI的屏幕截图 我所拥有的:Java 如何从TestNG IInvokedMethodListener获取测试字段?,java,webdriver,integration-testing,screenshot,testng,Java,Webdriver,Integration Testing,Screenshot,Testng,我正在使用TestNG 6.8+Selenium WebDriver 2.32测试web应用程序的GUI。在测试失败的情况下,我想做一个应用程序GUI的屏幕截图 我所拥有的: 我可以通过实现testng的IInvokedMethodListener 我还知道如何使用网络驱动程序拍摄屏幕截图 我需要的是: 获取在AbstractGuiTest类中声明的WebDriver实例,以获取屏幕截图 以下是我的代码框架: import org.testng.annotations.Listeners
- 我可以通过实现testng的
IInvokedMethodListener
- 我还知道如何使用网络驱动程序拍摄屏幕截图
- 获取在AbstractGuiTest类中声明的WebDriver实例,以获取屏幕截图
import org.testng.annotations.Listeners;
...
@Listeners(GuiTestListener.class)
public abstract class AbstractGuiTest {
protected WebDriver driver; //Used by all tests
...
}
这是我的测试侦听器类,它对失败的测试作出反应:
public class GuiTestListener implements IInvokedMethodListener {
@Override
public void afterInvocation(IInvokedMethod method, ITestResult itr) {
if (method.isTestMethod() && !itr.isSuccess()) {
//Take a screenshot here. But how do I get at the intance of WebDriver declared in the AbstractGuiTest?
}
}
}
您能否建议一种方法,如何获取AbstractGuitTest中声明的WebDriver实例,以便我可以使用它在GuiTestListener类中截图?您可能的解决方案很好地抓住了这个想法-应该有一个地方,测试和listener之间共享
WebDriver
实例。我想到了另外两种解决方案,它们是我参与的项目中使用的,或者我在互联网上读到的
WebDriver
。guiceberry中有一个例子您可能的解决方案很好地抓住了这个想法-应该在测试和侦听器之间共享
WebDriver
实例。我想到了另外两种解决方案,它们是我参与的项目中使用的,或者我在互联网上读到的
WebDriver
。guiceberry中有一个例子您可以从ITestResult获得它:
Object x = itr.getInstance();
AbstractGuiTest currentCase = (AbstractGuiTest)x;
WebDriver driver = currentCase.getDriver();
您可以从ITestResult获得它:
Object x = itr.getInstance();
AbstractGuiTest currentCase = (AbstractGuiTest)x;
WebDriver driver = currentCase.getDriver();
我有一些相似的东西,当硒测试失败时,我需要截图。我所有的测试类都扩展了AbstractTestNGSpringContextTests,实现了TestWithEleniumDriver,它们有注释@Listeners(ScreenshotForFailedTestListener.class)
代码必须根据您的需要进行一些调整我有一些类似的东西,当selenium测试失败时,我需要截图。我所有的测试类都扩展了AbstractTestNGSpringContextTests,实现了TestWithEleniumDriver,它们有注释@Listeners(ScreenshotForFailedTestListener.class)
代码必须根据您的需要进行一些调整我想到的一个可能的解决方案是在GuiTestListener中创建一个静态WebDriver字段,我将从AbstractGuiTest@BeforeClass设置方法设置该字段。但我想知道是否有更系统的解决方案……我想到的一个可能的解决方案是在GuiTestListener中创建一个静态WebDriver字段,我将从AbstractGuiTest@BeforeClass设置方法设置该字段。但我想知道是否有更系统的解决方案……这就是我一直在寻找的答案。谢谢你,贾斯汀!这就是我一直在寻找的答案。谢谢你,贾斯汀!该接口的解决方案非常干净,至少为我节省了一些反射调用。谢谢你的想法。这个界面的解决方案非常干净,并且至少为我节省了一些反射调用。谢谢你的主意。