2013-04-18 13 views
8

Sto tentando di utilizzare Selenium (2.31.0, utilizzando JavaSE 1.6 e IE9) per trovare una serie di elementi in una pagina. Questi elementi hanno tutti uno dei due nomi di classe, "dataLabel" o "dataLabelWide". Attualmente, il mio codice raccoglie questi elementi in due ArrayList distinti, uno per ciascun nome di classe, quindi li converte in array e li combina in un unico array. Questo metodo, tuttavia, elenca gli elementi fuori ordine e ho bisogno che vengano lasciati nello stesso ordine in cui si trovano nell'origine HTML della pagina.Selenium Webdriver w/Java: localizzazione di elementi con più nomi di classe con un comando

La sezione del mio codice di cui sopra si presenta così (con commenti aggiunti per la spiegazione):

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

Penso che la soluzione più efficace sarebbe quella di individuare gli elementi con entrambi nome della classe in modo che sarebbero stati incluso in una singola lista/matrice subito. Ho fatto delle ricerche per conto mio, ma non ho trovato idee conclusive su come potrei gestire questo compito. Se c'è un modo per farlo, per favore parlamene.

risposta

28

perché non si effettuare le seguenti operazioni:

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

Il '' il selezionatore dice "dammi tutti gli elementi con questa classe". L'operatore ',' è il selettore CSS 'o' operatore.

+1

Grazie per la rapida risposta alla mia domanda. Sfortunatamente, sono molto nuovo in Selenium, quindi non ho familiarità con tutti i metodi di localizzazione degli elementi. Apprezzo le tue spiegazioni del selettore e dell'operatore, in quanto quei dettagli potrebbero essermi sfuggiti altrimenti. Darò un esempio a questo esempio e riferirò con i risultati. –

+0

Questo esempio risolve il mio problema. Grazie mille per l'assistenza. –

+0

Abbastanza pulito. lo amavo – Saifur

Problemi correlati