Back

Explore Courses Blog Tutorials Interview Questions
0 votes
1 view
in DevOps and Agile by (19.7k points)

<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 its children?

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

1 Answer

0 votes
by (62.9k points)

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 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 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.

If you are interested to learn Selenium on a much deeper level and want to become a professional in the testing domain, check out Intellipaat’s Selenium certification!

Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.4k questions

29.7k answers

500 comments

94.2k users

Browse Categories

...