简体   繁体   English

testng @dataprovider传递多个类实例

[英]testng @dataprovider passing multiple class instances

I have this @DataProvider defined like this 我有这样定义的@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}


      }  ;
  }
}

and I am receiving it like this in a different class 我在另一个班级收到这样的信

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

}

But I receive an error 但是我收到一个错误

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)io.appium.java_client.TouchAction@29c5ee1d,(org.openqa.selenium.support.ui.WebDriverWait)org.openqa.selenium.support.ui.WebDriverWait@15cea7b0]
    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments

It seems,by the look of error, I am not receiving or returning data properly , whats missing here? 看起来,从错误的角度看,我没有正确接收或返回数据,这里缺少什么?

I want to use @factory only if it can not be done this way. 我只想使用无法通过@factory进行的操作。 I haven't tried resolving it using @factory , I'll have to search. 我没有尝试使用@factory解决它,我必须进行搜索。

ADDITION: I found this but its only passing one class. 补充:我发现了这一点,但它只是唯一通过的一堂课。 How do we do it for multiple classes? 我们如何针对多个班级?

That error is gone when I change the return statement to below in @dataprovider method 当我在@dataprovider方法中将return语句更改为以下内容时,该错误消失了

return new Object[][] {

          { touchAction, wait,driver,pageObjOne}

      }  ;

I also change the definition of receiver method as 我也将接收方方法的定义更改为

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

...
...

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM