Получение значений из хэш-карты в другом классе

#java #selenium #hashmap

#java #selenium #hashmap

Вопрос:

Я написал фрагмент кода, чтобы поместить локаторы, которые будут использоваться в моем selenium scipt, в hashmap, также написал там entryset для получения значений с карты.

 public class ReadDatafromExcel {

    @Test
    public void putIntoHashmap() throws IOException     
    {

        FileInputStream inputStream = new FileInputStream("/home/suvin/Documents/SeleniumWebdriver/Script/PaytmAutomationFramework/src/testUtilities/TestData.xlsx");

            XSSFWorkbook workbook= new XSSFWorkbook(inputStream);

            XSSFSheet firstSheet = workbook.getSheetAt(0);
            Iterator<Row> rowiterator = firstSheet.iterator();

            HashMap<String,String> map= new HashMap<String, String>();
            String key= null;
            String value= null;

            while (rowiterator.hasNext()) {
                Row nextRow = rowiterator.next();

                Iterator<Cell> cellIterator = nextRow.cellIterator();
                int i;  
                for (i=0;i<=1;i  )
                {
                    Cell cell = cellIterator.next();

                    if(i==0)
                    { 
                        key =cell.getStringCellValue();
                    }
                    if(i==1)
                    {
                        value=cell.getStringCellValue();
                        break;
                    }

                }
                map.put(key, value);    
            }

           // String Retrieved_value= map.get("Test11");
          //  System.out.println(Retrieved_value);

            Set set= (Set)map.entrySet();
            Iterator itr= set.iterator();
            while(itr.hasNext())
            {
                Map.Entry entry= (Entry)itr.next();    
                System.out.println(entry.getKey() ":" entry.getValue());

            }

        }
}
 

Теперь я хочу использовать этот hasmap в другом классе. Я создал объект rd класса ReadDatafromExcel, подобный этому, в новом классе

 public class ccTransactions {

    public ReadDatafromExcel rd = new ReadDatafromExcel();
 

}

Я хочу использовать значения hasmap, созданные в ReadDatafromExcel в этом классе . Как я могу это сделать?

что-то вроде

 driver.findelement(By.Xpath(USE VALUE FROM HASHMAP)).sendkeys();
 

Ответ №1:

измените значение map на поле класса ReadDatafromExcel like private HashMap<String,String> map= new HashMap<String, String>(); и удалите его из метода putIntoHashmap() , затем добавьте другой метод

 public String getValue(String key){
return map.get(key);
}
 

затем вы можете использовать его как rd.get(key);

Комментарии:

1. Привет, спасибо за ваш ответ. Это действительно помогает. Однако теперь, когда я ввожу числовое значение для чтения из Excel, я получаю сообщение об ошибке «Не удается получить строковое значение из ЧИСЛОВОЙ ячейки». Как я могу изменить приведенный выше код, чтобы справиться с этим?

2. Затем используйте NextRow.getCell(0).getNumericCellValue(); вместо NextRow.getCell(0).getStringCellValue();

Ответ №2:

Измените свой метод следующим образом:

    public Map<String, String> putIntoHashmap(String filePath) throws IOException 

    {

            FileInputStream inputStream = new FileInputStream(filePath);

            XSSFWorkbook workbook= new XSSFWorkbook(inputStream);

            XSSFSheet firstSheet = workbook.getSheetAt(0);
            Iterator<Row> rowiterator = firstSheet.iterator();

            HashMap<String,String> map= new HashMap<String, String>();
            String key= null;
            String value= null;

            while (rowiterator.hasNext()) {
                Row nextRow = rowiterator.next();

                Iterator<Cell> cellIterator = nextRow.cellIterator();

                key = nextRow.getCell(0).getStringCellValue();
                value = nextRow.getCell(1).getStringCellValue();

                map.put(key, value);    
            }

         return map;
    }
 

Теперь вызовите метод после создания объекта вашего класса, например:

 ReadDatafromExcel rd = new ReadDatafromExcel();
Map<String, String> data = rd.putIntoHashmap("Path to your excel file");
 

А затем используйте данные из ваших методов тестирования:

 driver.findelement(By.Xpath(data.get("**your desired key**"))).sendkeys();
 

Комментарии:

1. Привет, спасибо за ваш ответ. Это действительно помогает. Однако теперь, когда я ввожу числовое значение для чтения из Excel, я получаю сообщение об ошибке «Не удается получить строковое значение из ЧИСЛОВОЙ ячейки». Как я могу изменить приведенный выше код, чтобы справиться с этим?