2012-09-25 17 views
17

Sono nuovo di XPath, cercando di ottenere il valore del "valore" utilizzando XPath:Python Selenio: trovare l'oggetto attributi utilizzando XPath

<input type="submit" value=" Search " class="long searchButton" style="width:190px !important;"> 

mentre è facile da trovare elemento da "type="submit" come:

browser.find_elements_by_xpath("//*[@type='submit']") 

non sono stato in grado di capire come ottenere i valori di cui ho bisogno, come:

browser.find_elements_by_xpath("//*[@type='submit']/@value") 

un po ' prevede un errore:

expression "//*[@type=\'submit\']/@value" is: [object Attr]. It should be an element 

Qualche idea su come risolvere questo problema?

MODIFICA: xpath è corretto, ma "restituisce" un attributo obj e poiché non è un elemento, non è consentito. Non riesco a trovare un metodo come get_attr_by_xpath() o qualcosa di simile.

+0

forse questo è un suggerimento stupido, ma si fa utilizzando le stringhe prime FIX: 'r "// * [@ type = 'submit'] valore/@" '? –

+0

hai provato qualcosa come 'driver.find_element_by_xpath (" // a [contiene (text(), 'Search')] "). Click()' – avasal

+0

Quando ho provato xpath con lxml ha funzionato bene. Ho provato 'lxml.html.fromstring (s) .xpath (" // * [@ type = 'submit']/@ value ")' e l'o/p è '['Cerca']' – RanRag

risposta

28

fine ho usato get_attribute("value") come:

for i in browser.find_elements_by_xpath("//*[@type='submit']"): 
    print i.get_attribute("value") 
2

Sarebbe come questo

browser.find_elements_by_xpath("//*[@type='submit']/@value").text 

Aggiornamento:

Con la funzione utilizzata da voi, siamo in grado di estrarre solo l'elemento non il suo attributo. Per ottenere il suo attributo, l'espressione dovrebbe essere qualcosa di simile

browser.find_elements_by_xpath("//*[@type='submit']").get_attribute("value") 

Rif: http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webelement.WebElement.find_elements_by_tag_name

+0

@ Kaipa - dà lo stesso errore. – root

+0

@ Kaipa - il tuo aggiornamento è anche la cosa più vicina che ho trovato. Però. Non ci sono elementi "find_element" né elementi o un ciclo for se si usano gli elementi. – root

+0

@ Jayy: sì, ha funzionato! hai ragione. La funzione find_elements_by_xpath() cerca semplicemente di ottenere un ** elemento **, non un ** attributo **. Quindi, ho un errore quando voglio Esso restituisce un attributo. Ho appena messo get_attribute() dopo, poi fatto. Thks! – Catbuilts

2

Io di certo so che questo è stato inviato oltre 2 anni fa , ma vorrei aggiungere un po 'di ciò che è stato lasciato fuori. il selenio fornisce parole incorporate che possono essere utilizzate per estrarre il testo tra i tag o i valori dell'attributo effettivo all'interno dei tag.

${XPATH} xpath=(//td[@title='mytitle']/../td)[2]  

Ecco un rapido esempio:

${THE_NAME}=  Get Text   ${XPATH} 
+0

non voglio deluderti, ma il codice di esempio che hai fornito è in robot (la domanda è per python e le sue associazioni di selenio), e restituirà il testo del nodo, non il valore dell'attributo. Per ottenere quello - di nuovo, nella sintassi di robotframework, la chiamata dovrebbe essere '$ {valore attributo} = Ottieni valore attributo $ {il locatore} @ attribute_name' – Todor

Problemi correlati