2017-09-10 4 views
0

Wie kann ich überprüfen, ob der Text eines neuen anhängigen Elements gleich der Zeichenfolge ist? Ich möchte ein Wort in einem Chat finden, aber es sieht so aus, als würde ich auf dasselbe Element zeigen.Wie findet man eine dynamisch hinzugefügte Zeichenfolge?

while (true){ 
     try { 
      WebDriverWait wait = new WebDriverWait(driver, 5); 
      wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//span[@class='msg-body']"), "Hello")); 
      System.out.println("Found Hello"); 

     } catch (Exception e) { 
      System.out.println("Nothing found"); 
     } 
      Thread.sleep(100); 
    } 

Der Teil des Chat-HTML

<li class="msg-chat-message"> 
      <span class="user role-user"> 
       <img class="user-logo" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/d6/d6e4e034324f1e2abe161a8239f243a2f48e08e9.jpg"> 
        <div class="user-level-container"> 
         <div class="user-level level-item level-70">75</div> 
        </div> 
        <span class="drop-down-container _3_options"> 
         <ul class="user-dropdown-invisible"> 
          <li class="user-dropdown-entry">Stats</li> 
          <li class="user-dropdown-entry">Tip</li> 
          <li class="user-dropdown-entry">Ignore</li> 
          <!-- react-text: 928 --> 
          <!-- /react-text --> 
         </ul> 
        </span> 
        <span class="user-name"> 
         <span> 
          <!-- react-text: 931 -->RePo 
          <!-- /react-text --> 
          <span class="icon-balanceicon namepromotion" title="This user has activated the Name Promotion"></span> 
          <!-- react-text: 933 --> 
          <!-- /react-text --> 
         </span> 
         <!-- react-text: 934 -->: 
         <!-- /react-text --> 
        </span> 
       </span> 
       <span class="msg-body">all of you</span> 
      </li> 
      <li class="msg-chat-message"> 
       <span class="user role-user"> 
        <img class="user-logo" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/1a/1a5e80deb58be484e49ea9a9434faa7a6528654b.jpg"> 
         <div class="user-level-container"> 
          <div class="user-level level-item level-50">50</div> 
         </div> 
         <span class="drop-down-container _3_options"> 
          <ul class="user-dropdown-invisible"> 
           <li class="user-dropdown-entry">Stats</li> 
           <li class="user-dropdown-entry">Tip</li> 
           <li class="user-dropdown-entry">Ignore</li> 
           <!-- react-text: 946 --> 
           <!-- /react-text --> 
          </ul> 
         </span> 
         <span class="user-name"> 
          <span> 
           <!-- react-text: 949 -->Anonymous 
           <!-- /react-text --> 
           <span class="icon-balanceicon namepromotion" title="This user has activated the Name Promotion"></span> 
           <!-- react-text: 951 --> 3 
           <!-- /react-text --> 
          </span> 
          <!-- react-text: 952 -->: 
          <!-- /react-text --> 
         </span> 
        </span> 
        <span class="msg-body">kk</span> 
       </li> 
       <li class="msg-chat-message"> 
        <span class="user role-user"> 
         <img class="user-logo" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/44/44c705474e17ebe8a2a9ef70467c20ee5add283e.jpg"> 
          <div class="user-level-container"> 
           <div class="user-level level-item level-50">52</div> 
          </div> 
          <span class="drop-down-container _3_options"> 
           <ul class="user-dropdown-invisible"> 
            <li class="user-dropdown-entry">Stats</li> 
            <li class="user-dropdown-entry">Tip</li> 
            <li class="user-dropdown-entry">Ignore</li> 
            <!-- react-text: 964 --> 
            <!-- /react-text --> 
           </ul> 
          </span> 
          <span class="user-name"> 
           <span> 
            <!-- react-text: 967 -->Rrubinski. for EM 
            <!-- /react-text --> 
            <span class="icon-balanceicon namepromotion" title="This user has activated the Name Promotion"></span> 
            <!-- react-text: 969 --> 
            <!-- /react-text --> 
           </span> 
           <!-- react-text: 970 -->: 
           <!-- /react-text --> 
          </span> 
         </span> 
         <span class="msg-body">which one u want?</span> 
        </li> 

Bisher habe ich die Liste der Elemente, es ist Größe 400 Artikel gleich ist (wenn Chat mit Nachrichten gefüllt ist); Aber ich möchte immer noch wissen, ob es möglich ist, neue Elemente zu verfolgen, anstatt 400 Mal zu wiederholen.

elementList = driver.findElements(By.xpath("//span[@class='msg-body']")); 
      for (WebElement element: elementList) { 
       if (element.getText().equals("nice")) { 
        System.out.println("Done"); 
        System.out.println("List size: " + elementList.size()); 
       } 
      } 
      Thread.sleep(200); 
+0

Kennen Sie uns das HTML-Dom des Chat-Fensters? –

+0

@santhoshkumar ja, sicher. –

Antwort

0

Bitte überprüfen Sie dies lassen Sie mich wissen.

Ich gehe davon aus, dass Nachricht automatisch mit der gleichen Klasse in dem dom angehängt wird ähnlich wie

<span class="msg-body">which one u want?</span> 

und das Ziel ist es, den Text der letzten angehängten Nachricht zu erhalten. Wir können die Anzahl der Instanzen der Nachrichten kennen und den letzten Text abrufen.

int size = driver.findElements(By.xpath("//span[@class='msg-body']")).size(); 

jetzt erhalten Sie den Text der letzten Nachricht.

String message = driver.findElement(By.xpath("//span[@class='msg-body'][" + size + "]")).getText(); 

Spätere Benutzer Java APIs oder TestNG-Methoden, um die Überprüfung der String-Nachricht durchzuführen.

Hoffe, das hilft. Vielen Dank.

+0

'Größe' in Ihrem letzten Codeblock ist eine Zeichenfolge, keine Variable. – JeffC

+0

Ja, wir müssen es als Variable übergeben –

+0

Überprüfen Sie meine Bearbeitung und Sie werden sehen, was ich meine. – JeffC

Verwandte Themen