2012-06-27 22 views
5

Próbuję użyć polecenia click w Selenium webdriver przy użyciu Pythona. Ale otrzymuję poniższy błąd. Czy ktoś może mi pomóc?AttributeError: Obiekt 'list' nie ma atrybutu "kliknij" - Selenium Webdriver

Traceback (most recent call last): 
File "C:\Users\vikram\workspace\LDC\test.py", line 13, in <module> 
driver.find_elements_by_link_text("MISCQA Misc Tests").click() 
AttributeError: 'list' object has no attribute 'click' 

Oto mój program

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support.ui import WebDriverWait 
import config 

url = config.config.get('url') 

driver = webdriver.Ie() 
driver.get(url) 

driver.find_elements_by_link_text("MISCQA Misc Tests").click() 

driver.close() 

Myślę, że jestem brakuje pewnych rzeczy. Proszę zasugerować mi

+0

driver.find_elements_by_link_text ("MISCQA Misc Tests") lista zwrotów, obiekt nie do wywołania – cval

Odpowiedz

17

Dzięki za pomoc. Znalazłem odpowiedź dla siebie. Idea podana przez "Dan Niero"

Problem polega na tym, że używam driver.find_element[s] zamiast driver.find_element. Więc jedna robi różnicę. W rzeczywistości jestem po zaćmienie :(. Oczywiście lista driver.find_elements_by_link_text powraca więc jeśli wysłać kliknij zdarzenie to przyzwyczajenie zrozumieć.

Dzięki za pomoc i przepraszam za mój zły pytanie

-Vikram

1

część kodu,

driver.find_elements_by_link_text("MISCQA Misc Tests") 

wraca z powrotem listę, a nie przedmiotem webdriver selenu (co chcesz, obiekt klasy posiadające funkcję „click()”).

Najprawdopodobniej, elementy listy byłyby obiektami.

Wydrukuj listę po tej części kodu i sprawdź, czy elementy listy są tymi, których potrzebujesz.

+0

To jest wynik, który otrzymuję [] – vkrams

+0

Sterownik WebDriver = new InternetExplorerDriver(); driver.get (url); \t Element WebElement = driver.findElement (By.linkText ("Różne testy")); element.click(); - To jest kod w Javie. Chcę symulować to samo w Selenium Python – vkrams

+1

Tak. to są same obiekty. Po prostu przetestuj listę i wywołaj metodę click(). Na przykład: driver.find_elements_by_link_text ("MISCQA Misc Tests") [0] .click() –

8

może driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click() lub inny wskaźnik ...

Nie wiem, selen, ale myślę find_elements_by_link_text jest znalezienie więcej niż jedno, a może metoda zawsze zwraca listę zamiast pojedynczego obiektu. Jeśli jesteś absolutnie pewny, że tylko jeden obiekt powinien być wynikiem twojego wyszukiwania, użyj tylko [0] jak wspomniałem, jeśli nie możesz założyć, że będzie tylko jeden obiekt, niż musisz wymyślić silniejszy strategia

+0

Użyłem powyższego stwierdzenia, ale bez powodzenia. myślisz, że nie zaimportowałem do tego odpowiedniej klasy. – vkrams

+1

Vikram, Nie znam tej Selenium, ale komunikat o błędzie, który otrzymałeś, wyraźnie stwierdza, że ​​odzyskałeś LISTĘ, więc potrzebujesz dostępu do elementów znajdujących się na tej liście ... Jaki inny błąd pojawia się przy próbie Zrób tak? –

0

Oświadczenie driver.find_elements_by_link_text("MISCQA Misc Tests") zwraca listę WebElement z których część nie może być klikalny.

Więc trzeba będzie pętli listy WebElement powrócił, a następnie kliknij na te elementy, które można kliknąć.

Możesz sprawdzić, czy WebElement jest klikalny, czy nie, używając funkcji isClickable().

Nie opublikowałem kodu, ponieważ nie znam Pythona. Mam nadzieję, że to ci pomoże.

+0

isClickable() zwraca wartość boolean, więc nie jest wymagana. W każdym razie znalazłem odpowiedź – vkrams

0

jeśli chcesz pojedynczy element, więc można korzystać z:

driver.find_element_by_link_text("MISCQA Misc Tests") 

lub jeśli chcesz całą listę, a następnie:

for x in self.driver.find_elements_by_link_text("MISCQA Misc Tests"): 
    link = webdriver.ActionChains(self.driver).move_to_element(x).click(x).perform() 
0

jeżeli atrybut "MISCQA Misc testy" ma tylko jeden, Możesz spróbować zmienić elementy na element w tym kodzie 'driver.find_elements_by_link_text ("MISCQA Misc Tests")' Mam nadzieję, że problem zostanie rozwiązany

Powiązane problemy