0

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?

enter image description here

@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
Kate Paulk
31.5k8 gold badges56 silver badges109 bronze badges
asked Jan 30, 2023 at 9:01
1
  • What results are you getting from the code you posted? Commented Jan 30, 2023 at 10:31

1 Answer 1

0

Solution :

  • Snippet to load config.properties
Properties prop=new Properties();
FileInputStream ips = new FileInputStream("home/username/ProjectName/src/config.properties");
prop.load(ips);
  • Ensure .properties are getting loaded before features run:
    • Basically you can have multiple implementations to achieve this
    • On successful driver object creation, you can create and load the prop object
    • Good solution to use try..catch blocks for all the initialisation
answered Jan 30, 2023 at 12:19

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.