【问题标题】:Getting null pointer exception while using page factory to intialize webelements使用页面工厂初始化 web 元素时出现空指针异常
【发布时间】:2020-06-13 16:31:49
【问题描述】:

webelements 没有被初始化。

代码如下:

HomePage.java

package crossword.pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

import base.TestBase;

public class HomePage extends TestBase{

    @FindBy(xpath = "//title")
    WebElement homepageTitle;

    @FindBy(xpath = "//div[@class=\"top-links\"]//a[text()='Login']")
    WebElement loginLink;

    public HomePage() {
        PageFactory.initElements(driver, this);
    }

    public String gethomepagetitle() {
        return homepageTitle.getAttribute("title");
    }

    public void clickonLogin() {
        loginLink.click();
    }

}

HomePageTest.java

package testcases;

import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import base.TestBase;
import crossword.pages.HomePage;

public class HomePageTest extends TestBase {

    public HomePageTest() {
        super();
    }

    HomePage homepage = new HomePage();

    @BeforeMethod
    public void setUp() {
        TestBase.initialization();
    }

    @Test
    public void homepagetitletest() {
        System.out.print(homepage);
        String actualTitle = homepage.gethomepagetitle();
        String expectedTitle = "Books - Crossword - Crossword";
        Assert.assertEquals(actualTitle, expectedTitle);
    }

    @Test
    public void clickonloginlink() {

        homepage.clickonLogin();

    }

    @AfterMethod
    public void exit() {
        teardown();
    }

}

我得到的错误是:

失败:点击登录链接 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.$Proxy9.click(未知来源) 在填字游戏.pages.HomePage.clickonLogin(HomePage.java:25) 在 testcases.HomePageTest.clickonloginlink(HomePageTest.java:35) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:135) 在 org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598) 在 org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)

【问题讨论】:

    标签: selenium-webdriver page-factory


    【解决方案1】:

    我们在做PageFactory设计模式的时候应该通过页面工厂方法来初始化每个页面。这里你应该初始化为HomePage homepage = new HomePage();

    你应该初始化为 主页主页;

    homePage=PageFactory.initElements(Webdriver driver,HomePage.class); 在您的 HomePageTest.java 中

    请在您的代码中删除 = new HomePage();

    【讨论】:

    • homePage=PageFactory.initElements(driver,HomePage.class);
    • 这完全不正确。这两种方法都是有效的,要么通过在构造函数中初始化元素并传递对象,要么传递类并让 PageFactory 创建类的实例。这里的问题是OP将null驱动程序传递给initElements方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多