TypeError:使用Selenium Python通过send_key发送文本时,FirefoxWebElement'类型的对象没有len()错误

问题描述

代码试验:

lists = driver.find_elements_by_xpath("//*[@class= 'gradeA']/td[1]")
for list_item in lists:
    print(list_item.text)
    driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item)

以下是错误:

Traceback (most recent call last):
      File "C:/Users/Eventbuizz-t460-ki/PycharmProjects/pythonProject/pythonSelenium/super admin.py", line 31, in <module>
        y.send_keys(list_item)
      File "C:UsersEventbuizz-t460-kiAppDataLocalProgramsPythonPython36libsite-packagesseleniumwebdriveremotewebelement.py", line 348, in send_keys
        {'text': "".join(keys_to_typing(value)),
      File "C:UsersEventbuizz-t460-kiAppDataLocalProgramsPythonPython36libsite-packagesseleniumwebdrivercommonutils.py", line 150, in keys_to_typing
        for i in range(len(val)):
    TypeError: object of type 'FirefoxWebElement' has no len()
    
    Process finished with exit code 1

解决方案

您正在使用GeckoDriver和firefoxfind_elements_by_xpath()返回FirefoxWebElement的列表。

您可以循环访问列表:

for list_item in lists:

并打印循环内的文本:

print(list_item.text)

但您不能在任何元素内通过send_keys()发送任何单独的FirefoxWebElement。

因此您可以看到:

TypeError: object of type 'FirefoxWebElement' has no len()

解决方案

您需要发送元素文本,而不是通过send_keys()发送FirefoxWebElement:

driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item.text)

相关文章