Получение исключения нулевого указателя при использовании фабрики страниц для инициализации веб-элементов

Веб-элементы не инициализируются.

код приведен ниже:

Домашняя страница.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();
    }

}

Домашняя страницаTest.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();
    }

}

Ошибка, которую я получаю:

FAILED: clickonloginlink 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(неизвестный источник) на crossword.pages.HomePage.clickonLogin(HomePage.java:25) на testcases.HomePageTest.clickonloginlink(HomePageTest.java:35) на sun.reflect. NativeMethodAccessorImpl.invoke0 (собственный метод) в 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)


person user1690973    schedule 13.06.2020    source источник


Ответы (1)


Когда мы используем шаблон проектирования PageFactory, мы должны инициализировать каждую страницу методом фабрики страниц. Здесь вы должны получить исключение с нулевой точкой, когда вы инициализируете как HomePage homepage = new HomePage();

Вы должны инициализировать как HomePage homePage;

homePage=PageFactory.initElements(драйвер веб-драйвера,HomePage.class); в файле HomePageTest.java.

Удалите = new HomePage(); в своем коде.

person Justin Lambert    schedule 15.06.2020
comment
homePage = PageFactory.initElements (драйвер, HomePage.class); - person Justin Lambert; 15.06.2020
comment
Это совершенно неправильно. Оба метода допустимы либо при инициализации элементов в конструкторе и передаче объекта, либо при передаче класса и предоставлении PageFactory возможности создать экземпляр класса. Проблема здесь в том, что OP передает null драйвер методу initElements - person Fenio; 16.06.2020