'Getting null pointer while declaring WebElementFacade in pageobject class

I was trying to implement page object model in serenity BDD, when I declared WebelementFacade in pageobject then I got nullpointer

Here is my pageobject class

package PageObjects;

import net.serenitybdd.core.annotations.findby.FindBy;
import net.serenitybdd.core.pages.WebElementFacade;
import net.thucydides.core.pages.PageObject;

public class LoginPage extends PageObject {

    @FindBy(css ="#search_query_top") public WebElementFacade searchField;

    public void login() {

        open();
        searchField.typeAndEnter("Blouse");
    }
}

Here is my step file

public class Loginsteps {

    LoginPage loginPage=new LoginPage();

    @Step
    public void DoLogin(){
        loginPage.login();
    }
}

Here is my test class

@RunWith(SerenityRunner.class)
public class LoginTest {

    @Steps
    Loginsteps loginsteps;

    @Title("Executing login test")
    @Test
    public void DoLoginTest(){
        loginsteps.DoLogin();
    }
}

The console log is as follows:-

DoLoginTest
--------------------------------------------------------------------------------
[main] INFO net.serenitybdd.core.webdriver.driverproviders.ChromeDriverProvider - Using automatically driver download
[main] INFO io.github.bonigarcia.wdm.WebDriverManager - Using chromedriver 91.0.4472.101 (resolved driver for Chrome 91)
[main] INFO io.github.bonigarcia.wdm.WebDriverManager - Exporting webdriver.chrome.driver as /Users/keshavmac/.cache/selenium/chromedriver/mac64/91.0.4472.101/chromedriver
[main] INFO net.serenitybdd.core.webdriver.driverproviders.ProvideNewDriver - Instantiating driver
[main] INFO net.serenitybdd.core.webdriver.driverproviders.ProvideNewDriver - Driver capabilities: Capabilities {acceptInsecureCerts: false, browserName: chrome, goog:chromeOptions: {args: [], extensions: []}, loggingPrefs: org.openqa.selenium.logging...}
Starting ChromeDriver 91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462}) on port 18207
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Jun 26, 2021 8:30:06 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C

java.lang.NullPointerException
    at PageObjects.LoginPage.login(LoginPage.java:14)
    at Steps.Loginsteps.DoLogin(Loginsteps.java:12)
    at testcases.LoginTest.DoLoginTest(LoginTest.java:19)

[main] ERROR  - 
  _____   ___   ___   _____     ___   ___   ___    ___    ___ 
 |_   _| | __| / __| |_   _|   | __| | _ \ | _ \  / _ \  | _ \
   | |   | _|  \__ \   | |     | _|  |   / |   / | (_) | |   /
   |_|   |___| |___/   |_|     |___| |_|_\ |_|_\  \___/  |_|_\

Executing login test
---------------------------------------------------------------
[main] ERROR  -     Test failed at step: Do login
[main] ERROR  -     
[pool-1-thread-1] INFO net.thucydides.core.reports.ReportService - net.thucydides.core.reports.json.JSONTestOutcomeReporter@30b131b2: Generating report for test outcome: Login test:DoLoginTest
[pool-2-thread-1] INFO net.thucydides.core.reports.ReportService - net.thucydides.core.reports.html.HtmlAcceptanceTestReporter@38b8b6c0: Generating report for test outcome: Login test:DoLoginTest

Please help me out and try to identify the root cause of this nullpointer



Solution 1:[1]

This could be caused by a lot of things. My best guess would be to add Page Factory to your LoginPage. You can not use POM without Page Factory. Page factory example from one of my projects (I have changed class name to suit your purpose):

public LoginPage() {
        PageFactory.initElements(Driver.instance() , this);
    }

I am not a 100% sure this syntax is suitable for serenity projects, but try it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Dharman