В настоящее время я использую openCsv для анализа моего test.csv и использую данные, извлеченные для проверки assert в selemium/junit.junit/selenium - Анализ из csv (opencsv), чтобы проверить значение
Данные в моей CSV,
1
2
3~
~ мой разделителем
Я хочу, чтобы сравнить данные в моей CSV с моим селеном .getText()
, однако, я не могу получить openCsv читать 1, 2 и 3 и разрываться на ~, он всегда будет сравнивать 1 (Csv) и .getText()
с 1,2 и 3 и вызывать сбои.
После некоторого лужения и помощника от друга, я, наконец, получил его на работу, однако код довольно грязный
Моя текущая работа в коде прогресса выглядит так,
CSVReader reader = new CSVReader(new FileReader("C:\\Users\\Johan\\Desktop\\limit.csv"),'~');
List<String[]> limit = reader.readAll();
WebElement table1 = driver.findElement(By.xpath("//html/body/div[1]/div[4]/div[2]/div[2]/div[1]/table[2]"));
List<WebElement> rows1 = table1.findElements(By.tagName("tr"));
for (int i=0; rows1.size()>i; i++)
{
String compare = "";
for(int j=0;j<limit.size();j++){
String[]temp = limit.get(j);
compare+=temp[0]+"\n";
}
assertEquals(compare,rows1.get(i).getText());
}
Есть более простой способ сделать это?
Update - оптимизированная версия
CSVReader reader = new CSVReader(new FileReader("C:\\Users\\Johan\\Desktop\\limit.csv"),'~');
String [] limit;
WebElement table1 = driver.findElement(By.xpath("//html/body/div[1]/div[4]/div[2]/div[2]/div[1]/table[2]"));
List<WebElement> rows1 = table1.findElements(By.tagName("tr"));
int k = 0;
while((limit=reader.readNext())!=null){
for(int j=0; limit.length>j; j++){
String expectedValue = limit[j];
String rows11[] =rows1.get(0).getText().split("\\r?\\n");
String actualValue = rows11[k];
assertSoft(actualValue,expectedValue);
k++;
}
}
//soft assert method
private void assertSoft(String a, String b){
try{
assertEquals(a, b);
}catch (ComparisonFailure e){
logger.info("Error : \nActual = "+a+"\nExpected = "+b);
}
}
добавил.split, чтобы сломать .getText, чтобы соответствовать моему считывателю csv Может ли оно быть упрощено? – user2853922