2017-06-19 86 views
1

嘗試檢查列表中是否存在多個關鍵字。硒 - 聲明列表中存在多個關鍵字的數組

List<String> array=new ArrayList<String>(); 
array.add("Sam Mayers test"); 
array.add(""); 
array.add("value"); 
array.add(""); 
array.add(""); 
array.add(""); 
array.add("District 49"); 
array.add("Till the last test"); 
array.add("Dawn Strings"); 
array.add("Lists value"); 
array.add(""); 
array.add(""); 
array.add("Total Hits Lists"); 
array.add("Values"); 


Boolean found = false; 

     List<String> keywords_tobe_checked = new ArrayList<>(); 
     keywords_tobe_checked.add("Lists"); 
     keywords_tobe_checked.add("value"); 
     keywords_tobe_checked.add("Mayers"); 
     List<String> dummylist = new ArrayList<>(); 

     for (int i = 0; i < array.size(); i++) { 
      String val = array.get(i); 
      for (int j = 0; j < keywords_tobe_checked.size(); j++) { 
      if (val.indexOf(keywords_tobe_checked.get(j)) >= 0) { 
       dummylist.add(val); 
      } 
      } 
     } 
     System.out.println(dummylist); 

     Assert.assertTrue(dummylist.containsAll(keywords_tobe_checked), "Its not correct"); 

我上面的代碼在asserttrue條件失敗,並給我一個不正確的結果。

有沒有一種方法,我可以通過這個斷言的條件,所有在「keywords_tobe_checked」中提到的關鍵字出現在「dummylist」?

更新的代碼嘗試:

List<String> array=new ArrayList<String>(); 
     array.add("Sam Mayers test"); 
     array.add(""); 
     array.add("value"); 
     array.add(""); 
     array.add(""); 
     array.add(""); 
     array.add("District 49"); 
     array.add("Till the last test"); 
     array.add("Dawn Strings"); 
     array.add("Lists value"); 
     array.add(""); 
     array.add(""); 
     array.add("Total Hits Lists"); 
     array.add("Values"); 



     List<String> keywords_tobe_checked = new ArrayList<>(); 
     keywords_tobe_checked.add("Lists"); 
     keywords_tobe_checked.add("value"); 
     keywords_tobe_checked.add("Mayers"); 

     System.out.println(array); 
     System.out.println(keywords_tobe_checked); 
     for (String keyword : keywords_tobe_checked) { 
      Boolean found = false; 
      for (String value : array) { 
       if (value.contains(keyword)) { 
        found = true; 
        break; 
       } 
       Assert.assertTrue(found, "The keyword " + keyword + " not in the list"); 
      } 

     } 


Content of the Array------------  [Sam Mayers test, , value, , , , District 49, Till the last test, Dawn Strings, Lists value, , , Total Hits Lists, Values] 
    Content of the Keywords to be checked ----------------- [Lists, value, Mayers] 
    Exception in thread "main" java.lang.AssertionError: The keyword Lists not in the list expected [true] but found [false] 
     at org.testng.Assert.fail(Assert.java:94) 
     at org.testng.Assert.failNotEquals(Assert.java:496) 
     at org.testng.Assert.assertTrue(Assert.java:42) 

回答

1

當檢查是否List包含String結果將是真實的,只有當有精確匹配

array.contains("Lists"); // false 

array.contains("Lists value"); // true 

要檢查部分匹配您需要使用Assert.assertTrue內環路

for (String keyword : keywords_tobe_checked) { 
    boolean hasKeyword = false; 
    for (String value : array) { 
     if (value.contains(keyword)) { 
      hasKeyword = true; 
      break; 
     } 
    } 

    Assert.assertTrue(hasKeyword, "The keyword " + keyword + " is in the list"); 
} 
+1

我可以不要編輯你的帖子。 你的回答是正確的,你只是在'break'後面缺少'}'; –

+0

@RafałLaskowski謝謝,編輯。 – Guy

+0

不完全正常工作....再次得到斷言失敗爲「線程中的異常」主要「java.lang.AssertionError:關鍵字列表不在列表中預期[true]但找到[false]」 –

0

你在你的代碼正在做什麼是不正確的,由於在數組列表值。

在使用containsAll方法時,您正在尋找數組列表中的SPECIFIC字符串。

示例: 第一個列表有對象Sam Mayers test。 第二個列表有對象Mayers

這就是爲什麼你有AssertionError。 Sam Mayers testMayers完全是兩個不同的對象。