[英]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.