webdriver DataProvider TestNG

时间:2017-02-09 14:01:21

标签: java selenium webdriver testng

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

1)生成随机叮咬

     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(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和密码设置在另一个测试类中,如参数

@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中,我尝试

@DataProvider(name = "LogInOUt")
 public static Object[][] Generation() {    
    return new Object[] { { EmailRandom }, { Password }};    
}  

1 个答案:

答案 0 :(得分:0)

您的Dataprovider中有一个有趣的回报:

public static Object[][] Generation() {    
  return new Object[] { { EmailRandom }, { Password }};    
}

我认为你尝试在这里做的是:

public static Object[][] Generation() {    
  return new Object[][] { { EmailRandom }, { Password }};    
}

现在它实际上正在返回正确的数据类型。 然而,这不是使用Selenium DataProviders的正确方法。 (上述代码不起作用

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

Array 1: {argument 1}
Array 2: {argument 2}

这就是它应该如何运作:

Array 1: {argument 1, argument 2}
Array 2: {argument 1, argument 2}

每次运行方法时,数组的第一个维度都会迭代。它是二维的,因此您可以反复使用相同的方法运行不同的参数集。这有意义吗?

示例:您希望运行方法meet(Person, Person)三次。第一次运行它时,你希望Bob和John见面。第二次,你想让Laura和Sarah见面。第三次,你想让Bob和Sarah见面。您可以在meet()方法上使用此DataProvider:

public static Object[][] provider() {
  return new Object[][] {
    {Bob, John},
    {Laura, Sarah},
    {Bob, Sarah}
  };
}

得到它?

现在,如果我们查看您的代码,您似乎只是尝试使用DataProvider传递一组参数。但是,由于它必须是一个二维数组,我们可以将所有参数放在第一个数组中。像这样:

@DataProvider(name = "LogInOUt")
public static Object[][] Generation() {
  return new Object[][] {{ EmailRandom, Password }};
}

如果我说的话没有意义,请告诉我。)