2017-07-25 33 views
2

我想只有文字「發送到爲XXXXX邀請」,我不希望得到什麼內部獲得與Java +硒一些文本的webdriver

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

我得到的文本這樣:

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

頁面結構:

<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

等待元素是可見的,並嘗試相同的代碼。一個猜測。 –

+0

@Paulo,你作爲輸出得到了什麼?包含按鈕文字的完整文字?或任何錯誤? – NarendraR

+0

@Tuks 我得到全文,即使按鈕裏面有什麼,這是與我無關的文字。 –

回答

0

事實上Selenium的的getText()方法檢索子元素的所有文字太多,所以該方法,通過Murthi推薦的是最適用的,因爲據我所知。 試試這個辦法:

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

或者的try /索要更方便的HTML代碼。

+0

是否有任何方式來處理這隻使用xpath? – NarendraR

+0

我在想''而不是()'xpath方法,但不確定它。 –

+1

這不是OP所要求的......我不確定它爲什麼被標記爲答案。 – JeffC

-1

您可以用下面的代碼試試。

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

沒有工作「方法getText()未定義爲類型By」 –

+0

未命中關閉括號並立即更新。 – Murthi

+0

它的工作部件,它的三倍控制檯中mesnagem: 邀請發送到毛羅·桑托斯 發送邀請發送到毛羅·桑托斯毛羅·桑托斯 邀請 ,並沒有應在下一行程 沒有這樣的發現元素元素:無法找到元素:{「method」:「class name」,「selector」:「action」} –

0

鑑於HTML,您應該能夠.getText(),將文本拆分爲換行符,然後進行第一次拆分以獲取所需文本。

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

您可以使用//p[@class='artdeco-toast-message']/text() XPath來定位Invitation sent to xxxxx文字,但硒不支持的XPath text()方法來定位文本節點。

要麼如果您嘗試使用下面的XPath來定位元素通過使用XPath的not()功能按鈕上的文字排除:

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

它再次使用文本節點,以便硒不允許這樣

定位元素

這裏的一個解決方案可用於執行相同的XPath即

使用JavaScriptJavascriptExecutorevaluate()方法和評估使用您的XPath

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

OR

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

它會給你預期的結果。不需要獲取所有數據,然後使用字符串函數進行格式化。

您可以詳細探討evaluate()from here