2012-09-20 20 views
9

EDIT: Ho anche provato questoCome per afferrare solo elemento id - utilizzando Selenio WebDriver 2

var webElements1 = (Driver.FindElements(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_Control1_lstCategory']//input"))).ToList(); 

ho ottenere il testo vuoto

Sto cercando di trovare un modo per afferrare solo ID dalla lista che sto ricevendo e sotto è il mio codice e una stampa del mio schermo.

// WebDriver ottenere un elenco di testo

il codice qui sotto mi restituisce il numero corretto di record ma appena mi danno la Text ma sono dopo Text e Id di un particolare Text

ho provato questo:

var webElements1 = (Driver.FindElements(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_Control1_lstCategory']/tbody/tr/td/span"))).ToList(); 

questo

var webElements2 = (Driver.FindElements(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_Control1_lstCategory']/tbody/tr/td"))).ToList(); 

e questo ...

var webElements3 = (Driver.FindElements(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_Control1_lstCategory']"))).ToList(); 

il tutto il codice della linea mi dà i rendimenti corretti ma senza Id.

Ecco la schermata di stampa della mia pagina:

enter image description here

+0

quando si intende ID, vuoi dire che cosa? L'effettivo ID del controllo (ctl00_etc) o il testo stesso? ("Elemento 1", "Elemento 2" ecc.) – Arran

+0

ID effettivo del controllo –

risposta

13

Dopo aver ottenuto tutti gli elementi usando sotto metodo, eseguire in loop per ottenere gli ID tutte dell'elemento:

List<WebElement> element = driver.findElements(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_Control1_lstCategory']//input"))); 

for(WebElement ele:elements) 
{ 

     ele.getAttribute("id");  // for getting id of each element 

     ele.getText();    //for getting text of each element 

} 
+0

Ricevo il testo da 'webElement1' e Id da' webElement4', ma qual è il modo migliore di unire togather? –

+0

Non ho capito qual è il tuo requisito? Se vuoi eseguire in loop quell'Elenco puoi ottenere tutti i testi o gli ID degli elementi. Si desidera ottenere un elemento id, un elemento testo significa che è necessario utilizzare alcune istruzioni condizionali all'interno del ciclo. – Santoshsarma

0

1) i Cercherò di condividere l'idea dell'approccio che sceglierei per risolvere il problema:

getElementsByTagName('input');//returns array of elements 

2) utilizzando js executor ottieni l'attributo dell'elemento, in particolare l'ID, iterando attraverso l'intero array restituito da getElementsByTagName ('input') e ottenendo i loro ID. // esempio di codice che ho usato per trovare l'attributo colore:

public String jsGetColor(String cssSelector){ 

    JavascriptExecutor js = (JavascriptExecutor) driver; 
    StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.append("var x=$(\'"+css+"\');"); 
    stringBuilder.append("return x.css('color')"); 
    String res= (String) js.executeScript(stringBuilder.toString()); 
    return res; 

} 

questo è semplicemente il mio assumtion come essere possibile provare. Spero che aiuta in qualche modo)

0

Se avete solo bisogno di un ID:

String id = driver.findElement(By.xpath("//*[contains(text(), 'Your text')]")).getAttribute("id"); 
Problemi correlati