2017-01-30 5 views
0

Ich versuche Access-Methode aus zwei Klassen in einer anderen Klasse, aber nur eine Klassenmethode aufgerufen wird. Während des Aufrufs einer anderen Klassenmethode gibt es einen NullpointerException-Fehler. Bitte gib mir eine Lösung.Kann Methode aus mehreren Klassen in Selen nicht aufrufen webdriver

-Code ist hier --->

Setup-Klasse ->

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; 

    } 

} 

Login-Seite Objektklasse --->

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(); 


     } 



} 

Jetzt nenne ich beide Verfahren Klassen in eine andere Klasse

Login-FunktionLastklasse --->

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(); 

    } 

}

Hier Webseite Verfahren läuft, aber click_Login_button Methode gibt mir

errorerror --->

java.lang.NullPointerException

+0

kann nicht Methode aus mehreren Klassen in Selen-Webdriver aufrufen. – Harshal

Antwort

0

Der Fehler ist, weil die driver unter LoginPOI Klasse nicht initialisiert wird.Ändern Sie den Code nach unten und versuchen -

  1. Setup-Klasse

    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. Anmeldung 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. Anmeldung Klasse

    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(); 
    
        } 
    } 
    

Erläuterung:

  1. Zuerst müssen unter Setup-Klasse statisch machen webderiver zu gleichen Treiber zugänglich zu verschiedenen Instanzen

  2. erstellen ein Standard-Konstruktor in Setup-Klasse und eine Methode zu machen, die Treiber für den Zugriff zurückzukehren in anderen Klassen

  3. this.driver=new Setup().getDriver(); wird den Treiber (initialisierte Treiberinstanzen in Setup-Klasse) Treiber in LoginPOI-Klasse

+0

Danke Narendra. Das Problem ist gelöst. Ich bin neu auf dem Stack, kann also keinen Ruf hinzufügen. – Harshal

+0

@Harshal, Sie können die Antwort akzeptieren – NarendraR

0

Sie sind nicht Initialisieren des Treiberobjekts in Ihrer Testklasse und deshalb löst es beim Aufruf eine Nullzeigerausnahme aus irgendeine Webdriver-Methode innerhalb der Page-Klasse.

Die einfache Lösung wäre, um Ihre Setup-Klasse zu ändern und die WebDriver in Setup-Methode

Setup-Klasse

public class-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; 
}} 

Testklasse

initialisieren

öffentliche Klasse 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

Danke code isworking – Harshal

Verwandte Themen