Я получил это сообщение и не смог: java .lang.NullPointerException at org.openqa.selenium.support.pagefactory.DefaultElementLocator.find - PullRequest
1 голос
/ 27 апреля 2020

Я впервые создаю объектную модель страницы, используя селен, и я столкнулся с приведенной ниже ошибкой при выполнении кода, приведенного ниже. Нужна помощь в выяснении того, что мне не хватает ...

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 Classs я могу использовать «драйвер» напрямую, но объявление элемента Page Factory не выполнено. Любая помощь в этом, пожалуйста?

1 Ответ

0 голосов
/ 27 апреля 2020

Используйте аннотацию @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);
 } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...