2014-02-21 2 views
0

В настоящее время я использую 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); 
     } 
    } 
+0

добавил.split, чтобы сломать .getText, чтобы соответствовать моему считывателю csv Может ли оно быть упрощено? – user2853922

ответ

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

    } 
} 

Этот код может понадобиться некоторые настройки. Основная идея - сделать еще один поиск элементов «td».

+0

thks Algiz, взял некоторые идеи из вашей версии – user2853922

Смежные вопросы