2013-09-03 6 views
6

Ausgabe:Selen/Python - Auswahl über CSS-Selektor

Kann nicht aus css Selektor spezifischen Element auswählen. Sie müssen überprüfen, ob der registrierte Benutzer das Passwort erfolgreich ändern kann. Ich habe versucht, die verschiedenen Attribute der Klasse zu nennen. Das Ergebnis ist ein Ausnahmefehler in der Methode, wenn Sie mit den ersten beiden Beispielen versuchen. Der letzte Versuch ruft die Instanz der ersten Klasse auf und setzt die Kennwortfelder zurück (fehlgeschlagen).

Versuchte:

driver.find_element_by_css_selector("value.Update").click() 
driver.find_element_by_css_selector("type.submit").click() 
driver.find_element_by_css_selector("input.test_button4").click() 

Ziel:

Ich brauche Elemente, die die gleiche Klasse teilen. Wie Sie unten sehen können, wird die Klasse geteilt.

form id="changepw_form" name="changepw" action="#" method="post"> 
<div class="field3"> 
<div class="field3"> 
<div class="field3"> 
<input class="test_button4" type="reset" value="Reset" style"font-size:21px"=""> 
<input class="test_button4" type="submit" value="Update" style"font-size:21px"=""> 

Antwort

12
driver.find_element_by_css_selector(".test_button4[value='Update']").click() 

EDIT ist: Da der Selektor ein class braucht, id oder tagname, aber value.Update selbst ist keine von diesen.

.test_button4 stellt einen Klassennamen zur Verfügung, mit dem eine Übereinstimmung hergestellt werden soll, und von dort gibt [value='Update'] an, welche bestimmten Übereinstimmungen ausgewählt werden sollen.

+0

wäre nett von Ihnen, ein wenig zu erklären, warum Ihre Lösung funktioniert und von der OP nicht – fotanus

+0

@fonatus Gute Idee. –

+1

Das war es, Pat. Ich hatte versucht 'driver.find_element_by_css_selector (" input.test_button4 ", value =" Update "). Click()' und das hat nicht funktioniert. Preciate es! – Dave

2
test_button4 = driver.find_elements_by_class_name('test_button4') # notice its "find_elementS" with an S 
submit_element = [x for x in test_button4 if x.get_attribute('value') == 'Update'] #this would work if you had unlimited things with class_name == 'test_button4', as long as only ONE of them is value="Update" 
if len(submit_element): # using a non-empty list as truthiness 
    print ("yay! found updated!") 

Dies ist etwas, das ich so gut wie nie jemand Dokument sehen, erklären, oder verwenden.

(ill Verwendung Name zum Beispiel, weil seine einfachste)

find_element_by_name() gibt einen einzelnen Artikel oder gibt eine Ausnahme, wenn sie es

find_elements_by_name() gibt eine Liste von Elementen finden tun. Wenn keine Elemente gefunden werden, ist die Liste leer

Wenn Sie also eine find_elements_by_class_name() machen und eine Liste mit X-Einträgen zurückgibt, ist alles, was an dieser Stelle übrig bleibt, um etwas einzugrenzen, entweder ein altmodisches Listenverständnis (wie ich in meiner Antwort verwendet habe) oder etwas Indexierung, wenn Sie aus irgendeinem Grund wissen, welches Element Sie wollen.

auch get_attribute() ist ernsthaft auch nicht ausgelastet. es die Innenseite der Elemente html analysiert, indem Sie, was vor dem = ist und gibt, was nach dem =

Verwandte Themen