#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()