How to get text of an element in Selenium WebDriver (via the Python api) without including child element text?

0
0
<div id="a">This is some
<div id="b">text</div>
</div>

Getting “This is some” is non-trivial. For instance, this returns “This is some text”:

driver.find_element_by_id('a').text

How does one, in a general way, get the text of a specific element without including the text of it’s children?

(I’m providing an answer below but will leave the question open in case someone can come up with a less hideous solution).

  • You must to post comments
0
0

Here’s a general solution:

def get_text_excluding_children(driver, element):
return driver.execute_script("""
return jQuery(arguments[0]).contents().filter(function() {
return this.nodeType == Node.TEXT_NODE;
}).text();
"""
, element)

The element passed to the function can be something obtained from the find_element...() methods (i.e. it can be a WebElement object).

Or if you don’t have jQuery or don’t want to use it you can replace the body of the function above above with this:

return self.driver.execute_script("""
var parent = arguments[0];
var child = parent.firstChild;
var ret = "";
while(child) {
if (child.nodeType === Node.TEXT_NODE)
ret += child.textContent;
child = child.nextSibling;
}
return ret;
"""
, element)

I’m actually using this code in a test suite.

  • You must to post comments
Showing 1 result
Your Answer
Post as a guest by filling out the fields below or if you already have an account.
Name*
E-mail*
Website