In Selenium for Python, how can I get an element's attribute rather than its property? In Selenium for Python, how can I get an element's attribute rather than its property? selenium selenium

In Selenium for Python, how can I get an element's attribute rather than its property?


get_attribute(attribute_name)

get_attribute(attribute_name) gets the given attribute or property of the element.

This method will first try to return the value of a property with the given name. If a property with that name doesn’t exist, it returns the value of the attribute with the same name. If there’s no attribute with that name, None is returned.

Values which are considered truthy, that is equals true or false, are returned as booleans. All other non-None values are returned as strings. For attributes or properties which do not exist, None is returned.

  • Args:

    attribute_name - Name of the attribute/property to retrieve.
  • Example:

    # Check if the "active" CSS class is applied to an element.is_active = "active" in target_element.get_attribute("class")   

get_property(property_name)

get_property(property_name) gets the given property of the element.

  • Args:

    property_name - Name of the property to retrieve.
  • Example:

    text_length = target_element.get_property("text_length")

Still sounds similar? Read below ...


Attributes and properties

When the browser loads the page, it parses the HTML and generates DOM objects from it. For element nodes, most standard HTML attributes automatically become properties of DOM objects.

For instance, if the tag is:

<body id="page">

then the DOM object has body.id="page".

Note: The attribute-property mapping is not one-to-one!


HTML attributes

In HTML, tags may have attributes. When the browser parses the HTML to create DOM objects for tags, it recognizes standard attributes and creates DOM properties from them.

So when an element has id or another standard attribute, the corresponding property gets created. But that doesn’t happen if the attribute is non-standard.

Note: A standard attribute for one element can be unknown for another one. For instance, type is standard attribute for <input> tag, but not for <body> tag. Standard attributes are described in the specification for the corresponding element class.

So, if an attribute is non-standard, there won’t be a DOM-property for it. In that case all attributes are accessible by using the following methods:

  • elem.hasAttribute(name): checks for existence.
  • elem.getAttribute(name): gets the value.
  • elem.setAttribute(name, value): sets the value.
  • elem.removeAttribute(name): removes the attribute.

An example of reading a non-standard property:

<body something="non-standard">  <script>    alert(document.body.getAttribute('something')); // non-standard  </script></body>

Property-attribute synchronization

When a standard attribute changes, the corresponding property is auto-updated, and (with some exceptions) vice versa. But there are exclusions, for instance input.value synchronizes only from attribute -> to property, but not back. This feature actually comes in handy, because the user may modify value, and then after it, if we want to recover the "original" value from HTML, it’s in the attribute.