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

Фотография

Получение text object.


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

#1 nicetrip

nicetrip

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

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Алексей Танана


Отправлено 25 февраля 2013 - 15:12

Подскажите, как достать текст (начинающийся с channel) без использования findElement(s)? Какую функцию можно использовать для получения текста не у веб элемента, а у text object?

<td>
<font size="2">
<a onclick="$('#hide_block253').toggle()" href="javascript:void(0)">Показать</a>
<div id="hide_block253" style="display:none">
channel-6-16286
<br>
channel-15-63578
<br>
channel_54027
<br>
</div>
</font>
</td>

  • 0

#2 sawoy

sawoy

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

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

Отправлено 18 марта 2013 - 00:11

Привет.

Можно попробовать найти text nodes c помощью xpath:

js = """
var elements = document.evaluate("//div[@id='hide_block253']/text()", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var r = [];
for (var i = 0; i < elements.snapshotLength; i++) {
  r.append(elements[i].nodeValue);
}
return r;
"""
driver.execute_script(js)

но это решение не кроссбраузерное, например в ие9 не работает.

Другой вариант - найти div с помощью getElementById или подобного
и обойти у него все childNodes и т.д. Это повлечет за собой собственную реализацию
кроссбраузерного js кода.

Следующая итерация - загрузка какой-либо js библиотеки, реализующей поиск элемента,
и ее использование.

Более корректное и простое решение, по-моему, это, используя selenium, найти элемент,
получить его текст и распарсить, зная то, что каждый кусок начинается с channel.

Желательно было бы узнать требование или постановку задачи,
которая привела к необходимости доступа к text node.
  • 1

#3 nicetrip

nicetrip

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

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Алексей Танана


Отправлено 18 марта 2013 - 07:05

Задача: организовать проверку списка групп каналов, в каждой из которых присутствуют каналы (скрытый текст), для проверки корректности изменений через UI.
Проблема в том, что текст каналов мне никак не удается получить, не открыв перед этим скрытый текст. В firepath нужный элемент обнаруживается в любом варианте, а на практике - только в случае открытия скрытого текста. А список может состоять из сотен записей, из-за чего процесс проверки с открытием скрытого текста становится длительным.

Сейчас у меня реализовано таким топорным способом (в java):
findElement(By.xpath("(//a[contains(text(),'Show')])[" + indexOnPage + "]")).click();
String locator = findElement(By.xpath("//tbody/tr[" + indexOnPage + "]/td[5]/font/div")).getAttribute("id");
String channelString = findElement(By.id(locator)).getText();

Разбиение на каналы делаю по "\n" в channelString.

Сообщение отредактировал nicetrip: 18 марта 2013 - 12:18

  • 0

#4 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 18 марта 2013 - 11:44

если не ошибаюсь, Баранцев говорил, что в Фаерфоксе можно работать и с невидимыми элементами. Думаю стоит спросить у него
  • 0

#5 nicetrip

nicetrip

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

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Алексей Танана


Отправлено 18 марта 2013 - 12:19

если не ошибаюсь, Баранцев говорил, что в Фаерфоксе можно работать и с невидимыми элементами. Думаю стоит спросить у него


До него не достучаться :)
  • 0


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

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