2012-06-27 10 views
5

Sto provando a usare il comando click in selenium webdriver usando python. Ma sto ottenendo l'errore qui sotto. Qualcuno può aiutarmi?AttributeError: l'oggetto 'list' non ha attributo 'click' - 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' 

Ecco il mio programma

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

penso che mi manca qualche cosa. Si prega di suggerire me

+0

driver.find_elements_by_link_text ("MISCQA Misc Tests") ritorna l'elenco, non oggetto richiamabile – cval

risposta

17

Grazie per l'aiuto. Ho trovato la risposta per me stesso. Idea fornita da "Dan Niero"

Il problema è che sto usando driver.find_element[s] anziché driver.find_element. Quindi uno fa la differenza. In realtà sto seguendo l'eclissi :(. Ovviamente lista driver.find_elements_by_link_text ritorna quindi se io mando clicca caso non ci vorrà capire.

Grazie per l'aiuto e dispiaciuto per il mio cattivo domanda

-Vikram

1

La parte del codice,

driver.find_elements_by_link_text("MISCQA Misc Tests") 

sta tornando indietro una lista e non un oggetto della WebDriver selenio (ciò che si vuole, oggetto della classe che ha la funzione "click()").

Molto probabilmente, gli elementi della lista sarebbero gli oggetti.

Stampa la lista dopo quella parte del codice e controlla se gli elementi della lista sono quelli di cui hai bisogno.

+0

Questo è l'output che ottengo [] – vkrams

+0

Driver WebDriver = new InternetExplorerDriver(); driver.get (url); \t Elemento WebElement = driver.findElement (By.linkText ("Test vari")); element.click(); - Questo è il codice in Java. Voglio simulare la stessa cosa in Selenium Python – vkrams

+1

Sì. questi sono oggetti stessi. Quindi, basta scorrere l'elenco e chiamare su di loro il metodo click(). Ad esempio, driver.find_elements_by_link_text ("MISCQA Misc Tests") [0] .click() –

8

forse driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click() o un altro indice ...

non so selenio, ma immagino find_elements_by_link_text sta trovando più di una cosa, o forse il metodo restituisce sempre una lista piuttosto che un singolo oggetto. Se sei assolutamente sicuro che solo un oggetto dovrebbe essere il risultato della tua ricerca, piuttosto che usare [0] come ho detto, se non puoi supporre che ci sarà un solo oggetto, allora hai bisogno di un altro strategia

+0

Ho usato la dichiarazione di cui sopra ma senza fortuna. pensi che non ho importato una classe corretta per questo. – vkrams

+1

Vikram, non conosco questo selenio, ma il messaggio di errore che hai ottenuto afferma chiaramente che hai ottenuto una LISTA indietro, quindi devi accedere agli elementi all'interno di quell'elenco ... Quale altro errore ottieni quando provi a fare così? –

0

La dichiarazione driver.find_elements_by_link_text("MISCQA Misc Tests") restituisce un elenco di WebElement alcuni dei quali non potrebbe essere cliccabile.

in modo da avere a scorrere l'elenco dei WebElement di restituiti e quindi fare clic su quegli elementi che sono cliccabili.

È possibile verificare se un WebElement è selezionabile o meno utilizzando la funzione isClickable().

Non ho postato il codice perché non conosco Python. Spero che questo ti aiuti.

+0

isClickable() restituisce booleano quindi non richiede. Comunque ho trovato la risposta – vkrams

0

se volete singolo elemento in modo u può usare:

driver.find_element_by_link_text("MISCQA Misc Tests") 

o se si desidera tutta la lista, quindi:

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

se l'attributo di "Prove MISCQA Varie" ha una sola, Puoi provare a cambiare elementi in questo codice 'driver.find_elements_by_link_text ("MISCQA Misc Test")' Spero che il problema sia corretto

Problemi correlati