首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webdriver DataProvider TestNG

webdriver DataProvider TestNG
EN

Stack Overflow用户
提问于 2017-02-09 22:01:21
回答 1查看 167关注 0票数 0

所有我在TestNG中的代码都有问题。需要对方法的参数进行注释。

1)生成随机刺

代码语言:javascript
复制
     public String RandomName(){ 

     ArrayList<String> alphaNum = new ArrayList<String>();

       for (char i = 'A';i<= 'Z';i++){
           String s = new String();
           s +=i;
           alphaNum.add(s);

     }      

       for (char i = 'a';i<= 'z';i++){
           String s = new String();
           s +=i;
           alphaNum.add(s);

     }

       String[] RandomEnteredField = new String[10];
       for (int i = 0; i < RandomEnteredField.length; i++) {
           RandomEnteredField[i] = alphaNum.get((int)(Math.random()*alphaNum.size()));

     }

       String result = "";
       for(int i = 0; i < RandomEnteredField.length; i++)
       {
           result += RandomEnteredField[i];
       }
       System.out.println(result);
       return result;
      }

2)在test类中,我将其保存为全局字符串

代码语言:javascript
复制
@Test(priority =0)
public void CreateAcount() throws Exception {
    objFifthIssue = new TheFifthIssue(driver);          
    objFifthIssue.ClickOnMyAccount();       
    String rn = objFifthIssue.RandomName(); // add new argument to EnterRegistrationForm and also 2 below
    EmailRandom = objFifthIssue.RandomName();
    Password = objFifthIssue.RandomName();
    objFifthIssue.EnterRegistrationForm(rn,EmailRandom,Password);
    objFifthIssue.VerifyRegistrationDone();     
}

3)我希望将保存的EmailRandom和密码设置在另一个测试类中,如参数

代码语言:javascript
复制
@Test(priority =2, dataProvider="LogInOUt")
public void LogoutLogIN(String EmailRandom, String Password) throws Exception {
    System.out.println(EmailRandom + Password);
    objSixIssue = new SixIssue(driver); 
    objSixIssue.LogoutLogIN(EmailRandom,Password);      
}

4)在DataProvider中,我尝试

代码语言:javascript
复制
@DataProvider(name = "LogInOUt")
 public static Object[][] Generation() {    
    return new Object[] { { EmailRandom }, { Password }};    
}  
EN

回答 1

Stack Overflow用户

发布于 2017-02-11 06:15:26

您的Dataprovider中有一个有趣的返回值:

代码语言:javascript
复制
public static Object[][] Generation() {    
  return new Object[] { { EmailRandom }, { Password }};    
}

我假设您在这里要做的是:

代码语言:javascript
复制
public static Object[][] Generation() {    
  return new Object[][] { { EmailRandom }, { Password }};    
}

现在它实际上返回了正确的数据类型。但是,这不是使用Selenium DataProviders的正确方式。(上面的代码不能工作了)

如您所知,DataProviders是二维数组。这就是你是怎么做的:

代码语言:javascript
复制
Array 1: {argument 1}
Array 2: {argument 2}

这就是它的工作原理:

代码语言:javascript
复制
Array 1: {argument 1, argument 2}
Array 2: {argument 1, argument 2}

该数组的第一维在每次运行该方法时迭代。它是二维的,所以你可以一遍又一遍地用相同的方法运行不同的参数集。这有意义吗?

示例:您希望运行meet(Person, Person)方法三次。第一次运行它时,您希望Bob和John见面。第二次,你想让劳拉和莎拉见面。第三次,你想让鲍勃和莎拉见面。您将在meet()方法上使用此DataProvider:

代码语言:javascript
复制
public static Object[][] provider() {
  return new Object[][] {
    {Bob, John},
    {Laura, Sarah},
    {Bob, Sarah}
  };
}

明白了吗?

所以现在,如果我们看一下你的代码,你似乎只想用DataProvider来传递一组参数。因为它必须是一个二维数组,所以我们可以把所有的参数放在第一个数组中。如下所示:

代码语言:javascript
复制
@DataProvider(name = "LogInOUt")
public static Object[][] Generation() {
  return new Object[][] {{ EmailRandom, Password }};
}

如果我说的任何话没有意义,请告诉我:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42138703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档