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'.

Другие вопросы по тегам