首页 > 解决方案 > 我收到此消息但失败:org.openqa.selenium.support.pagefactory.DefaultElementLocator.find 处的 java.lang.NullPointerException

问题描述

我第一次使用 selenium 创建页面对象模型,在执行下面给出的代码时遇到了以下错误。需要帮助找出我错过了什么......

java.lang.NullPointerException at org.openqa.selenium.support.pagefactory.DefaultElementLocator.find

我的参考代码:

package Pages;

import org.openqa.selenium.*;


public class BaseClass { 

    public static WebDriver driver;
    public static String URL1 = "https://math-dad.com";
    public void setupWebDriver(String drivername)
    {


        if (drivername.equalsIgnoreCase("Chrome"))
        {
            ChromeOptions options = new ChromeOptions();
            options.addArguments("--disable-notifications");
            System.setProperty("webdriver.chrome.driver", "C:\\Drivers\\chromedriver.exe");
            driver =new ChromeDriver(options);           
        }

        else if (drivername.equalsIgnoreCase("Fire Fox"))
        {
            FirefoxOptions options = new FirefoxOptions();
            options.addArguments("--disable-notifications");

            System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
            driver =new FirefoxDriver(options);


        }

    }
    public BaseClass()
    {

        System.out.println("Base Class Initiate");
    }
}

package Pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class HeaderPage extends BaseClass{

    @CacheLookup
    @FindBy(xpath = "//div[@class='navbar-header']")
    public static WebElement LOGO;

   public displayHeader()
    {
     System.out.println(driver.findElement(By.xpath("//div[@class='navbar-header']")).getText());
   }


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

}

public class testHeaderPage extends HeaderPage{

  @BeforeTest
  public void beforeTest() 
  {
    System.out.println("Before Test");
    setupWebDriver("Chrome");
    driver.get(URL1);
    driver.manage().window().maximize();
    driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
   }

 @Test
  public void test1HeaderLOGO() 
{
  displayHeader(); // this is succesful
  String Actual  = LOGO.getText(); // Fails from this statement
      System.out.println("Header LOGO: "+Actual);
      String expected = "Math Dad";
    Assert.assertEquals(Actual, expected, "Invalid Header");
  }

@AfterTest
  public void afterTest() {
    drive.close();
  }


}

在 HeaderPage 类中,我可以直接使用“驱动程序”,但页面工厂元素的声明失败。请问有什么帮助吗?

标签: javaselenium

解决方案


在此方法中使用@BeforeClass注释,以便可以初始化测试驱动程序之前。然后,此方法将在每次测试之前执行。

@BeforeClass 
public void setupWebDriver(String drivername) {
 if (drivername.equalsIgnoreCase("Chrome"))
 {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-notifications");
    System.setProperty("webdriver.chrome.driver", "C:\\Drivers\\chromedriver.exe");
    driver =new ChromeDriver(options);           
 }

else if (drivername.equalsIgnoreCase("Fire Fox"))
 {
    FirefoxOptions options = new FirefoxOptions();
    options.addArguments("--disable-notifications");
    System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
    driver =new FirefoxDriver(options);
 } 
} 

推荐阅读