How can I get the current contents of an element in webdriver
Asked Answered
R

5

82

I must be thinking about this wrong.

I want to get the contents of an element, in this case a formfield, on a page that I am accessing with Webdriver/Selenium 2

Here is my broken code:

 Element=driver.find_element_by_id(ElementID)
 print Element
 print Element.text

here is the result:

<selenium.webdriver.remote.webelement.WebElement object at 0x9c2392c>

(Notice the blank line) I know that element has contents since I just stuffed them in there with the previous command using .sendkeys and I can see them on the actual web page while the script runs.

but I need to get the contents back into data.

What can I do to read this? Preferably in a generic fashion so that I can pull contents from varied types of elements.

Rap answered 20/4, 2012 at 18:26 Comment(2)
what kind of element is it? If it's an input element you need the attribute "value" instead of textFeodore
Ah, Value could be the solution. Will be trying.Rap
S
91

I believe prestomanifesto was on the right track. It depends on what kind of element it is. You would need to use element.get_attribute('value') for input elements and element.text to return the text node of an element.

You could check the WebElement object with element.tag_name to find out what kind of element it is and return the appropriate value.

This should help you figure out:

driver = webdriver.Firefox()
driver.get('http://www.w3c.org')
element = driver.find_element_by_name('q')
element.send_keys('hi mom')

element_text = element.text
element_attribute_value = element.get_attribute('value')

print element
print 'element.text: {0}'.format(element_text)
print 'element.get_attribute(\'value\'): {0}'.format(element_attribute_value)
driver.quit()
Silk answered 21/4, 2012 at 14:12 Comment(1)
Does this same method works if there are multiple classes in a row, and you want to get the text of each class in that row?Infidelity
A
72
element.get_attribute('innerHTML')
Acquittance answered 27/3, 2017 at 13:31 Comment(3)
really useful command to get the attributes that do not actually appear on the page such as hrefs etc. plus 1Eupheemia
to get the element as well: element.get_attribute('outerHTML')Fara
Found a Winner!Fact
K
4

I know when you said "contents" you didn't mean this, but if you want to find all the values of all the attributes of a webelement this is a pretty nifty way to do that with javascript in python:

everything = b.execute_script(
    'var element = arguments[0];'
    'var attributes = {};'
    'for (index = 0; index < element.attributes.length; ++index) {'
    '    attributes[element.attributes[index].name] = element.attributes[index].value };'
    'var properties = [];'
    'properties[0] = attributes;'
    'var element_text = element.textContent;'
    'properties[1] = element_text;'
    'var styles = getComputedStyle(element);'
    'var computed_styles = {};'
    'for (index = 0; index < styles.length; ++index) {'
    '    var value_ = styles.getPropertyValue(styles[index]);'
    '    computed_styles[styles[index]] = value_ };'
    'properties[2] = computed_styles;'
    'return properties;', element)

you can also get some extra data with element.__dict__.

I think this is about all the data you'd ever want to get from a webelement.

Kneeland answered 14/9, 2018 at 18:23 Comment(0)
G
1

My answer is based on this answer: How can I get the current contents of an element in webdriver just more like copy-paste.

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://www.w3c.org')
element = driver.find_element_by_name('q')
element.send_keys('hi mom')

element_text = element.text
element_attribute_value = element.get_attribute('value')

print (element)
print ('element.text: {0}'.format(element_text))
print ('element.get_attribute(\'value\'): {0}'.format(element_attribute_value))


element = driver.find_element_by_css_selector('.description.expand_description > p')
element_text = element.text
element_attribute_value = element.get_attribute('value')

print (element)
print ('element.text: {0}'.format(element_text))
print ('element.get_attribute(\'value\'): {0}'.format(element_attribute_value))
driver.quit()
Gasket answered 20/9, 2017 at 9:41 Comment(0)
O
-13

In Java its Webelement.getText() . Not sure about python.

Obsolescent answered 21/4, 2012 at 0:31 Comment(1)
The question tag implies that it is about pythonSeedling

© 2022 - 2024 — McMap. All rights reserved.