【问题标题】:AttributeError: 'list' object has no attribute 'click' - Selenium WebdriverAttributeError: 'list' 对象没有属性 'click' - Selenium Webdriver
【发布时间】:2012-06-28 16:42:44
【问题描述】:

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

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

【问题讨论】:

  • driver.find_elements_by_link_text("MISCQA Misc Tests") 返回列表,而不是可调用对象

标签: python selenium webdriver


【解决方案1】:

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

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

感谢您的帮助,对我的问题表示抱歉

-维克拉姆

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      此代码抛出“AttributeError: 'list' object has no attribute 'click' 错误 将 appium 库降级到以前的版本。 1.4.6 这对我来说是有效的。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

            • 我使用了上述语句,但没有运气。你认为我没有为它导入正确的类吗?
            • Vikram,我不知道这个 Selenium,但是你得到的错误信息清楚地表明你得到了一个 LIST,所以你需要访问该列表中的元素......你还有什么错误当你尝试这样做时得到了什么?
            【解决方案7】:

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

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

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

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

            【讨论】:

            • isClickable() 返回布尔值,因此不需要。反正我找到了答案
            【解决方案8】:

            你的代码部分,

            driver.find_elements_by_link_text("MISCQA Misc Tests")
            

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

            很可能,列表的元素就是对象。

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

            【讨论】:

            • 这是我得到的输出 []
            • WebDriver driver = new InternetExplorerDriver(); driver.get(url); WebElement element = driver.findElement(By.linkText("Miscellaneous Tests"));元素.click(); - 这是Java中的代码。我想在 Selenium Python 中进行同样的模拟
            • 是的。这些是对象本身。因此,只需遍历列表并调用它们的 click() 方法。例如,driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click()
            • ^我的意思不是他期望的 selenium webdriver 的对象。编辑使其更精确。谢谢你指出这一点。 :)
            猜你喜欢
            • 2019-05-28
            • 2018-12-20
            • 2022-09-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-27
            • 2022-06-27
            相关资源
            最近更新 更多