2013-04-18 16 views
8

我試圖使用Selenium(2.31.0,使用JavaSE 1.6和IE9)在頁面上查找一系列元素。這些元素都有兩個類名之一,'dataLabel'或'dataLabelWide'。目前,我的代碼將這些元素收集到兩個獨立的ArrayLists中,每個類名稱一個,然後將它們轉換爲數組並將它們組合成一個數組。但是,此方法不按順序列出元素,我需要將它們保留爲與在頁面的HTML源代碼中找到的順序相同的順序。Selenium Webdriver w/Java:使用一個命令定位具有多個類名稱的元素

我的代碼的上述部分看起來像這樣(添加了解釋意見):

// Application runs on WebDriver d, an InternetExplorerDriver. 
// After navigating to the page in question... 

List<WebElement> labels = d.findElements(By.className("dataLabel")); 
List<WebElement> wLabels = d.findElements(By.className("dataLabelWide")); 
// Locates the elements of either type by their respective class name. 

WebElement[] labelsArray = labels.toArray(new WebElement[labels.size()]); 
WebElement[] wLabelsArray = wLabels.toArray(new WebElement[wLabels.size()]); 
// Converts each ArrayList to an array. 

List<WebElement> allLabels = new ArrayList<WebElement>(); 
// Creates an ArrayList to hold all elements from both arrays. 

for(int a = 0; a < labelsArray.length; a++) { 
    allLabels.add(labelsArray[a]); 
} 
for(int b = 0; b < wLabelsArray.length; b++) { 
    allLabels.add(wLabelsArray[b]); 
} 
// Adds elements of both arrays to unified ArrayList, one by one. 

WebElement[] allLabelsArray = allLabels.toArray(new WebElement[allLabels.size()]); 
// Finally converts unified ArrayList into array usable for test purposes. 
// Far too complicated (obviously), and elements end up out-of-order in array. 

我認爲最有效的解決辦法是找到與任一類的名稱元素,因此他們會在立即包含在單個列表/數組中。我自己做了一些搜索,但是我沒有找到關於如何管理這個任務的任何決定性的想法。如果有辦法做到這一點,請告訴我。

回答

28

你爲什麼不執行以下操作:

driver.findElement(By.cssSelector(".dataLabel,.dataLabelWide"); 

的 ''選擇者說,「給我這個班的所有元素。」 ','運算符是CSS選擇器'或'運算符。

+1

謝謝你對我的問題的快速回復。不幸的是,我對Selenium很陌生,所以我不熟悉定位元素的所有方法。我很感謝你對選擇器和操作符的包含解釋,因爲這些細節可能已經逃脫了我。我會試一試這個例子,並回報結果。 –

+0

這個例子確實解決了我的問題。非常感謝你的協助。 –

+0

很乾淨。我愛它 – Saifur

相關問題