<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>
Получение text object.
Автор
nicetrip
, 25 фев 2013 15:12
Сообщений в теме: 4
#1
Отправлено 25 февраля 2013 - 15:12
Подскажите, как достать текст (начинающийся с channel) без использования findElement(s)? Какую функцию можно использовать для получения текста не у веб элемента, а у text object?
#2
Отправлено 18 марта 2013 - 00:11
Привет.
Можно попробовать найти text nodes c помощью xpath:
но это решение не кроссбраузерное, например в ие9 не работает.
Другой вариант - найти div с помощью getElementById или подобного
и обойти у него все childNodes и т.д. Это повлечет за собой собственную реализацию
кроссбраузерного js кода.
Следующая итерация - загрузка какой-либо js библиотеки, реализующей поиск элемента,
и ее использование.
Более корректное и простое решение, по-моему, это, используя selenium, найти элемент,
получить его текст и распарсить, зная то, что каждый кусок начинается с channel.
Желательно было бы узнать требование или постановку задачи,
которая привела к необходимости доступа к text node.
Можно попробовать найти 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.
#3
Отправлено 18 марта 2013 - 07:05
Задача: организовать проверку списка групп каналов, в каждой из которых присутствуют каналы (скрытый текст), для проверки корректности изменений через UI.
Проблема в том, что текст каналов мне никак не удается получить, не открыв перед этим скрытый текст. В firepath нужный элемент обнаруживается в любом варианте, а на практике - только в случае открытия скрытого текста. А список может состоять из сотен записей, из-за чего процесс проверки с открытием скрытого текста становится длительным.
Сейчас у меня реализовано таким топорным способом (в java):
Разбиение на каналы делаю по "\n" в channelString.
Проблема в том, что текст каналов мне никак не удается получить, не открыв перед этим скрытый текст. В 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
#4
Отправлено 18 марта 2013 - 11:44
если не ошибаюсь, Баранцев говорил, что в Фаерфоксе можно работать и с невидимыми элементами. Думаю стоит спросить у него
#5
Отправлено 18 марта 2013 - 12:19
если не ошибаюсь, Баранцев говорил, что в Фаерфоксе можно работать и с невидимыми элементами. Думаю стоит спросить у него
До него не достучаться :)
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных