Selenium - как получить текст элемента и его подэлементов
короткая версия: я могу получить сообщение чата(используя selenium.xpath на java), но я хочу включить улыбки в соответствующие места.
более длинная версия: Привет, Я занимаюсь этой интересной проблемой, где мне нужно разобрать сообщение чата из веб-браузера и воссоздать его с помощью java и selenium. У меня нет проблем с разбором текста сообщения, но я хочу разобрать его с его подэлементами (значки улыбки). Есть ли какой-либо хороший подход к этому, кроме ручного источника анализ кода?
вот код для одного сообщения, к которому я могу получить доступ:
<div class="chat_msg chat_msg_caller ">
<div class="chat_msg_head">
<span class="chat_msg_author">
SomeAuthor
</span>
<span class="chat_msg_date">
SomeDate
</span>
</div>
<div class="chat_msg_body message_text">
SomeMessageText
<span class="sml-icon biggrin">
<span>
:D
</span>
</span>
SomeOtherText
<span class="sml-icon biggrin">
<span>
:D
</span>
</span>
</div>
</div>
вот пример того, как я получаю текст сообщения чата:
String msgTxt = we.findElement(By.xpath("//div[@id='messages_body']/div[" + (i + 1) + "]/div[@class='chat_msg_body message_text']")).getText();
мой результат: SomeMessageText SomeOtherText Результат я хочу:SomeMessageText: D Somethertext: D
CSS-файлы:
http://badoocdn.com/v2/-/-/css/base-ltr.268.css
http://badoocdn.com/v2/-/-/css/page.chat-ltr.22.css
http://badoocdn.com/v2/-/-/css/popup.messenger-ltr.230.css
структура:
<div id="messages_body">
<div id="pager" class="pages"> … </div>
<div class="chat_msg chat_msg_caller ">
<div class="chat_msg_head">
<span class="chat_msg_author"> … </span>
<span class="chat_msg_date"> … </span>
</div>
<div class="chat_msg_body message_text"> … </div>
</div>
<div class="me chat_msg chat_msg_owner "> … </div>
<div class="chat_msg chat_msg_caller "> … </div>
<div class="me chat_msg chat_msg_owner "> … </div>
<div class="chat_msg chat_msg_caller "> … </div>
<div class="chat_msg chat_msg_caller "> … </div>
<div class="chat_msg chat_msg_caller "> … </div>
...
2 ответов
Если я правильно вас понимаю, вам просто нужно выполнить getText () на родительском элементе, например
driver.findElement(By.cssSelector(".chat_msg_body message_text")).getText()
Это должно возвратить
SomeMessageText :D SomeOtherText: D
возможно, он может удалить некоторые пробелы, вам нужно будет дать ему пойти и посмотреть.
редактировать
видя, как вы имеете дело с потенциальными проблемами CSS, вы всегда можете попробовать ниже:
driver.findElement(By.cssSelector(".chat_msg_body message_text")).getAttribute("textContent")
Это должно получить textContent, даже если CSS перемещает вещи повсюду.
Как я это делаю,
1. Я открываю Selenium IDE,
2. выделите текст с сайта, который я хочу сделать
3. Щелкните правой кнопкой мыши и используйте доступные команды
4. Допустим, мы используем verify text.
5. Остановите запись и преобразуйте запись в webdriver .
Ты получишь свой код. Это просто, всегда срабатывало для меня.
вы можете попробовать
(new WebDriverWait(driver, 60)).until(ExpectedConditions
.textToBePresentInElement(By.id("Element ID"),
"Text to verify"));