使用页面工厂

时间:2016-09-14 14:42:08

标签: java selenium

我运行测试时遇到异常。我正在使用页面工厂的硒。当我运行以下代码时,它将打开网站并失败,下面有例外。它在我的测试用例中没有执行HomePage.ClickbtnCookieWarning()

有人可以帮我理解为什么我的代码不起作用吗?

  

FAILED CONFIGURATION:@BeforeTest SetUp java.lang.NullPointerException     在   org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)     在   org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)     在com.sun.proxy。$ Proxy5.click(未知来源)at   pageObjects.HomePage.ClickLoginLink(HomePage.java:57)at   myaccountsuite.TC1DefaultDeliveryAddDisplay.SetUp(TC1DefaultDeliveryAddDisplay.java:29)

主页页面对象

public class HomePage {

    WebDriver driver;

    public HomePage (WebDriver driver)
    {
        this.driver=driver;         
    }

    @FindBy(id="ctl00_header_hdrCookieWarning_btnHideCookieWarning")
    WebElement btnCookieWarning;

    @FindBy(xpath=".//*@id='ctl00_masterContainerTop_Block_637_LoginView1_ulAnonymous']/li[2]/a")
    WebElement LoginLink;

    public void ClickbtnCookieWarning()
    {
        btnCookieWarning.click();
    }

    public void ClickLoginLink()
    {
        LoginLink.click();
    }
}

登录页面对象

public class login {

    WebDriver driver;

    public login(WebDriver driver)
    {
        this.driver = driver; 
    } 

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_UserName")
    WebElement UserName;

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_Password")
    WebElement Password;

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_LoginButton")
    WebElement btn_LogIn;

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_txtAccount")
    WebElement Account;

    @FindBy(id="ctl00_ContentPlaceHolderMain_container_container_Block_166_lgn1_btnHomeBranch_3")
    WebElement btn_Continue;

    public void userLogin(String uname, String pass, String acc) 
    {
        UserName.sendKeys(uname);
        Password.sendKeys(pass);
        btn_LogIn.click();
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        Account.sendKeys(acc);
        btn_LogIn.click();
        btn_Continue.click();
    }     
}

我的测试

public class TC1DefaultDeliveryAddDisplay {
    public WebDriver driver;

    @BeforeTest(alwaysRun = true)
    public void SetUp() {

        HomePage HomePage = PageFactory.initElements(driver, HomePage.class);
        login loginpage = PageFactory.initElements(driver, login.class);

        driver = new FirefoxDriver();
        driver.get("http://URL/");
        HomePage.ClickbtnCookieWarning();
        HomePage.ClickLoginLink();
        loginpage.userLogin("aa@yahoo.com", "125", "Test");

    }

2 个答案:

答案 0 :(得分:0)

您正在获得NullPointerException因为您在初始化之前使用WebDriver实例。

在使用此实例之前,您需要初始化WebDriver: -

driver = new FirefoxDriver();
HomePage HomePage = PageFactory.initElements(driver, HomePage.class); 
Login loginpage =PageFactory.initElements(driver, login.class);

如果您希望将WebDriver用作singleton,为所有测试方法返回单个实例,则可以follow this answer which is exactly you want

答案 1 :(得分:0)

问题在于每个类都在创建新的驱动程序实例。您只需要在您进行浏览器设置的基类中创建一个驱动程序实例。请参阅页面对象模型。创建Driver实例后,您需要在所有类中使用相同的实例。否则它会抛出NullPointerException,因为驱动程序没有任何引用。

相关问题