Checkout our demo site to practice selenium https://magento.softwaretestingboard.com/

0 like 0 dislike
886 views
by The go-to Tester (218 points)
I have written test using Selenium Webdriver in TestNg frame work . I am getting error. My code is-:
public class AllTests extends Action{
    WebDriver driver;
    @BeforeMethod
    public void  setup() throws InterruptedException {
       
        System. setProperty("webdriver.chrome.driver", "C:\\Selenium driver\\chromedriver.exe");
        driver=new ChromeDriver();
           driver.get("http://newtours.demoaut.com");
           driver.manage().window().maximize();
           driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
    @Test
    public void signInTest() {
        System.out.println("ss");
           //login("vicky","password");
           //Assert.assertEquals(driver.getTitle(),"Login Succesful");
    }
    
    @AfterMethod
    public void teardown() {
    driver.close();     
    }
}
The error is
Cannot instantiate class myPackage.AllTests
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:40)
    at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:377)
    at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:290)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190)
    at org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:130)
    at org.testng.TestRunner.initMethods(TestRunner.java:424)
    at org.testng.TestRunner.init(TestRunner.java:247)
    at org.testng.TestRunner.init(TestRunner.java:217)
    at org.testng.TestRunner.<init>(TestRunner.java:169)
    at org.testng.remote.support.RemoteTestNG6_9_10$1.newTestRunner(RemoteTestNG6_9_10.java:28)
    at org.testng.remote.support.RemoteTestNG6_9_10$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_9_10.java:61)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:594)
    at org.testng.SuiteRunner.init(SuiteRunner.java:168)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:117)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1300)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1287)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1141)
    at org.testng.TestNG.runSuites(TestNG.java:1075)
    at org.testng.TestNG.run(TestNG.java:1047)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29)
    ... 22 more
Caused by: java.lang.NullPointerException
    at myPackage.PageObjects.<init>(PageObjects.java:9)
    at myPackage.Action.<init>(Action.java:3)
    at myPackage.AllTests.<init>(AllTests.java:15)
    ... 27 more
by The go-to Tester (181 points)
As you can see here. You have NullPointerException error at PageObjects.java class. Can you post the code of your PageObjects.java class?
by The go-to Tester (218 points)
PageObjects.java
public class PageObjects {
    WebDriver driver;
    WebElement username_feild = driver.findElement(By.className("userName"));
    WebElement password_feild = driver.findElement(By.className("password"));
    WebElement login_btn = driver.findElement(By.name("login"));

}
Actions.java
public class Action extends PageObjects {
    public void login(String username, String password){
        String uName,Pwd;
        uName= username;
        Pwd=password;
        username_feild.sendKeys(uName);
        password_feild.sendKeys(Pwd);
        login_btn.click();
    }
    public void openHomePage(){
        driver.get("http://newtours.demoaut.com/");
    }

}

1 Answer

0 like 0 dislike
by The go-to Tester (181 points)
selected by
 
Best answer

Your PageObject has a WebDriver instance declared at class level which is never initialised.

I would suggest you to re write PageObject as below.

public class PageObjects {
    WebDriver driver;
  public  WebElement username_feild;
  public  WebElement password_feild ;
  public  WebElement login_btn;

public PageObjects(WebDriver driver){

this.driver = driver;

username_feild = driver.findElement(By.className("userName"));
    password_feild = driver.findElement(By.className("password"));
    login_btn = driver.findElement(By.name("login"));

}

}

And, call your each element from PageObject into your Actions class instead of extending it.

public class Action {

WebDriver driver;

PageObject pageObjct;

public Action(WebDriver driver){ //since we are not initiating WebDriver into Action class, we will get already initiated driver.

this.driver = driver;

this.pageObject = new PageObject(driver); // Passing on the same WebDriver to PageObjects

}
    public void login(String username, String password){
        WebDriver uName,Pwd; //this can not be String.
        uName= pageObject.username;
        Pwd=pageObject.password;
        username_feild.sendKeys(uName);
        password_feild.sendKeys(Pwd);
        login_btn.click();
    }
    public void openHomePage(){
        driver.get("http://newtours.demoaut.com/");
    }

}


This site is for software testing professionals, where you can ask all your questions and get answers from 1300+ masters of the profession. Click here to submit yours now!

1.4k questions

1.6k answers

866 comments

1.9k users

...