Передача значения Excel в несколько методов одного класса - PullRequest
0 голосов
/ 09 июля 2020

Я использую селен и Java для создания моих автоматических скриптов. Мне нужна одна помощь от всех вас.

У меня есть Excel, который содержит 5 столбцов - скажем, имена Col1, Col2, Col3, Col4, Col5.

У меня есть класс.

public class testone{

    @Test(Dataprovider="test")
      public void methodone(String Col1) {
      }

    @Test(Dataprovider="test")
      public void methodtwo(String Col2, String Col3){
    }

    @Test(Dataprovider="test")
     public void methodthree(String Col4, String Col5){
    }

    @DataProvider(name="test")
       public Object[][] getData() {

        String sheetName = "headercomptests";
        int rows = excel.getRowCount(sheetName);
        int cols = excel.getColumnCount(sheetName);
        Object[][] data = new Object[rows - 1][cols];
        for (int rowNum = 2; rowNum <= rows; rowNum++) { 
                for (int colNum = 0; colNum < cols; colNum++) {
                                data[rowNum - 2][colNum] = excel.getCellData(sheetName, colNum,    rowNum);     }       }
       return data; } //end of dataprovider class 

На данный момент он выдает ошибку во всех методах, поскольку количество столбцов не соответствует аргументам. Как я могу получить его, как уже упоминалось.

Если количество параметров соответствует столбцам Excel, это работает.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы можете использовать HashMap в своих @DataProvider и @Test методах.

  1. Обновите DataProvider, чтобы вернуть HashMap

    @DataProvider(name="test")
    public Object[][] getData() {    
    Object[][] data = new Object[rows - 1][cols];
    
     for (int rowNum = 2; rowNum <= rows; rowNum++) 
     { 
       // Create Hashmap after every row iteration
       HashMap<Object, Object> testData = new HashMap<Object, Object>();
       for (int colNum = 0; colNum < cols; colNum++) 
       {
        //Assuming excel sheet has Col1 , Col2 , Col3 , Col4, Col5 as name in 1st row
         testData.put(excel.getCellData(sheetName, colNum, 0),excel.getCellData(sheetName, colNum, rowNum));     
       }
       // Add every row in hashmap
       data[r][0] = testData;   
     }
     return data; 
    }
    

Пожалуйста, обновите приведенный выше код в соответствии с таблицей Excel для правильного сопоставления с HashMap

Обновите все @Test методы, передав HashMap в качестве параметра, а затем внутри каждого @Test метода, значения столбца извлекаются согласно требованиям:

@Test(Dataprovider="test")
public void methodone(Map<Object, Object> testData) {
 //Get value of column 'col1' from testData HashMap
 String Col1 = (String)testData.get("Col1");
}
0 голосов
/ 09 июля 2020

Не усложняйте свой код чрезмерно. Поскольку вашим тестам требуются разные данные, используйте два разных поставщиков данных. По одному на каждый метод тестирования. Каждый поставщик данных предоставит свой собственный набор столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...