AttributeError:'list'对象没有属性'click' - Selenium Webdriver

时间:2012-06-27 09:19:17

标签: python selenium webdriver

我正在尝试使用python在Selenium webdriver中使用click命令。但我收到以下错误。有人可以帮助我吗?

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'

这是我的程序

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

我想我错过了一些东西。请建议我

8 个答案:

答案 0 :(得分:28)

感谢您的帮助。我找到了自己的答案。 “Dan Niero”给出的想法

问题是,我使用的是driver.find_element[s]而不是driver.find_element。所以一个人有所作为。事实上我正在关注日食:(。显然driver.find_elements_by_link_text返回列表所以如果我发送点击事件它不会理解。

感谢帮助和抱歉我的坏问题

-Vikram

答案 1 :(得分:10)

可能driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click()或其他索引......

我不知道Selenium,但我猜find_elements_by_link_text找不止一件事,或者该方法总是返回一个列表而不是一个对象。如果你绝对确定只有一个对象应该是你搜索的结果,那么就像我提到的那样只使用[0],如果你不能假设只有一个对象,那么你需要想出一个更强大的对象。策略

答案 2 :(得分:2)

如果您想要单个元素,那么您可以使用:

driver.find_element_by_link_text("MISCQA Misc Tests")

或者如果你想要整个清单,那么:

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

答案 3 :(得分:1)

代码的一部分,

driver.find_elements_by_link_text("MISCQA Misc Tests")

返回一个列表,而不是selenium webdriver的对象(你想要的,具有“click()”功能的类的对象)。

最有可能,列表的元素将是对象。

在该部分代码之后打印列表,并检查列表中的元素是否是您需要的元素。

答案 4 :(得分:1)

参考locating elements documentation,这里是对find_elements_*的解释:

要查找多个元素(这些方法将返回一个列表)

因此,要使用以下索引访问特定元素:

#first element
driver.find_elements_by_xpath("xpath")[0].click()

或者您可以使用循环访问列表中的所有元素:

#assumed to click the checkbox
chks = driver.find_elements_by_xpath("xpath")
for chk in chks:
    chk.click()

答案 5 :(得分:0)

语句driver.find_elements_by_link_text("MISCQA Misc Tests") 会返回 WebElement 列表,其中一些列表可能无法点击。

所以你必须遍历返回的WebElement列表,然后点击那些可点击的元素。

您可以使用isClickable()功能检查WebElement是否可点击。

我没有发布代码,因为我不懂Python。希望这对你有所帮助。

答案 6 :(得分:0)

如果“MISCQA Misc Tests”的属性只有一个,您可以尝试在此代码'driver.find_elements_by_link_text(“MISCQA Misc Tests”)中将元素更改为元素 希望问题能得到解决

答案 7 :(得分:0)

我发现以下解决方案是我使用appiumrobotlibaray版本1.5,其中

@{elemet}    get webelements     ${elemets}
click element  @{elemet}[1]

此代码抛出“ AttributeError:'列表'对象没有属性'点击'错误 将appium库降级到以前的版本。 1.4.6 这对我来说是有效的。