2017-07-25 2 views
2

ich nur der Text „sent Einladung xxxxx“ erhalten wollen, ich will nicht bekommen, was im Inneren desErhalten Sie einen Text mit Java + Selen WebDriver

<button class="action" data-ember-action="" data-ember-action-3995="3995"> 
      Visualizar perfil 
</button> 

ist erhalte ich den Text auf diese Weise:

String pessoapopu = driver.findElement(By.className("artdeco-toast-message")).getText();     
System.out.println(pessoapopu); 

Seitenstruktur:

<div class="artdeco-toast-inner" data-ember-action="" data-ember-action-3994="3994"> 
    <li-icon aria-hidden="true" type="success-pebble-icon" class="artdeco-toast-icon"><svg viewBox="0 0 24 24" width="24px" height="24px" x="0" y="0" preserveAspectRatio="xMinYMin meet" class="artdeco-icon"><g class="large-icon" style="fill: currentColor"> 
     <g id="success-pebble-icon"> 
      <g> 
      <circle class="circle" r="9.1" stroke="currentColor" stroke-width="1.8" cx="12" cy="12" fill="none" transform="rotate(-90 12 12)"></circle> 
      <path d="M15.667,8L17,9.042l-5.316,7.36c-0.297,0.395-0.739,0.594-1.184,0.599c-0.455,0.005-0.911-0.195-1.215-0.599l-2.441-3.456l1.416-1.028l2.227,3.167L15.667,8z" fill="currentColor"></path> 
      <rect style="fill:none;" width="24" height="24"></rect> 
      </g> 
     </g> 
     <g id="Layer_1"> 
     </g> 
     </g></svg></li-icon> 
    <p class="artdeco-toast-message"> 
       Invitation sent to xxxxx 
     <button class="action" data-ember-action="" data-ember-action-3995="3995"> 
      Visualizar perfil 
     </button> 

    </p> 
    </div> 

image

+0

Warten auf das Element sichtbar zu sein und den gleichen Code versuchen .. eine Vermutung. –

+0

@Paulo, Was bekommst du als Ausgabe? vollständiger Text einschließlich Schaltflächentext? oder irgendein Fehler? – NarendraR

+0

@Tuks Ich bekomme den vollständigen Text, auch was in der Taste, die für mich irrelevant ist. –

Antwort

0

In der Tat Selen ist getText() -Methode ruft alle den Text in Unterelemente zu, so dass der Ansatz empfohlen, von Murthi ist die anwendbar, soweit ich weiß. Versuchen Sie diesen Ansatz:

String newLine = System.getProperty("line.separator"); 
String pessoapopu = driver.findElement(By.className("artdeco-toast-message")) 
          .getText().replaceAll(newLine, ""); 

Oder try/fragen Sie nach bequemer HTML-Code.

+0

gibt es eine Möglichkeit, dies nur mit XPath zu behandeln? – NarendraR

+0

Ich denke an 'und nicht()' Xpath-Methode, aber nicht sicher darüber. –

+1

Das tut nicht, was OP gefragt hat ... Ich bin nicht sicher, warum es als Antwort markiert ist. – JeffC

-1

Sie können mit dem folgenden Code versuchen.

WebElement text=driver.findElement(By.className("artdeco-toast-message")); 
String wholeText = text.getText(); 
String unWantedText=text.findElement(By.className("action")).getText(); 
String RequiredText=wholeText.replace(unWantedText,""); 
System.out.println(RequiredText); 
+0

Hat nicht funktioniert "Die Methode getText() ist nicht definiert für den Typ Von" –

+0

Verpasste schließen Klammer und aktualisiert jetzt. – Murthi

+0

Es ist in Teilen gearbeitet, den mesnagem in der Konsole wird eine Verdreifachung: Einladung verschickt an Mauro Santos Einladung zu Mauro Santos Einladung zu Mauro Santos gesendet und es nicht das Element im nächsten Durchlauf findet keine solche element: Element kann nicht gefunden werden: {"method": "Klassenname", "selector": "action"} –

0

Angesichts der HTML, sollten Sie in der Lage .getText(), teilen Sie diesen Text auf einer neuen Zeile, und nehmen Sie dann die erste Aufteilung, um den gewünschten Text zu erhalten.

driver.findElement(By.cssSelector("p.artdeco-toast-message")).getText().split("\r\n")[0]; 
6

können Sie //p[@class='artdeco-toast-message']/text() XPath verwenden, um den Invitation sent to xxxxx Text zu finden, aber Selen unterstützen nicht text() Methode in XPath einen Textknoten zu lokalisieren.

Entweder, wenn Sie versuchen, das Element mit unter XPath zu lokalisieren, indem Sie not() Funktion von XPath auf den Button Text auszuschließen:

//p[@class='artdeco-toast-message']/node()[not(self::button)] 

Wieder sie das Element mit Textknoten Ortung so Selen nicht erlauben diese

Hier ist eine Lösung zur Verfügung gleiche XPath dh JavascriptExecutor

verwenden evaluate() Methode von JavaScript und bewerten Sie Ihre XPathmit auszuführen

JavascriptExecutor js = (JavascriptExecutor)driver; 
Object message = js.executeScript("var value = document.evaluate(\"//p[@class='artdeco-toast-message']/text()\",document, null, XPathResult.STRING_TYPE, null); return value.stringValue;"); 
System.out.println(message.toString().trim()); 

ODER

JavascriptExecutor js = (JavascriptExecutor)driver; 
Object message = js.executeScript("var value = document.evaluate(\"//p[@class='artdeco-toast-message']/node()[not(self::button)]\",document, null, XPathResult.STRING_TYPE, null); return value.stringValue;"); 
System.out.println(message.toString().trim()); 

Es wird Ihnen das erwartete Ergebnis. Keine Notwendigkeit, alle Daten zu erhalten und dann mit String-Funktionen zu formatieren.

Sie können evaluate() im Detail erforschen from here

Verwandte Themen