2014-04-30 19 views
5

Ho eseguito test utilizzando Selenium WebDriver e ho cercato un codice XPath per ottenere il valore dell'attributo di un elemento HTML come parte dei test di regressione. Ma non ho trovato una buona risposta.Come ottenere il valore di un attributo utilizzando XPath

Ecco il mio campione elemento HTML:

<div class="firstdiv" alt="testdiv"></div> 

voglio ottenere il valore dell'attributo "alt" utilizzando il XPath. Ho un XPath per raggiungere l'elemento div utilizzando l'attributo di classe che è:

//div[@class="firstdiv"] 

Ora, sto cercando un codice di XPath per ottenere il valore dell'attributo "alt". L'assunto è che non so quale sia il valore dell'attributo "alt".

+3

Non sarete in grado di farlo con il selenio. Il selenio si aspetta che le query XPath restituiscano elementi DOM fisici. Perché un 'getAttribute ('alt')' non funziona? – Arran

+0

@Arran Perché quando si esegue il selenio remoto (come Browserstack), sono necessari anni: ogni 'getAttribute' è' + = 2 * latenza'. –

+0

Concordato @ polkovnikov.ph, quando si esegue Remote Selenium si dovrebbe fare tutto il possibile per rendere i test meno chiacchierone ma in questo caso, non c'è altro modo di due chiamate: una per ottenere l'elemento e una per ottenere un attributo da esso. – Arran

risposta

9

È possibile utilizzare il metodo getAttribute().

driver.findElement(By.xpath("//div[@class='firstdiv']")).getAttribute("alt"); 
+0

grazie Richard per la rapida risposta ... tuttavia, il mio caso è che ho questa applicazione in cui l'utente mi fornirà semplicemente xpath e in base ad esso il sistema eseguirà il test ... ma suppongo che non ci sia altro modo se non fai due chiamate ... ottieni prima l'elemento e poi ottieni l'attributo –

0

con C#, .Net 4.5, e selenio 2.45

Utilizzare findElements per catturare gli elementi firstdiv in una collezione.

var firstDivCollection = driver.findElements(By.XPath("//div[@class='firstdiv']")); 

Quindi eseguire l'iterazione sulla raccolta.

 foreach (var div in firstDivCollection) { 
      div.GetAttribute("alt"); 
     } 
0

Basta usare executeScript e fare XPath o querySelector/getAttribute nel browser. Altre soluzioni sono sbagliate, perché ci vuole sempre per chiamare getAttribute per ogni elemento del Selenio se ne hai più di alcune.

var hrefsPromise = driver.executeScript(` 
     var elements = document.querySelectorAll('div.firstdiv'); 
     elements = Array.prototype.slice.call(elements); 
     return elements.map(function (element) { 
       return element.getAttribute('alt'); 
     }); 
    `); 
0

Selenium Xpath può restituire solo elementi. Dovresti passare la funzione javascript che esegue xpaths e restituisce le stringhe al selenio.

Non sono sicuro del motivo per cui l'hanno fatto in questo modo. Xpath dovrebbe supportare il ritorno delle stringhe.

Problemi correlati