我正在尝试使用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()
我想我错过了一些东西。请建议我
答案 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 这对我来说是有效的。