2013-06-07 4 views
8

लघु संस्करण: मैं चैट संदेश प्राप्त कर सकता हूं (जावा में सेलेनियम के बाय.एक्सपाथ का उपयोग करके) लेकिन मैं उचित जगहों पर मुस्कुराहट शामिल करना चाहता हूं।सेलेनियम - तत्व और उसके सबलेमेंट्स टेक्स्ट कैसे प्राप्त करें

लंबा संस्करण: हैलो, मैं इस दिलचस्प मुद्दे से निपट रहा हूं जहां मुझे वेब ब्राउज़र से चैट संदेश पार्स करने और जावा और सेलेनियम का उपयोग करके इसे फिर से बनाने की आवश्यकता है। मुझे संदेश के पाठ को पार्स करने में कोई समस्या नहीं है, लेकिन मैं इसे इसके सबलेमेंट्स (स्माइल आइकॉन) के साथ भी पार्स करना चाहता हूं। क्या मैन्युअल सोर्स कोड पार्सिंग को छोड़कर इसके लिए कोई अच्छा दृष्टिकोण है?

यहाँ एक ही संदेश है कि मैं का उपयोग करने में सक्षम हूँ के लिए एक कोड है:

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

मेरे नतीजा: कुछ मैसेजटेक्स्ट कुछ अन्य टेक्स्ट परिणाम मैं चाहता हूं: कुछ मैसेजटेक्स्ट: डी कुछ अन्य टेक्स्ट: डी

सीएसएस फ़ाइलें:

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

उस से मुझे केवल "कुछ संदेश टेक्स्ट कुछ अन्य टेक्स्ट" मिलता है। यही समस्या है।मैं बीच में स्माइली प्राप्त करना चाहता हूं। – Lenymm

+0

मैं quesiton संपादित करूँगा :) – Lenymm

उत्तर

10

कोशिश कर सकते हैं सही ढंग से तुम सिर्फ जैसे माता पिता तत्व पर एक gettext() करने की आवश्यकता

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

यह लौटना चाहिए

SomeMessageText: डी SomeOtherText: डी

यह यह कुछ सफेद स्थान को निकालना दे जाए, आप इसे जाने देने के लिए और देखने के लिए की आवश्यकता होगी।

संपादित

देखकर के रूप में आप संभावित सीएसएस समस्याओं के साथ काम कर रहे हैं तो आप हमेशा नीचे की कोशिश कर सकते:

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

कि textContent मिलना चाहिए, भले ही सीएसएस हर जगह बातें बढ़ रहा है।

+0

मैंने यह दिखाने के लिए अपना प्रश्न संपादित किया है कि मुझे संदेश टेक्स्ट कैसे प्राप्त हो रहा है। मैं केवल .xpath के साथ समान दृष्टिकोण का उपयोग कर रहा हूं और यह केवल "कुछ संदेश टेक्स्ट कुछ अन्य टेक्स्ट" देता है – Lenymm

+0

यह एक्सपैथ बहुत डरावना है "// div [@ id = 'message_body']/div [" + (i + 1) + " ]/div [@ class = 'chat_msg_body message_text'] "'आप कक्षा का उपयोग क्यों नहीं करते? वैसे भी आपके प्रश्न पर, क्या आप सीएसएस की आपूर्ति कर सकते हैं? मेरा वर्तमान अनुमान यह है कि आप टेक्स्ट को छुपा रहे हैं और इसे सीएसएस में एक छवि के साथ बदल रहे हैं और सेलेनियम स्पैन काम कर रहा है, यह दिखाई नहीं दे रहा है कि वह उस पाठ को वापस नहीं कर रहा है। – Ardesco

+0

मैंने पूरी संरचना का उदाहरण जोड़ा है, यदि आप मुझे मेरी xpath को बेहतर बनाने के बारे में सलाह दे सकते हैं, तो मुझे वास्तव में अपरिवर्तित करना होगा क्योंकि मुझे यह पसंद नहीं है :) मुझे उन सभी divs में जाना होगा जिनमें chat_msg है और अंदर देखें अधिक विशिष्ट जानकारी के लिए (मालिक, दिनांक, संदेश)। – Lenymm

0

मैं यह करने के लिए कैसे,
1. मैं सेलेनियम आईडीई खोलते हैं, तो
2. साइट है कि मैं चाहता हूँ से लेख का चयन
प्राप्त करने के लिए 3. राइट क्लिक करें और उपलब्ध कमांड का उपयोग करें
4. मान लें कि हम टेक्स्ट सत्यापित करने का उपयोग करते हैं।
5. रिकॉर्डिंग रोकें और रिकॉर्डिंग को वेबड्राइवर में कनवर्ट करें।
आपको अपना कोड मिलता है। यह आसान है, हमेशा मेरे लिए काम किया।
आप मैं तुम्हें समझ रहा हूँ तो

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

भले ही यह काम करता है, यह संदेश के 2 हिस्सों के बीच मुस्कान होने के मुद्दे को हल नहीं करता है। – Lenymm

संबंधित मुद्दे