Перейти к содержимому

Фотография

Selenium getText. Как достать текст только из родительского узла?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 11 мая 2011 - 06:01

Имеем следующую последовательность тегов:
<div id="parentID" class = "test">
     <div id="child">child text</div>
   parent text
</div>

При попытке извлечь текст только родительского узла selenium.getText("jquery=#parentID")получаем: child text parent text.

Как заставить селениум брать текст только родительского узла? :help:
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#2 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 11 мая 2011 - 07:16

решение в лоб -
получить сам элемент и очистить теговую структуру внутри средставми языка программирования, который используете (например, написать regexp)

из доков
getText
Gets the text of an element. This works for any element that contains text. This command uses either the textContent (Mozilla-like browsers) or the innerText (IE-like browsers) of the element, which is the rendered text shown to the user.

Смотрите что у вас за браузер и почему оно так работает
  • 0

#3 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 11 мая 2011 - 08:08

Варианты:
1. Получить текст родителя, получить текст ребенка, вырезать текст ребенка из текста родителя.
2. Написать кусок кода на JS, который клонирует родителя, потом находит в клонированном куске ребенка, удаляет его и берет текст клона.
3. То же самое, что в 2, но вместо написания кода на JS можно вытащить outerHtml родителя на клиентскую сторону и уже там произвести нужные манипуляции по удалению ребенка
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#4 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 11 мая 2011 - 08:10

А, да, забыл ещё один вариант:
4. Повысить тестопригодность приложения -- попросить разработчиков обернуть нужный вам текст тегом span :)
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#5 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 11 мая 2011 - 08:15

Спасибо) в общем как и подозревал без танцев с бубном не обойтись))) Но надежда умирает последней.
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#6 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 11 мая 2011 - 08:58

Можно также использовать XPath-локатор и выбрать нужную текстовую ноду (см. text()). В вашем случае локатор может выглядеть, например, так: "xpath=//div[@id='parentID']/text()[2]", getText() вернёт только "parent text".
  • 0

#7 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 13 мая 2011 - 08:59

Можно также использовать XPath-локатор и выбрать нужную текстовую ноду (см. text()). В вашем случае локатор может выглядеть, например, так: "xpath=//div[@id='parentID']/text()[2]", getText() вернёт только "parent text".


В данном случае getText возвращает пустую строку.
Будем вырезать ребенка из родителя :crazy:
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#8 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 13 мая 2011 - 11:00

Будем вырезать ребенка из родителя :crazy:

на мой взгляд самое оптимальное решение
  • 0

#9 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 13 мая 2011 - 11:09

В данном случае getText возвращает пустую строку.

Значит что-то не так делаете, должен быть только родительский текст. Проверял у себя. Вырезать - это костыль.
  • 0

#10 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 13 мая 2011 - 22:05


В данном случае getText возвращает пустую строку.

Значит что-то не так делаете, должен быть только родительский текст. Проверял у себя. Вырезать - это костыль.

Подтверждаю, должно работать.
Но про костыль не согласен.
Способ с получением текстового нода годится только в том случае, когда у родителя есть только один ребенок-тег, он находится в начале или в конце (так что текст не рвется на несколько частей), нет других вложенных нетекстовых нодов (комментариев, PI и т.д.).
Так что я бы не сказал, что клонирование родителя и удаление ребенка это более плохой способ, во всяком случае он универсальный.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#11 Jumper-amper

Jumper-amper

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Андрей Лукша

Отправлено 01 марта 2013 - 13:55

Имеем следующую последовательность тегов:

<div id="parentID" class = "test">
     <div id="child"/>
   parent text
</div>

При попытке извлечь текст только родительского узла selenium.getText("jquery=#parentID")получаем: child text parent text.

Как заставить селениум брать текст только родительского узла? :help:/>/>/>


Привет, у меня сложилась похожая ситуация.
По get.Text() - ничего не находит. Для поиска родительского элемента div использовал xPath

Так же использовал ещё 2 варината xPath, которые в фаер баге, непосредственно подсвечиват parent text: это 1) string(MyxPath) и 2) MyxPath/text() . При запуске вылетают ошибки :(
1)DOM XPath Exception 52
2)The result of the xpath expression "MyxPath/text()" is: [object Text]. It should be an element.

Какие есть варианты решения этой проблемы?
  • 0

#12 sawoy

sawoy

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Alex Savchuk

Отправлено 18 марта 2013 - 02:06

Подтверждаю, должно работать.
...


Присоединяюсь к вопросу Jumper-amper.

Алексей, а где именно это должно работать?
В RC или WD? Или в обоих?

Просто на данный момент WD в 4 из 5 драйверах поиск текстовой ноды возвращает ошибку
NoSuchElemenException или InvalidSelectorException.
Питоновский тест прикреплен.

Или я неправильно ищу текстовую ноду?

Прикрепленные файлы

  • Прикрепленный файл  t.txt   1,3К   8 Количество загрузок:

  • 0


Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных