Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: 'str' object is not callable using Selenium through Python

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()
like image 235
szymond45 Avatar asked Apr 03 '19 06:04

szymond45


2 Answers

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")
    
like image 147
undetected Selenium Avatar answered Oct 08 '22 17:10

undetected Selenium


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.

like image 38
Guy Avatar answered Oct 08 '22 18:10

Guy