Currently i am using openCsv to parse my test.csv, and use the data extracted to do assert checks in selemium/junit.
The data in my csv,
1
2
3~
~ is my delimiter
I want to compare the data in my csv with my selenium .getText()
, However, i cannot get openCsv to read 1, 2 and 3 and break at ~, it will always compare 1(Csv) and .getText()
's 1,2 and 3 and cause failure.
After some tinkering and assistant from a friend, i finally got it to work, however the code is pretty messy
My current work in progress code looks like this,
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());
}
Is there a easier way to do this?
Update - optimized version
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);
}
}