0

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);
        }
    }
user2853922
  • 27
  • 1
  • 3
  • 7

1 Answers1

0
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);

  }
}

This code might need some tweaking. The central idea is to make another lookup for elements 'td'.

Algiz
  • 1,258
  • 9
  • 20