2012-06-27 40 views
5

Estoy tratando de usar el comando click en Selenium webdriver usando python. Pero estoy obteniendo el siguiente error ¿Alguien me puede ayudar?AttributeError: el objeto 'list' no tiene ningún atributo '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' 

Aquí es mi programa

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

Creo que me falta alguna cosa. Por favor, me sugieren

+0

driver.find_elements_by_link_text ("MISCQA Misc Tests") lista de devoluciones, objeto no invocable – cval

Respuesta

17

Gracias por ayudarnos. Encontré la respuesta para mí. Idea dada por "Dan Niero"

El problema es que estoy usando driver.find_element[s] en lugar de driver.find_element. Entonces uno hace la diferencia. De hecho estoy siguiendo el eclipse :(. Obviamente lista driver.find_elements_by_link_text vuelve tan si envío haga clic en caso no lo puedo entender.

Gracias por ayudar y lo siento por mi mala pregunta

-Vikram

1

La parte de su código,

driver.find_elements_by_link_text("MISCQA Misc Tests") 

está volviendo hacia atrás una lista y no un objeto de la WebDriver selenio (lo que quiere, objeto de la clase que tiene la función "click()")

Lo más probable es, los elementos de la lista serían los objetos.

Imprima la lista después de esa parte del código y verifique si los elementos de la lista son los que necesita.

+0

Este es el resultado que obtengo [] – vkrams

+0

WebDriver driver = new InternetExplorerDriver(); driver.get (url); \t WebElement element = driver.findElement (By.linkText ("Pruebas diversas")); element.click(); - Este es el código en Java. Quiero simular lo mismo en Selenium Python – vkrams

+1

Sí. estos son objetos en si mismos Por lo tanto, simplemente itere sobre la lista y llame al método click() sobre ellos. Por ejemplo, driver.find_elements_by_link_text ("MISCQA Misc Tests") [0] .click() –

8

quizá driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click() u otro índice ...

no sé selenio, pero supongo find_elements_by_link_text es encontrar más de una cosa, o tal vez el método siempre devuelve una lista en lugar de un único objeto. Si está absolutamente seguro de que solo un objeto debe ser el resultado de su búsqueda, entonces simplemente use [0] como mencioné, si no puede suponer que solo habrá un objeto, entonces tendrá que encontrar un objeto más fuerte. estrategia

+0

Utilicé la declaración anterior pero no tuve suerte. ¿Crees que no importé una clase correcta para ello? – vkrams

+1

Vikram, no conozco este Selenio, pero el mensaje de error que recibiste indica claramente que recibiste una LISTA de vuelta, por lo que necesitas acceder a los elementos dentro de esa lista ... ¿Qué otro error obtienes cuando tratas de hacer eso? –

0

La declaración driver.find_elements_by_link_text("MISCQA Misc Tests") devuelve una lista de WebElement algunas de las cuales no puede hacer clic.

por lo que tendrá que recorrer la lista de WebElement de regresar y luego haga clic en los elementos que se puede hacer clic.

Puede verificar si se puede hacer clic en un elemento WebElement utilizando la función isClickable().

No publiqué el código porque no conozco Python. Espero que esto te ayude.

+0

isClickable() devuelve booleano por lo que no requiere. De todos modos encontré la respuesta – vkrams

0

si quieren solo elemento por lo que u puede utilizar:

driver.find_element_by_link_text("MISCQA Misc Tests") 

o si desea que la lista entera, entonces:

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

si el atributo de "Pruebas MISCQA Misc" sólo tiene una, Puede intentar cambiar elementos en elemento en este código 'driver.find_elements_by_link_text ("MISCQA Misc Tests")' Espero que el problema se solucione

Cuestiones relacionadas