selenium python send_key error: list object has no attribute

Question:

Helo,

my xpath does validate in firePath but when I try to send _key I get an error.

userID = driver.find_elements_by_xpath(".//*[@id='UserName']")

userID.send_keys('username')

AttributeError: ‘list’ object has no attribute ‘send_keys’

Can someone toss me a bone please?

Asked By: rearThing

||

Answers:

You are getting a List of webElements with driver.find_elements_by_xpath(".//*[@id='UserName']") which of course not a single element and does not have send_keys() method. use find_element_by_xpath instead. Refer to this api doc.

userID = driver.find_element_by_xpath(".//*[@id='UserName']")

userID.send_keys('username')
Answered By: Saifur

This error occurs when one tries to perform action on list instead of element. I was getting similar error when I was trying to click on button to submit credentials. I found the work around by emulating pressing enter key on keyboard. e.g. find any element on page using xpath/css, etc. and send enter key.
driver.find_element_by_id('test_id').send_keys(Keys.ENTER)

Answered By: user2661518

I had the same problem – so I just did:

userID[0].send_keys('username')

Worked for me

Answered By: Dozon Higgs

instead of this:

userID = driver.find_elements_by_xpath(".//*[@id='UserName']")

userID.send_keys('username')

try:

userID = driver.find_element_by_xpath(".//*[@id='UserName']")

userID.send_keys('username')

I had the same issues and that worked for me.

Answered By: oriolowonancy

driver.find_element_by_xpath(".//*[@id='UserName']").send_keys('username')

find_element without s.

Answered By: sabi Otman

Please replace your code with the following code because you like addressing the first component of your list, not whole list.

userID = driver.find_elements_by_ID('username')[0]

userID.send_keys('username')

or delete “s” from find_elements_by_ID such as follow:

userID = driver.find_element_by_ID('username')

userID.send_keys('username')
Answered By: Reza_nadimi

I was facing the same problem while using to input for Instagram, tried the time module to sleep for 2 seconds then it started working for me. Problem was that before loading the website bot starts to find that path and report errors.

import time
time.sleep(2)
Answered By: sumit

when we select multiple element we type elements (s), its return a list. that have no "send_keys" single element have no s. that have "send_keys"

from selenium import webdriver
from selenium.webdriver.common.by import By

userID = driver.find_elements( By.XPATH, "//div[@title='Username']")
userID[0].send_keys('username')
Answered By: vyshnav vishnu
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.