【问题标题】:why getting NullPOinterException when page object is declared at instance level?为什么在实例级别声明页面对象时会出现 NullPOinterException?
【发布时间】:2021-08-01 16:53:57
【问题描述】:
package Repaired_IETestCases;

import org.openqa.selenium.By;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;

import cucumber.TestContext;
import managers.WebDriverManager;
import pageObjects.CartPage;

public class CartPageSteps extends WebDriverManager {

    

    @Test

    public void verifyValLogo() throws Exception {

        CartPage cartPage = PageFactory.initElements(driver, CartPage.class);

        cartPage.verifyLogoPresentOnHomePage();

    }

    @Test

    public void verifyHomePage() throws Exception {

        CartPage cartPage = PageFactory.initElements(driver, CartPage.class);

        cartPage.verifyHomePage();

    }

}

如果我在本地声明“CartPage cartPage = PageFactory.initElements(driver, CartPage.class);”,即在每个方法中声明它可以工作,但如果我在类中全局声明它会给我 NULL 指针异常。

public class CartPageSteps extends WebDriverManager {



        CartPage cartPage = PageFactory.initElements(driver, CartPage.class);

 @Test

    public void verifyValLogo() throws Exception {
}

错误信息:

java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.SearchContext.findElement(org.openqa.selenium.By)" because "this.searchContext" is null
    at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
    at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
    at com.sun.proxy.$Proxy12.isDisplayed(Unknown Source)
    at pageObjects.CartPage.verifyHomePage(CartPage.java:44)
    at Repaired_IETestCases.CartPageSteps.verifyHomePage(CartPageSteps.java:36)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:599)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at java.base/java.lang.Thread.run(Thread.java:832)

【问题讨论】:

    标签: java selenium-webdriver browser-automation


    【解决方案1】:

    我认为对象未初始化,这就是您获得空指针的原因。 试试下面的方法 -

    CartPage cartPage = null;
    
    @Before
    public void initTest(){
       cartPage  = PageFactory.initElements(driver, CartPage.class);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 2016-04-21
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      相关资源
      最近更新 更多