2017-10-20 11 views
0

Je possède ce @DataProvider défini comme celui-citestng @dataprovider passer plusieurs instances de classe

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} 


     } ; 
    } 
} 

et je reçois comme ça dans une autre classe

@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]); 
     ... 
     ... 
} 

} 

Mais je reçois une erreur

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 

Il semble, par l'apparence de l'erreur, je ne reçois pas ou ne retourne pas les données correctement, w chapeaux manquant ici?

Je souhaite utiliser @factory uniquement si cela n'est pas possible. Je n'ai pas essayé de le résoudre en utilisant @factory, je vais devoir chercher.

ADDITION: J'ai trouvé this mais c'est seulement en passant une classe. Comment le faisons-nous pour plusieurs classes?

Répondre

0

Cette erreur est parti quand je change la déclaration return ci-après dans @dataprovider méthode

return new Object[][] { 

      { touchAction, wait,driver,pageObjOne} 

     } ; 

Je change également la définition de la méthode de récepteur

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

... 
... 

}