2013-07-19 129 views
2
驗證列表元素
WebElement select = myD.findElement(By.xpath("//*[@id='custfoodtable']/tbody/tr[2]/td/div/select")); 
List<WebElement> allOptions = select.findElements(By.tagName("option")); 
for (WebElement option : allOptions) { 
    System.out.println(String.format("Value is: %s", option.getAttribute("value"))); 
    option.click(); 
    Object vaLue = "Gram"; 
    if (option.getAttribute("value").equals(vaLue)) { 
     System.out.println("Pass"); 
    } else { 
     System.out.println("fail"); 
    } 
} 

我可以在列表中驗證一個元素,但也有像在下拉我需要驗證,我不希望使用上述邏輯20次,每次20元。有沒有更簡單的方法來做到這一點?硒的webdriver

+0

什麼是打印效果? –

回答

4

不要使用for-each構造。它僅在迭代單個Iterable /數組時有用。您需要同時迭代List<WebElement>和陣列。 OP的後

// assert that the number of found <option> elements matches the expectations 
assertEquals(exp.length, allOptions.size()); 
// assert that the value of every <option> element equals the expected value 
for (int i = 0; i < exp.length; i++) { 
    assertEquals(exp[i], allOptions.get(i).getAttribute("value")); 
} 

編輯改變了他的問題了一下:

假設你有預期值的數組,你可以這樣做:

String[] expected = {"GRAM", "OUNCE", "POUND", "MILLIMETER", "TSP", "TBSP", "FLUID_OUNCE"}; 
List<WebElement> allOptions = select.findElements(By.tagName("option")); 

// make sure you found the right number of elements 
if (expected.length != allOptions.size()) { 
    System.out.println("fail, wrong number of elements found"); 
} 
// make sure that the value of every <option> element equals the expected value 
for (int i = 0; i < expected.length; i++) { 
    String optionValue = allOptions.get(i).getAttribute("value"); 
    if (optionValue.equals(expected[i])) { 
     System.out.println("passed on: " + optionValue); 
    } else { 
     System.out.println("failed on: " + optionValue); 
    } 
} 

此代碼基本上是做什麼我第一個代碼。唯一真正的區別是,現在你正在手動完成這項工作,並將結果打印出來。

之前,我使用了JUnit框架的Assert類中的assertEquals()靜態方法。此框架是編寫Java測試的事實標準,方法系列是驗證程序結果的標準方法。他們確保傳遞給該方法的參數是相等的,如果不是,他們會拋出一個AssertionError

無論如何,你也可以用手動的方式來做到這一點,沒問題。

+0

感謝您的答案傢伙..但我dnt知道如果我理解cauz我很新這個。其實我也試過這個 – user2502733

+0

這段代碼應該代替你的for-each循環。如果需要,也可以包括您的打印。也就是說,這應該完全按照需要工作,它應該聲明你的'元素'值。當你把它粘貼到你的測試中時有什麼不對嗎?它是否按預期工作?我添加了評論,讓您更容易理解代碼。 –

+0

嘿,我只是改變我的問題。對於早先的混亂感到抱歉。我只想看看是否有更簡單的方法來驗證列表中的所有元素。 – user2502733

1

你可以這樣說:

String[] act = new String[allOptions.length]; 
int i = 0; 
for (WebElement option : allOptions) { 
    act[i++] = option.getValue(); 
} 

List<String> expected = Arrays.asList(exp); 
List<String> actual = Arrays.asList(act); 

Assert.assertNotNull(expected); 
Assert.assertNotNull(actual); 
Assert.assertTrue(expected.containsAll(actual)); 
Assert.assertTrue(expected.size() == actual.size());