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!