【问题标题】:Cucumber Page Object Model not instantiate Object黄瓜页面对象模型不实例化对象
【发布时间】:2018-05-11 03:11:02
【问题描述】:

我使用页面对象模型来创建我的代码,但 WebElement 为 null 并且无法使用注释进行实例化。为什么会出现这样的错误?

Tutorial

代码:

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());
    }
}

登录页面

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);
}

我正在使用 Junit 运行测试。请帮助。谢谢。

【问题讨论】:

  • 你必须调用一个函数来初始化它们。在您的教程中,您会看到它发生在这里: 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);
  • 感谢您的帮助。

标签: junit cucumber


【解决方案1】:

我已经解决了这个问题。主要是对于每个页面,我们必须创建一个类似于主页的构造函数,我们必须定义一个主页构造函数并传递 Webdriver 对象。对于页面对象模型,我们必须定义所有 Web 元素,根据需要创建一个方法,并在同一个构造函数中使用页面工厂初始化所有元素。检查下面我的主页类以获取该参考。

之后,我们只需在步骤定义中调用主页类构造函数。在主页类之后检查我下面的步骤定义类。

如果你们有任何其他建议,请在这里分享。

这是我实现的代码。 这是我的主页类------------------->

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();

}

}

这是我的步骤定义文件----------->

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");
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多