【问题标题】:webdriver DataProvider TestNGwebdriver DataProvider TestNG
【发布时间】:2017-02-13 14:42:05
【问题描述】:

全部 我在 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 和 Password 以在另一个测试类中设置,例如参数

@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 }};    
}  

【问题讨论】:

    标签: java selenium webdriver testng


    【解决方案1】:

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

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

    我假设你在这里试图做的是这样的:

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

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

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

    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 见面。第二次,你希望劳拉和莎拉见面。第三次,您希望 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 }};
    }
    

    如果我说的话没有道理,请告诉我:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 2023-03-14
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2015-07-26
      相关资源
      最近更新 更多