2013-06-07 19 views
8

短いバージョン:チャットメッセージ(javaのSeleniumのBy.xpathを使用)を取得できますが、適切な場所に微笑みを入れたいと思います。Selenium - 要素とそのサブ要素のテキストの取得方法

長いバージョン: こんにちは、 私はこの興味深い問題に取り組んでいます。ここでは、Webブラウザからチャットメッセージを解析し、JavaとSeleniumを使って再作成する必要があります。メッセージの文章を解析するのに問題はありませんが、それを部分要素(笑顔のアイコン)と一緒に解析したいのです。手動のソースコードの解析以外のこれに対する良いアプローチはありますか?

ここで私はアクセスすることができるよ、単一のメッセージのためのコードです:

String msgTxt = we.findElement(By.xpath("//div[@id='messages_body']/div[" + (i + 1) + "]/div[@class='chat_msg_body message_text']")).getText();

マイ:

<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> 

は、ここで私はチャットメッセージのテキストを取得しています方法の例です結果:SomeMessageText SomeOtherText 結果:SomeMessageText:D SomeOtherText: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> 
    ... 
+0

これから私は "SomeMessageText SomeOtherText"しか得られません。それが問題です。私は間に笑みを浮かべたい。 – Lenymm

+0

私はquesitonを編集します:) – Lenymm

答えて

10

を試すことができます

driver.findElement(By.cssSelector(".chat_msg_body message_text")).getText() 

これは

SomeMessageTextを返す必要があります:DのSomeOtherTextを:D

それはそれはいくつかの空白を削除することが可能です、あなたはそれをやってみると確認する必要があります。

編集

あなたが潜在的なCSSの問題を扱っていると見てあなたは常に以下の試みることができる:CSSはすべての場所で物事を動かしていてもなTextContentを取得する必要があります

driver.findElement(By.cssSelector(".chat_msg_body message_text")).getAttribute("textContent") 

+0

メッセージテキストをどのように取得しているかを表示するために私の質問を編集しました。私は同様のアプローチをBy.xpathだけで使用していて、 "SomeMessageText SomeOtherText"を返します。 – Lenymm

+0

このXpathはかなり恐ろしいです。 "// div [@ id = 'messages_body']/div [" +(i + 1)+ " ]/div [@ class = 'chat_msg_body message_text'] "'なぜクラスを使用しないのですか?とにかくあなたの質問に、あなたはCSSを供給することはできますか?私の現在の推測では、あなたはテキストを隠してCSSの画像に置き換えています.Seleniumが動いているので、スパンは表示されていないので、テキストが返されません。 – Ardesco

+0

私は全体の構造の例を追加しました。あなたが私のxpathを改善する方法についてアドバイスできれば、私は本当に賛美したいと思います。私はそれも好きではありません:)私はchat_msgを含むdivをすべて調べ、より詳しい情報(所有者、日付、メッセージ)。 – Lenymm

0


1.私は
2、セレンIDEを開き、私が欲しいサイトからテキストを選択取得する
3.利用可能なコマンドを右クリックして使用してください
4.確認テキストを使用します。
5.録音を停止し、録音をwebdriverに変換します。
コードを取得します。シンプルで、いつも私のために働いた。私はあなたを理解していた場合
あなたは正しくあなただけの、例えば親要素のgetText()を実行する必要が

(new WebDriverWait(driver, 60)).until(ExpectedConditions 
       .textToBePresentInElement(By.id("Element ID"), 
         "Text to verify")); 
+0

これがうまくいても、メッセージの2つの部分の間に笑顔を浮かべるという問題は解決しません。 – Lenymm

関連する問題