2017-07-25 55 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