#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, я получаю сообщение об ошибке «Не удается получить строковое значение из ЧИСЛОВОЙ ячейки». Как я могу изменить приведенный выше код, чтобы справиться с этим?