2013-06-07 28 views
8

Phiên bản ngắn: Tôi có thể nhận được tin nhắn trò chuyện (sử dụng By.xpath của selenium trong java) nhưng tôi muốn đưa những nụ cười vào đúng vị trí.Selenium - cách lấy phần tử và phần con của nó văn bản

Phiên bản dài hơn: Xin chào, Tôi đã giải quyết vấn đề thú vị này khi tôi cần phân tích tin nhắn trò chuyện từ trình duyệt web và tạo lại nó bằng java và selenium. Tôi đã không có vấn đề phân tích cú pháp văn bản của tin nhắn nhưng tôi muốn phân tích nó với nó subelements (biểu tượng nụ cười) là tốt. Có cách tiếp cận nào tốt cho điều này ngoại trừ phân tích cú pháp mã nguồn thủ công không?

Dưới đây là một mã cho một thông điệp duy nhất mà tôi có thể truy cập:

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

Dưới đây là một ví dụ về cách tôi nhận được tin nhắn văn bản chat:

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

My kết quả: SomeMessageText SomeOtherText Kết quả tôi muốn: SomeMessageText: D SomeOtherText: D

file 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 

Cấu trúc:

<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

Từ đó tôi chỉ nhận được "SomeMessageText SomeOtherText". Đó chính là vấn đề.Tôi muốn có mặt cười ở giữa. – Lenymm

+0

Tôi sẽ chỉnh sửa các quesiton :) – Lenymm

Trả lời

10

Nếu tôi hiểu bạn một cách chính xác bạn chỉ cần thực hiện một gettext() trên các yếu tố phụ huynh ví dụ

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

này sẽ trả về

SomeMessageText: D SomeOtherText: D

Có thể nó có thể loại bỏ một số khoảng trắng, bạn sẽ cần phải cung cấp cho nó một đi và xem.

Sửa

Thấy như bạn đang đối phó với vấn đề CSS tiềm năng bạn luôn có thể thử dưới đây:

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

Điều đó sẽ giúp các textContent ngay cả khi CSS đang chuyển động vật ở khắp mọi nơi.

+0

Tôi đã chỉnh sửa câu hỏi của mình để cho biết cách tôi nhận được nội dung tin nhắn. Tôi đang sử dụng cách tiếp cận tương tự chỉ với By.xpath và nó trả về chỉ "SomeMessageText SomeOtherText" – Lenymm

+0

Xpath này là khá horrid '"// div [@ id =' messages_body ']/div [" + (i + 1) + " ]/div [@ class = 'chat_msg_body message_text'] "'tại sao bạn không sử dụng lớp học? Dù sao cho câu hỏi của bạn, bạn có thể cung cấp CSS không? Dự đoán hiện tại của tôi là bạn đang ẩn văn bản và thay thế bằng một hình ảnh trong CSS và khi Selenium đang thực hiện các nhịp không nhìn thấy, nó không trả lại văn bản đó. – Ardesco

+0

Tôi đã thêm ví dụ về toàn bộ cấu trúc tôi thực sự thích hợp nếu bạn có thể tư vấn cho tôi về cách cải thiện xpath của tôi vì tôi không thích nó :) Tôi cần phải đi qua tất cả các div có chứa chat_msg và xem bên trong để biết thêm thông tin cụ thể (chủ sở hữu, ngày, tin nhắn). – Lenymm

0

Làm thế nào tôi làm điều này,
1. Tôi mở Selenium IDE,
2. chọn văn bản từ các trang web mà tôi muốn để nhận được
3. Nhấp chuột phải và sử dụng các lệnh có sẵn
4. Giả sử chúng tôi sử dụng xác minh văn bản.
5. Dừng ghi và chuyển đổi bản ghi thành trình quản trị web.
Bạn nhận được mã của mình. Nó đơn giản, luôn làm việc cho tôi.
bạn có thể thử

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

Ngay cả khi điều này làm việc nó không giải quyết vấn đề có một nụ cười ở giữa 2 phần của tin nhắn. – Lenymm

Các vấn đề liên quan