у меня есть chrome объект драйвера, тогда я получил java .lang.NullPointerException - PullRequest
0 голосов
/ 10 марта 2020

я изучаю TestNG, поэтому я создал один базовый класс, в котором у меня есть объект создания для chrome браузера.

это мой базовый класс

public class BaseClass {

    public String url="https://dofdev-services.azurewebsites.net/";
    public String username1="info@gravityconsulting.com.au";
    public String password1="Gravity@123";
    public  WebDriver driver;

    @BeforeClass
    public void setUp() 
    {
        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir" +"/Drivers/chromedriver.exe"));
        driver=new ChromeDriver();
    }

    @AfterClass()
    public void tearDown() 
    {
        driver.quit();
    }
}

это мой тест case class

public class TC_LoginPage_001 extends BaseClass{

      @Test
      public  void loginTestCase()
      {
    driver.get(url);
    LoginPagePOM lp=new LoginPagePOM(driver);
    lp.setUserName(username1);
    lp.setPassword(password1);
    lp.clickSignIn();

    if(driver.getTitle().equalsIgnoreCase(""))
    {

        Assert.assertTrue(true);
    }else {
        Assert.assertTrue(false);
    }
}

это мой другой класс, здесь я создал конструктор (класс pom)

 public class LoginPagePOM {

 WebDriver driver;

 public LoginPagePOM(WebDriver driver)
  {
    this.driver=driver;
    PageFactory.initElements(driver, this);
      }
    @FindBy(id="userName")
    WebElement username;

    @FindBy(name ="passwords")
     WebElement password;

    @FindBy(name="btn-sdz-login")
     WebElement click;


    public void setUserName(String usname)
          {
      username.sendKeys(usname);
               }

   public void setPassword(String Pass) 
             {
         password.sendKeys(Pass);
     }

     public void clickSignIn()
       {
       click.click();
       }
               }    

это трассировка стека исключений (получение исключения нулевого указателя)

exception stack trace

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

У вас есть драйвер в вашем BaseClass, а затем вы снова создаете драйвер в классе LoginPagePOM, благодаря которому вы получаете NPE.
Чтобы решить эту проблему, у вас есть драйвер static а затем используйте этот единственный драйвер во всех классах, где он вам нужен. Вам не нужно инициализировать его снова.
Вы можете использовать public static WebDriver driver; в вашем BaseClass, а затем вы можете использовать BaseClass.driver во всех ваших классах, где вам это нужно.

Ваш TC_LoginPage_001 будет выглядеть так:

public class TC_LoginPage_001 extends BaseClass{

  @Test
  public  void loginTestCase()
  {
BaseClass.driver.get(url);
LoginPagePOM lp=new LoginPagePOM(driver);
lp.setUserName(username1);
lp.setPassword(password1);
lp.clickSignIn();

if(BaseClass.driver.getTitle().equalsIgnoreCase(""))
{

    Assert.assertTrue(true);
}else {
    Assert.assertTrue(false);
     }
}

А ваш LoginPagePOM будет выглядеть так:

public class LoginPagePOM {

 public LoginPagePOM()
  {
    PageFactory.initElements(BaseClass.driver, this);
  }
@FindBy(id="userName")
WebElement username;

@FindBy(name ="passwords")
 WebElement password;

@FindBy(name="btn-sdz-login")
 WebElement click;


public void setUserName(String usname)
      {
  username.sendKeys(usname);
           }

   public void setPassword(String Pass) 
         {
     password.sendKeys(Pass);
 }

 public void clickSignIn()
   {
   click.click();
   }
       }    
0 голосов
/ 10 марта 2020

Убедитесь, что ваш конструктор имеет объект драйвера, переданный на странице входа. Вам нужно передать драйвер всем классам страниц. Также страница входа не расширяла базовый класс. Вы должны расширить, как показано ниже, а также удалить экземпляр веб-драйвера на странице входа.

Пример:

 public class LoginPagePOM extends BaseClass {
    public LoginPagePOM (WebDriver driver) 
        {
            this.driver=driver;

        }

    public void setUserName(){
     ........
     }

    public void setPassword(){
      ........
     }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...