26

我正在尝试使用 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()

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

4

8 回答 8

74

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

问题是,我使用driver.find_element[s]的是driver.find_element. 所以一个 s 有所作为并调用了错误的方法。事实上,我正在关注 eclipse 自动完成 :(。显然driver.find_elements_by_link_text返回列表,所以如果我发送点击事件,它不会理解。

感谢您的帮助,并对我的坏问题感到抱歉

-维克拉姆

于 2012-06-27T09:42:24.067 回答
16

也许driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click()或另一个索引...

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

于 2012-06-27T09:27:30.100 回答
4

参考定位元素文档,这里是一个解释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()
于 2020-04-03T06:30:19.437 回答
2

你的代码的一部分,

driver.find_elements_by_link_text("MISCQA Misc Tests")

正在返回一个列表,而不是 selenium webdriver 的对象(你想要的,具有函数 "click()" 的类的对象)。

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

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

于 2012-06-27T09:25:34.990 回答
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()
于 2016-07-27T12:21:43.953 回答
1

如果“MISCQA Misc Tests”的属性只有一个,你可以尝试在这段代码中将elements改为element 'driver.find_elements_by_link_text("MISCQA Misc Tests")' 希望问题能解决

于 2017-04-14T07:54:01.580 回答
0

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

因此,您必须遍历返回的 WebElement 列表,然后单击那些可单击的元素。

isClickable()您可以使用该函数检查 WebElement 是否可点击。

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

于 2012-06-27T09:43:39.503 回答
0

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

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

此代码抛出“AttributeError:'list'对象没有属性'click'错误将appium库降级到以前的版本。1.4.6,这在我的情况下有效。

于 2019-04-15T13:00:44.177 回答