2017-01-30 15 views
0

Я пытаюсь использовать метод доступа из двух классов в другом классе, но вызывается только один метод класса. во время вызова другого метода класса он дает ошибку NullpointerException. Пожалуйста, дайте мне решение.Невозможно вызвать метод из нескольких классов в selenium webdriver

Код здесь --->

класса

Настройки ->

package BasePOI; 

import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Setup { 

    public WebDriver driver; 

    public void Websiteopen() { 

     driver = new FirefoxDriver(); 

     driver.manage().window().maximize(); 

     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

     driver.get("url"); 

    } 

    public Setup(WebDriver driver){ 


     this.driver=driver; 

    } 

} 

Войти страницу объект класса --->

package BasePOI; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 

public class LoginPOI { 

    public WebDriver driver; 




     //home 
     By home_login=By.linkText("Login"); 
     By about_us=By.linkText("About Us"); 

     //login 
     By counselor=By.id("counselor_login"); 
     By user=By.id("user_login"); 
     By username=By.id("username"); 
     By password=By.id("password"); 
     By Login=By.name("Login"); 
     By create_account=By.name("Login"); 

     By Logout=By.linkText("Logout"); 


     public LoginPOI(WebDriver driver){ 


      this.driver=driver; 

     } 

     public void click_Login_button(){ 

      try { 

      driver.findElement(home_login).click(); 
      } 
      catch (Exception e) 
      { 
       System.out.println(e); 
      } 

     } 

     public void click_Login_counselor(){ 

      driver.findElement(counselor).click(); 


     } 

     public void click_Login_user(){ 

     driver.findElement(user).click(); 


    } 



     public void Enter_login_data(String uname,String pwd){ 

      driver.findElement(username).clear(); 
      driver.findElement(username).sendKeys(uname); 

      driver.findElement(password).clear(); 
      driver.findElement(password).sendKeys(pwd); 


     } 


     public void click_Login(){ 

      driver.findElement(Login).click(); 


     } 



} 

Теперь я звоню как методы классов в другой класс

Login functionlity class --->

package Functionlity; 

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Test; 

import BasePOI.LoginPOI; 
import BasePOI.Setup; 



public class Login { 



    public WebDriver driver; 



    @Test 
    public void openwebsite() throws InterruptedException{ 



     Setup a= new Setup(driver); 
     a.Websiteopen(); 

     Thread.sleep(10000); 

     LoginPOI b=new LoginPOI(driver); 
     b.click_Login_button(); 

    } 

}

Здесь метод веб-сайт работает, но метод click_Login_button дает мне

errorerror --->

java.lang.NullPointerException

+0

не может вызвать метод из нескольких классов в веб-селене. – Harshal

ответ

0

Ошибка в том, что под классом LoginPOI не инициализирован.Изменение кода в соответствии с ниже и попробовать -

  1. Class Setup

    package BasePOI; 
    import java.util.concurrent.TimeUnit; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.chrome.ChromeDriver; 
    import org.openqa.selenium.firefox.FirefoxDriver; 
    
    public class Setup { 
    
        public static WebDriver driver; 
    
        public void Websiteopen() 
        { 
    
         driver = new FirefoxDriver(); 
         driver.manage().window().maximize(); 
         driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
         driver.get("url"); 
        } 
    
        public Setup(WebDriver driver) 
        { 
    
         this.driver=driver; 
        } 
        public Setup() 
        { 
        } 
        public WebDriver getDriver() 
        { 
         return this.driver; 
        } 
    
    } 
    
  2. Войти POI

    package BasePOI; 
    import org.openqa.selenium.By; 
    import org.openqa.selenium.WebDriver; 
    
    public class LoginPOI 
    { 
        public WebDriver driver; 
    
        //home 
        By home_login=By.linkText("Login"); 
        By about_us=By.linkText("About Us"); 
    
        //login 
        By counselor=By.id("counselor_login"); 
        By user=By.id("user_login"); 
        By username=By.id("username"); 
        By password=By.id("password"); 
        By Login=By.name("Login"); 
        By create_account=By.name("Login"); 
    
        By Logout=By.linkText("Logout"); 
    
    
        public void click_Login_button(){ 
    
         try { 
          this.driver=new Setup().getDriver(); 
         driver.findElement(home_login).click(); 
         } 
         catch (Exception e) 
         { 
          System.out.println(e); 
         } 
    
        } 
        public void click_Login_counselor() 
        { 
         driver.findElement(counselor).click(); 
        } 
        public void click_Login_user() 
        { 
         driver.findElement(user).click(); 
        } 
        public void Enter_login_data(String uname,String pwd) 
        { 
         driver.findElement(username).clear(); 
         driver.findElement(username).sendKeys(uname); 
         driver.findElement(password).clear(); 
         driver.findElement(password).sendKeys(pwd); 
        } 
        public void click_Login() 
        { 
         driver.findElement(Login).click(); 
        } 
    } 
    
  3. Войти Класс

    package Functionlity; 
    
    import java.util.concurrent.TimeUnit; 
    import org.openqa.selenium.By; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.firefox.FirefoxDriver; 
    import org.testng.annotations.BeforeTest; 
    import org.testng.annotations.Test; 
    
    public class Login 
    { 
        public WebDriver driver; 
        @Test 
        public void openwebsite() throws InterruptedException 
        { 
         Setup a= new Setup(driver); 
         a.Websiteopen(); 
         LoginPOI b=new LoginPOI(); 
         b.click_Login_button(); 
    
        } 
    } 
    

Объяснение:

  1. Сначала нужно сделать webderiver статический под классом Setup, чтобы сделать тот же драйвер доступен для различных экземпляров

  2. создать один конструктор по умолчанию в классе настройки и один метод, который вернется драйвер доступа в других классах

  3. this.driver=new Setup().getDriver(); получит (инициализированные экземпляры драйвера в классе установки) в классе LoginPOI

+0

Спасибо narendra. Проблема решена. Я новичок в стеке, поэтому не могу добавить репутацию. – Harshal

+0

@ Харшал, вы можете принять ответ – NarendraR

0

вы не инициализируя объект драйвера в вашем тестовом классе, и именно поэтому он выдает исключение с помощью null-указателя при вызове любой метод webdriver внутри класса страницы.

простое решение было бы изменить свой класс установки и инициализации WebDriver в методе установки

класса Setup

общественного класса Setup {

public Webdriver getDriver() { 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    driver.get("url"); 
} 

public Setup(WebDriver driver){ 
    this.driver=driver; 
}} 

испытаний Класс

public class Login {

public WebDriver driver; 

@BeforeMethod 
public void setup() { 
     driver = new FirefoxDriver(); 
} 

@Test 
public void openwebsite() throws InterruptedException{ 
    Setup a = new Setup(driver); 
    a.Websiteopen(); 
    LoginPOI b=new LoginPOI(driver); 
    b.click_Login_button(); 

}} 
+0

Спасибо, код isworking – Harshal

 Смежные вопросы

  • Нет связанных вопросов^_^