2013-09-03 26 views
6

Problem:Selen/Python - Wybór za pomocą selektora css

Nie można wybrać z określonego elementu selektora css. Konieczność sprawdzenia, czy zarejestrowany użytkownik może pomyślnie zmienić hasło. Próbowałem wywoływać różne atrybuty klasy. Wynikiem jest błąd wyjątku w tej metodzie, gdy próbujemy z pierwszymi dwoma przykładami. Ostatnia próba wywołuje pierwszą instancję klasy i resetuje pola hasła (niepowodzenie).

Tried:

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() 

Cel:

muszę wybrać przedmioty, które dzielą tę samą klasę. Jak widać poniżej, klasa jest udostępniana.

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"=""> 

Odpowiedz

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

EDIT: Ponieważ selektor potrzebuje class, id lub tagname, ale value.Update sama jest żaden tych.

.test_button4 podaje nazwę klasy do której można się dopasować, a stamtąd [value='Update'] określa, który konkretny mecz/y wybrać.

+0

Byłoby miło z Twojej strony, aby wyjaśnić nieco, dlaczego Twoje rozwiązanie działa, a także z OP nie – fotanus

+0

@fonatus Dobry pomysł. –

+1

To było to, Pat. Próbowałem 'driver.find_element_by_css_selector (" input.test_button4 ", value =" Update "). Click()' i to nie działało. Preciuj to! – 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!") 

To jest coś, co prawie nigdy nie widać nikogo dokumentu, wyjaśnić, albo użyć.

(chory nazwa zastosowanie na przykład z powodu swojej najprostszej)

find_element_by_name() zwraca pojedynczy element lub daje wyjątek, jeśli robi to znaleźć to

find_elements_by_name() zwraca listę elementów. jeśli nie znaleziono żadnych elementów, lista jest pusta

więc jeśli zrobisz find_elements_by_class_name() i zwraca listę z wpisami X w nim wszyscy, co zostało w tym momencie w celu zawężenia co chcesz, to albo jakiś staroświecki listowego (tak jak użyłem w mojej odpowiedzi) lub trochę indeksowania, jeśli z jakiegoś powodu wiesz, który element chcesz.

również get_attribute() jest również poważnie niewykorzystywany. analizuje wnętrze elementów HTML za pomocą tego, co jest przed = i zwraca to, co jest po =

Powiązane problemy