2014-12-30 16 views
2

我有一個在類sample.I中初始化的驅動程序對象,我也想將驅動程序對象傳遞給其他類,但是我得到一個空指針異常。我的代碼是將驅動程序對象的單個實例傳遞給所有其他類(Testng框架)

樣品類

public class sample { 

    WebDriver driver ; 


    @Test(priority=1) 

    public void openbrowser(){ 


     System.setProperty("webdriver.chrome.driver", 
       "/home/ss4u/Desktop/Vignesh/jars/chromedriver"); 

     driver = new ChromeDriver(); 

     driver.get("http://www.google.com"); 

     System.out.println(driver instanceof WebDriver); 


    } 
    @Test(priority=2) 
    public void maximize(){ 

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

    } 
    @Test(priority=3) 
    public void transfer_instance(){ 

     sampleone obj=new sampleone(driver); 


    } 

} 

sampleclassone

public class sampleone { 

    WebDriver driver; 

    public sampleone(WebDriver driver){ 

     this.driver=driver; 

     System.out.println(driver instanceof WebDriver); 

     System.out.println(this.driver instanceof WebDriver); 

     System.out.println("constructor2"); 


    } 

    public sampleone(){ 

     System.out.println("Default constructor called"); 


    } 


    @Test(priority=1) 

    public void gettitle(){ 

      System.out.println(this.driver instanceof WebDriver); 

      System.out.println(driver instanceof WebDriver); 

      String title=this.driver.getTitle(); 

      System.out.println(this.driver instanceof WebDriver); 

      System.out.println(title); 

      Assert.assertEquals(title, "Google"); 

     } 

    @Test(priority=2) 

    public void navigate(){ 

     this.driver.get("https:in.yahoo.com"); 

    } 

} 

TestNG的XML文件

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 

<suite name="TestNG" verbose="1" > 

    <test name="sample test"> 
    <classes> 
     <class name="testsample.sample" /> 
    </classes> 
    </test> 

    <test name="sample testone"> 
    <classes> 
     <class name="testsample.sampleone" /> 
    </classes> 
    </test> 

</suite> 

氏當iam調用不使用創建的對象的類時,但是使用testng.xml文件是否有任何可能的方法來創建新的Java實例(對於所有類都是通用的)或使用所有類中的現有實例

+0

你在哪裏創建對象? –

+0

Iam在示例類中的傳輸實例方法中創建對象.. – Vicky

+0

不,我在詢問'driver'實例。你能粘貼你的完整堆棧異常嗎? –

回答

3

I我自己找到了一個解決方案...當我詳細閱讀了關於testng的信息後,發現testng xml文件調用了xml文件中指定的所有類的默認構造函數,即使我們將該對象傳遞給另一個類,我們也無法通過對象發生空指針異常....我發現兩個解決方案,第一個是使用pagefactory,第二個是爲您的測試套件使用通用驅動程序類...因此,我們可以在所有的驅動程序實例中使用相同的驅動程序實例類

Common driver cl屁股

public class Driver { 

    public static WebDriver driver=null; 



    public static WebDriver startdriver(String browser){ 


     if(browser.equalsIgnoreCase("Chrome")){ 

     System.setProperty("webdriver.chrome.driver", "/home/vicky/Documents/Jars/chromedriver"); 

     driver=new ChromeDriver(); 

     }else if(browser.equals("Firefox")){ 

     driver=new FirefoxDriver(); 

     } 
     return driver; 

     } 

    } 
0

這是非常容易使用擴展關鍵字相同的java。 只需要創建一個通用的webdriver類,您將在下面的代碼中使用TestNG註釋的幫助來打開所需的瀏覽器和應用程序url。

webdriver的通用類:

public class Seleniumlinktext { 

    public WebDriver driver; 
    String baseurl = "http://www.google.co.in";  

    @BeforeTest 
    public void openBrowser(){ 

     driver = new FirefoxDriver(); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); 

    } 

另一類:

public class WebDriverTest extends Seleniumlinktext { 

    @Test(priority=1) 
    public void linkText(){ 
     //images hyperlink  
     driver.findElement(By.linkText("Images")).click();  
     System.out.println("Click on Images hyperlink"); 

    } 

喜歡這種方式,您可以通過webdriver的情況下對所有其他clases.Please接受我的回答如果你想它對你很有用,我找到了解決方案HERE

這裏我使用了@BeforeTest註解,因爲我的應用程序url和瀏覽器應該只在打開@Test註釋開始測試用例之前打開一次。

相關問題