Example of my implementation
I have 4 test classes which internally have on average 5 test methods. I have 1 super class which the configuration related stuff.
All the 4 test classes are extended from this super class.
In Super class i have @ Before Methods (creating browser session) and @ After Methods(closing session)
In my XML
<suite name="Testsuite Name" thread-count="10" parallel="tests">
<parameter name="seleniumHost" value="xxx.xxx.xxx.xxx" />
<parameter name="seleniumPort" value="44444" />
<listeners>
<listener class-name="testnghelpers.CustomTestListener" />
<listener class-name="testnghelpers.MyReporter" />
</listeners>
<test verbose="2" name="firefox on WINDOWS" annotations="JDK">
<parameter name="browser" value="firefox" />
<parameter name="platform" value="WINDOWS" />
<classes>
<class name="Testclass1" />
<class name="Testclass2" />
<class name="Testclass3"/>
<class name="Testclass4" />
</classes>
</test>
When one test method in one testclass got failed it takes screenshot and rest of the methods in that class and all other class executing after it are getting skipped.
Error Stack:
Session ID is null Build info: version: '2.29.0', revision: '58258c3', time: '2013-01-17 22:46:35' System info:
os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_35' Driver info: driver.version: RemoteWebDriver
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:289)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:506)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:32)
at org.openqa.selenium.remote.AddTakesScreenshot$1.invoke(AddTakesScreenshot.java:36)
at org.openqa.selenium.remote.Augmenter$CompoundHandler.intercept(Augmenter.java:286)
at org.openqa.selenium.remote.RemoteWebDriver$$EnhancerByCGLIB$$18c4290e.getScreenshotAs(<generated>)
at com.xxxx.screenShot(TafSelenium.java:998)
at com.xxxx.testnghelpers.CustomTestListener.afterInvocation(CustomTestListener.java:36)
at org.testng.internal.invokers.InvokedMethodListenerInvoker$InvokeAfterInvocationWithoutContextStrategy.callMethod(InvokedMethodListenerInvoker.java:100)
at org.testng.internal.invokers.InvokedMethodListenerInvoker.invokeListener(InvokedMethodListenerInvoker.java:62)
at org.testng.internal.Invoker.runInvokedMethodListeners(Invoker.java:619)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:777)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
My requirement :
So if one testmethod fails it should run rest of the testmethods in current class and rest of the classes