To run my Selenium/Cucumber java project, I need to pass some VM arguments, variables, properties path etc... now easiest way is to pass it in Eclipse run configuration under "VM arguments" tab. I need to give path of Log4j2.xml, sqlJdbc driver, any UserID etc.
Now, if i put all this in a properties file and then run the "TestRunner', then how can i make sure properties are loaded before the Features run. I get NullPointerException.
Can i put this in a static block? THis way will it get initialized before any TestNG feature runs?
@CucumberOptions(glue = { "stepDefinitions" }, features = {
"src/test/resources/features/CreateUserProfile.feature" }, plugin = { "pretty",
"json:test-output/JsonReport.json", "html:test-output/HTMLReport.html",
"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:", })
public class TestRunner {
public TestNGCucumberRunner testNGCucumberRunner;
@BeforeClass(alwaysRun = true)
public void setUpClass() {
if (testNGCucumberRunner == null) {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
}
@Test(groups = "cucumber scenarios", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
public void scenario(PickleWrapper pickleEvent, FeatureWrapper cucumberFeature) throws Throwable {
testNGCucumberRunner.runScenario(pickleEvent.getPickle());
}
@DataProvider
public Object[][] scenarios() {
if (testNGCucumberRunner == null) {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
return testNGCucumberRunner.provideScenarios();
}
@AfterClass(alwaysRun = true)
public void tearDownClass() {
testNGCucumberRunner.finish();
}
static {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.setProperty("current.date", dateFormat.format(new Date()));
String propertyFilePath = "C:\\EclipseWorkspace\\Automation\\src\\main\\resources\\config.properties";
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(propertyFilePath));
Properties properties = new Properties();
try {
properties.load(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("Config.properties not found at " + propertyFilePath);
}
}
}
UPDATE:
I get this error ...i have loaded the properties file in the TestRunner.java file, also loaded in the BaseTest.java class where driver is initialized. Still i get this error. Please help. I don't want to use eclipse VM arguments and want my properties to be loaded from the script only.
java.lang.NullPointerException: Cannot invoke "String.equalsIgnoreCase(String)" because the return value of "java.lang.System.getProperty(String)" is null