junit/selenium - разбор из csv(opencsv) для проверки значения
В настоящее время я использую openCsv для анализа моего test.csv и использую извлеченные данные для проверки утверждений в selemium/junit.
Данные в моем 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());
}
Есть ли более простой способ сделать это?
Обновление - оптимизированная версия
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);
}
}
1 ответ
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++) {
List<WebElement> dataElements = rows1.findElements(By.tagName("td"));
for (int j=0;j<dataElements.size();j++) {
String actualValue = dataElements.get(j);
String expectedValue = limit.get(i).[j]; // I suppose this will return you a single number
assertEquals(actualValue , expectedValue);
}
}
Этот код может потребовать доработки. Основная идея состоит в том, чтобы сделать еще один поиск для элементов 'td'.