I have following conditions
Different base urls for each test class.
Same login credentials for each base url.
Different data sets for each test class.
Problem:
It passes AMSValidation but skips SAPValidation. It says
the firefoxdriver cannot be used after quit was called()
But while running tests per class, they pass.
My code:
public abstract class Validation {
// other variables
public static WebDriver driver = new FirefoxDriver();
public void doLogin() throws Exception {
// something
}
public void validateDocuments(String portal, String navigation,
String category, String title, String fileName) throws Exception {
// driver is used here
}
}
public class AMSValidation extends Validation {
@Parameters("baseUrl")
@BeforeTest(alwaysRun = true)
public void setUp(@Optional("https://website.com/ams/") String baseUrl)
throws Exception {
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);
doLogin();
}
@DataProvider
public Object[][] getDataForAMS() throws Exception {
// return test data for ams
}
@Test(dataProvider = "getDataForAMS")
public void validateAMS(String portal, String navigation, String category,
String title, String fileName) throws Exception {
validateDocuments(portal, navigation, category, title, fileName);
}
@AfterTest(alwaysRun = true)
public void tearDown() throws Exception {
driver.quit();
}
}
public class SAPValidation extends Validation {
@Parameters("baseUrl")
@BeforeTest(alwaysRun = true)
public void setUp(@Optional("https://website.com/sap/") String baseUrl)
throws Exception {
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);
doLogin();
}
@DataProvider
public Object[][] getDataForSAP() throws Exception {
// return test data for sap
}
@Test(dataProvider = "getDataForSAP")
public void validateSAP(String portal, String navigation, String category,
String title, String fileName) throws Exception {
validateDocuments(portal, navigation, category, title, fileName);
}
@AfterTest(alwaysRun = true)
public void tearDown() throws Exception {
driver.quit();
}
}
testng.xml:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Validation Suite" verbose="2">
<test name="AMS Test">
<parameter name="baseUrl" value="https://website.com/ams/" />
<classes>
<class name="com.website.tests.AMSValidation" />
</classes>
</test>
<test name="SAP Test">
<parameter name="baseUrl" value="https://website.com/sap/" />
<classes>
<class name="com.website.tests.SAPValidation" />
</classes>
</test>
</suite>
Log:
PASSED: validateAMS("portal", "navigation", "category", "title", "filename")
===============================================
AMS Test
Tests run: 1, Failures: 0, Skips: 0
===============================================
FAILED CONFIGURATION: @BeforeTest setUp("https://website.com/sap/")
org.openqa.selenium.remote.SessionNotFoundException: The FirefoxDriver cannot be used after quit() was called.
// rest of stack trace
SKIPPED: validateSAP("portal", "navigation", "category", "title", "filename")
===============================================
SAP Test
Tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 0
===============================================
===============================================
Validation Suite
Total tests run: 2, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 0
===============================================