2013-04-18 23 views
8

Sayfadaki bir dizi öğeyi bulmak için Selenium'u (2.31.0, JavaSE 1.6 ve IE9 kullanarak) kullanmaya çalışıyorum. Bu öğelerin tümü, 'dataLabel' veya 'dataLabelWide' olmak üzere iki sınıf adından birine sahiptir. Şu anda, kodum bu öğeleri iki ayrı ArrayLists'te toplar, her biri bir sınıf adı için, daha sonra bunları dizilere dönüştürür ve bunları tek bir dizide birleştirir. Bununla birlikte, bu yöntem, öğeleri sıra dışı olarak listeler ve bunların, sayfanın HTML kaynağında bulunanlarla aynı sırada bırakılmasına ihtiyacım vardır. Ben en etkili çözüm onlar olurdu yani ya sınıf adıyla elemanları bulmak olacağını düşünüyorumSelenium Webdriver w/Java: Bir komutla birden çok sınıf adı taşıyan öğeleri bulma

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

:

benim kod yukarıda belirtilen bölüm (açıklama için eklenen yorumlarla) şöyle hemen tek bir liste/diziye dahil. Kendi aramda arama yaptım, ancak bu görevi nasıl yönetebileceğime dair hiçbir fikrim yoktu. Bunu yapmanın bir yolu varsa, lütfen bana bunu anlat.

cevap

28

Neden aşağıdakileri yapın olmaz: ''

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

seçici, "bana bu sınıfla tüm öğeleri ver" diyor. ',' Operatör CSS seçici 'veya' operatördür.

+1

Soruma hızlı yanıt verdiğiniz için teşekkür ederiz. Ne yazık ki, Selenium için çok yeniyim, bu yüzden elementleri bulmak için tüm yöntemleri bilmiyorum. Seçicinin ve operatörün açıklamalarını dahil ettiğiniz için teşekkür ederim, çünkü bu detaylar beni başka bir şekilde kaçmış olabilir. Bu örneği bir deneyin ve sonuçlarla birlikte geri bildireceğim. –

+0

Bu örnek gerçekten benim sorunumu çözüyor. Yardımın için çok teşekkür ederim. –

+0

Oldukça temiz. onu sevdim – Saifur