2015-07-13 19 views
1

目前我必須在@Before方法的每個類中創建WebDriver實例。我想知道如何才能創建WebDriver一次,並在不同的測試中使用它(testng.xml文件中的<test>標記)。TestNG中的WebDriver實例共享<test>

+0

如果你想讓多個測試並行運行,你不能高效地使用webdriver的單個實例。如果順序執行你可以使用下面的答案。 – Shamik

回答

0

有許多方式可以做到這一點。一是方法是創建一個共同的驅動程序類

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; 

     } 

    } 

在你面前的套房方法初始化驅動

@BeforeSuite 
    public static void Openbrowser() { 

     Driver.startdriver("Firefox"); 

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

    } 

//use the driver instance 

    @Test 

     public void goto(){ 

     //Accessing the driver static variable by using classname.variable(Driver.driver) 

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

} 

希望這可以幫助您...請回來,如果你需要任何進一步的幫助

+0

靜態會導致相同的實例在所有測試標籤內。對於所有測試標籤,BeforeSuite會導致相同的驅動程序實例。如果他有多個測試標籤,以上都不會起作用。 –

+0

@niharika_neo感謝downvote.For你的信息,這將完美地適用於多個測試標籤,因爲我們在我們的套件方法中初始化驅動類,然後對所有測試方法使用相同的驅動實例,我在一些測試方法中使用了這種方法我的項目工作得很好 – Vicky

+0

@Vikcky當測試的並行執行將成立時,你的代碼不會工作,在testng.xml中有多個測試。 它必須是一個實例變量。 Niharika是對的。 – Shamik

0

你可以有一個threadlocal webdriver實例在ITestListener's實例化onSta rt方法,您可以在您的測試方法中使用它。在完成方法中退出。這將在測試標籤中的所有類中的所有方法之間共享驅動程序實例,併爲所有測試標籤創建新的驅動程序實例。

確保您的並行設置爲測試或假。