获得与Java +硒一些文本的webdriver
我想只有文字“发送到为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>
事实上Selenium的的getText()方法检索子元素的所有文字太多,所以该方法,通过Murthi推荐的是最适用的,因为据我所知。 试试这个办法:
String newLine = System.getProperty("line.separator");
String pessoapopu = driver.findElement(By.className("artdeco-toast-message"))
.getText().replaceAll(newLine, "");
或者的try /索要更方便的HTML代码。
您可以用下面的代码试试。
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);
没有工作“方法getText()未定义为类型By” –
未命中关闭括号并立即更新。 – Murthi
它的工作部件,它的三倍控制台中mesnagem: 邀请发送到毛罗·桑托斯 发送邀请发送到毛罗·桑托斯毛罗·桑托斯 邀请 ,并没有应在下一行程 没有这样的发现元素元素:无法找到元素:{“method”:“class name”,“selector”:“action”} –
鉴于HTML,您应该能够.getText()
,将文本拆分为换行符,然后进行第一次拆分以获取所需文本。
driver.findElement(By.cssSelector("p.artdeco-toast-message")).getText().split("\r\n")[0];
您可以使用//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即
使用JavaScript
JavascriptExecutor
evaluate()
方法和评估使用您的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
等待元素是可见的,并尝试相同的代码。一个猜测。 –
@Paulo,你作为输出得到了什么?包含按钮文字的完整文字?或任何错误? – NarendraR
@Tuks 我得到全文,即使按钮里面有什么,这是与我无关的文字。 –