2017-10-20 77 views
0

我在本@DataProvider定義如下TestNG的@dataProvider傳遞多個類的實例

public class A { 

@BeforeTest 
    @DataProvider(name = "ProvideUsefulClasses") 
    public static Object[][] InitiateUsefulClasses() throws MalformedURLException { 


     PageObjectOne pageObjOne = new PageObjectOne(); 
     AndroidDriver driver=pageObjOne.driver; 
     TouchAction touchAction = new TouchAction(driver); 
     WebDriverWait wait = new WebDriverWait(driver, 20000); 

     return new Object[][] { 

      {touchAction, wait},{driver,pageObjOne} 


     } ; 
    } 
} 

,我在一個不同的類

@Test(dataProvider = "ProvideUsefulClasses",dataProviderClass=A.class) 
class testMethods { 

    public static TouchAction tAction; 
    public static WebDriverWait Wait; 
    public static AndroidDriver Driver; 
    public static PageObjectOne PageObjectOneInst; 

    @Test(priority=1,dataProvider = "ProvideUsefulClasses",dataProviderClass=A.class) 

    public static void AgreeAllow(Object[][] UsefulClasses) throws InterruptedException{ 

     tAction = ((TouchAction) UsefulClasses[0][0]); 
     Wait= ((WebDriverWait) UsefulClasses[0][1]); 

     Driver = ((AndroidDriver) UsefulClasses[1][0]); 

     PageObjectOneInst = ((PageObjectOne) UsefulClasses[1][1]); 
     ... 
     ... 
} 

} 

接收它像這樣但我收到錯誤

FAILED: AgreeAllow 
org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch 
Method: AgreeAllow([Parameter{index=0, type=[[Ljava.lang.Object;, declaredAnnotations=[]}]) 
Arguments: [(io.appium.java_client.TouchAction)[email protected],(org.openqa.selenium.support.ui.WebDriverWait)[email protected]] 
    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments 

看來,從錯誤的角度看,我沒有正確接收或返回數據,w帽子在這裏失蹤?

只有在不能以這種方式完成的情況下,我纔想使用@factory。 我還沒試過用@factory來解決它,我得搜索一下。

ADDITION:我發現this,但它只通過一個類。我們如何爲多個課程做到這一點?

回答

0

當我改變了return語句下面@dataprovider方法

return new Object[][] { 

      { touchAction, wait,driver,pageObjOne} 

     } ; 

我也改變接收器方法的定義

public static void AgreeAllow(TouchAction t,WebDriverWait w,AndroidDriver d,PageObjectOne p) throws InterruptedException{ 

... 
... 

} 
也就是說錯誤消失