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"));