0

I using page object model to create my code but the WebElement is null and cannot be instantiate using annotation. Why is the error like that?

Tutorial

Code:

public class Login {
private String homePage = "http://localhost:63916/";
private Login_Page obj;


public Login() {
    obj = new Login_Page();
}

@Given("^Volare Collector Home Page opens in browser$")
public void loadPage() {
    try {
        WebDriverManager.createDriver();
        WebDriverManager.driver.get(homePage);
        WebDriverManager.driver.manage().window().maximize();
    } catch (Exception ex) {
        LogManager.logger.log(Level.INFO, "Exception: " + ex.getMessage());
    }
}

@When("^I login to Volare Collector with Username and Password$")
public void login() {
    try {
        obj.enterUsername();
        WebDriverManager.driver.findElement(By.xpath("//*[@id=\"inputPassword\"]")).sendKeys("1");
        WebDriverManager.driver.findElement(By.xpath("/html/body/div[1]/div/div/form/div/div[5]/div[2]/div/div[2]/button")).click();
    } catch (Exception ex) {
        LogManager.logger.log(Level.INFO, "Exception: " + ex.getMessage());
    }
}

Login_Page

public class Login_Page {

@FindBy(xpath = "//*[@id=\\\"inputName\\\"]") 
WebElement username;

PropertiesManager proMgr;

public Login_Page() {
    proMgr = PropertiesManager.createInstance();
}

public void enterUsername() {
    String u = proMgr.getProperties().getProperty("username");
    username.sendKeys(u);
}

I"m using Junit to run the test. Please help. Thanks.

nicholas
  • 2,581
  • 14
  • 66
  • 104
  • 1
    You have to call a function to initialize them. In your tutorial you see it happening here: public class TestApp extends MyListener { MercuryToursLoginPage mlp; MercuryToursRegisterPage mrp; @BeforeTest public void beforeTest(String browserName) { mlp = PageFactory.initElements(driver, MercuryToursLoginPage.class); mrp = PageFactory.initElements(driver, MercuryToursRegisterPage.class); – Chai Apr 05 '18 at 10:56
  • Thanks for your help. – nicholas Apr 06 '18 at 01:30
  • did you tried qaf? refer https://stackoverflow.com/questions/40130996/is-there-any-framework-which-supports-behaviour-driven-approch-bdd-for-seleniu – user861594 Apr 08 '18 at 02:31

1 Answers1

0

I have resolved this issues. Main thing is for every page we have to make one constructor like home page we have to define one home page constructor and pass the Webdriver object. for page object model we have to define all the Web Element, create a method according over needs and intialized all the elements using page factory in same constructor. check my Home page class below for that reference.

After doing that we simply have to call the home page class constructor in our step definition. check my Step definition class below after home page class.

Please share here if you guys have any other suggestion.

here is the code that i implemented. this is my Homepage class ------------------->

package com.qa.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;

import com.qa.utill.TestBase;


public class Homepage {
    WebDriver driver;

    @FindBy(how = How.XPATH, using = "//*[@id='email_create']")
    WebElement enteremail;

    @FindBy(xpath = "//button[@id='SubmitCreate']")
    WebElement createaccountbtn;



    **public Homepage(WebDriver driver)
    {

        System.out.println("driver is initializing");
        PageFactory.initElements(driver, this);
        System.out.println("driver is initialized");
    }**
  public void EnterEmailID()

  {

      System.out.println("Page maximaxe");

     enteremail.sendKeys("thakkarsne@gmail");



  }
public void clickonSignup()
{
    createaccountbtn.click();

}

}

This is my step definition file ----------------------->

package com.qa.Stepdef;

import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import com.qa.pages.Homepage;
import com.qa.utill.TestBase;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;




public class MyStepDef extends TestBase{



@Given("^i am on signup page$")
public void i_am_on_signup_page() {
    //System.setProperty("webdriver.chrome.driver", "/Users/snehalthakkar/Downloads/chromedriver");
    //driver = new ChromeDriver();
    //driver.get("http://automationpractice.com/index.php?controller=authentication&back=my-account");
 TestBase.initialization();
  // System.out.println("driver having"+ driver);
}

@When("^user enter emailid$")
public void user_enter_emailid()  {
  // driver.findElement(By.xpath("//*[@id='email_create']")).sendKeys("thakkarsne@gmail.com");
//  homepage.EnterEmailID();
    //System.out.println(driver);

    //System.out.println("Catching user email");
    Homepage homepage = new Homepage(driver);
    homepage.EnterEmailID();
    System.out.println("Catch user mail");
}

@Then("^click on button to creat an account$")
public void click_on_button_to_creat_an_account() {
  System.out.println("I am clicking on button");
}

}