2017-07-03 127 views
0

所以,我試圖讓我的測試套件爲多個憑證運行每個測試用例。TestNG @Factory @Dataprovider

因此,我定義了一個數據提供者,它將爲@Factory提供憑據,以針對每個憑證多次運行測試。

我的代碼如下:

package TestSuite.TP_LogOut; 

import org.testng.Reporter; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Factory; 
import org.testng.annotations.AfterTest; 
import org.testng.annotations.Test; 

import Repository.URLs; 
import SeLib.CompareURL; 
import SeLib.LogIn; 
import SeLib.WaitAndClick; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class TC_LogOut{ 

    @BeforeTest 
    public void beforeTest() throws InterruptedException{ 
     Reporter.log("The test has just begun."); 
    } 

    private WebDriver driver; 
    private String username; 
    private String password; 

    @Factory (dataProvider="credentials") 
    public setter(String username, String password){ 
     this.username=username; 
     this.password = password; 
     System.out.println("Credentials "+username+" "+password); 
    } 
    @DataProvider 
    public static Object[][] credentials() { 
     return new Object[][] { {  "id1", "pass1" }, 
            {  "id2", "pass2" } }; 
    } 
    @Test 
    public void TC_LogIn() throws Exception{ 

     // use username, password here: 
     LogIn.Execute(driver, username, password); 
    } 
} 

出於某種原因,@Factory不承認非復原型像,我看到幾個例子,並指出我出來,它應該是一個void類型功能。

是否有任何明顯的解決方案不暗示@Factory創建多個測試用例實例?

如果沒有,返回類型應該如何?

謝謝...

編輯:由於我打電話測試用例裏面的登錄功能,通過將駕駛員的LogIn.Execute方法,我認爲這將是一個偉大的想法只是LogIn來處理運行多個測試用例,然後它會簡化它,而不必在每個測試用例中維護@Factory和@DataProvider。但是這會像一個不正確的編程設置,不是嗎?

+2

@Factory通常適用於類構造函數。但你用方法標記。因此它期望返回類型。如果使用類名稱TC_LogOut更改方法名稱設置器,它可能會起作用。但您需要解決驅動程序對象。我們可以將Factory標記爲方法,但是您需要將返回類型設置爲對象arrary,如object []。 – Murthi

回答

1

最好的解決方法是在即將使用@dataProvider而不@Factory,對於該方法,如:

@DataProvider 
    public static Object[][] credentials() { 
     return new Object[][] { {  "id1", "pass1" }, 
            {  "id2", "pass2" } }; 
    } 
    @Test 
    public void TC_LogIn(String username, String password) throws Exception{