8

When I try to do code shown below I get error :

TypeError: 'str' object is not callable

email2_elem = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/input[1]").text()

3 Answers 3

18

This error message...

TypeError: 'str' object is not callable

...implies that your program have invoked a function() which is actually a property.

As per selenium.webdriver.remote.webelement text is a property.

So, you can't invoke text() as a function. Hence you see the error.

Solution

You can use either of the following solutions:

  • Use text property:

    email2_elem = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/input[1]").text
    
  • Use get_attribute("innerHTML") method:

    email2_elem = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/input[1]").get_attribute("innerHTML")
    
Sign up to request clarification or add additional context in comments.

2 Comments

second method with get_atribute does same thing as just text?
@szymond45 Yes, imo, get_attribute("innerHTML") is much more promising.
5

text is a property, not a function. Use it without ()

element.text

As a side note, absolute xpath "/html/body/..." is a bad approach, it makes fragile locator. You should try locating the elements by unique attribute (id, name, class etc), or atleast relative xpath.

Comments

1

Try this

find_element(By.XPATH, "class name")

Refer this documentation link

https://selenium-python.readthedocs.io/locating-elements.html#locating-elements

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.