Как найти XPath для вне тега?

#selenium #xpath

Вопрос:

 <div id="fileuploadsuccess" style="font-size: 14px; width: 1086px;" ng-style="{'top':alertStyle 'px','width':alertWidth 'px'}" class="autoAdjustAlert bold animated bounce ng-binding ng-scope alert alert-success" ng-class="{'alert alert-success': alert.type == 'success','alert alert-danger':alert.type == 'danger'}" ng-repeat="alert in alerts">

<a class="close" data-dismiss="alert" aria-label="close">×</a> 

Instruction successfully added.

</div>
 

Я хочу, чтобы текст «Инструкция успешно добавлена». в одиночку, когда я попробовал сам, его напечатали так, как эта

инструкция x успешно добавлена.

Комментарии:

1. Поделитесь соответствующим HTML

Ответ №1:

Поскольку также могут быть некоторые пробелы-узлы, я бы использовал:

 //div[@id='fileuploadsuccess']/a/following-sibling::text()
 

Ответ №2:

Вы можете удалить текст дочернего узла из общего текста следующим образом:

 entire_text = driver.find_element_by_xpath('//div[@id="fileuploadsuccess"]').text
child_text = driver.find_element_by_xpath('//div[@id="fileuploadsuccess"]//a[@class="close"]').text

parent_text = entire_text.replace(child_text, '')
 

Ответ №3:

Когда вы выбираете только div элемент и запрашиваете его строковое значение, он объединит все text() узлы-потомки (включая x внутреннюю часть <a> элемента.

Вам просто нужны непосредственные text() дети этого div :

 //div[@id='fileuploadsuccess']/text()