[英]Get some text with java + selenium WebDriver
我只想收到“邀请发送到xxxxx”文本,我不想得到里面的内容
<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>
您可以使用//p[@class='artdeco-toast-message']/text()
xpath来定位Invitation sent to xxxxx
文本的Invitation sent to xxxxx
但是硒不支持xpath中的text()
方法来定位文本节点。
如果您尝试使用xpath下方的元素来定位元素,以通过使用xpath的not()
函数来排除按钮文本:
//p[@class='artdeco-toast-message']/node()[not(self::button)]
再次使用文本节点定位元素,因此Selenium不允许这样做
这里有一个解决方案可以执行相同的xpath,即JavascriptExecutor
使用JavaScript
的validate evaluate()
方法并使用JavascriptExecutor
评估您的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());
要么
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());
它会给您预期的结果。 无需获取所有数据,然后使用String函数进行格式化。
您可以从这里详细探索evaluate()
您可以尝试以下代码。
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);
实际上,Selenium的getText()方法也可以检索子元素中的所有文本,因此据我所知, Murthi推荐的方法是最适用的。 试试这个方法:
String newLine = System.getProperty("line.separator");
String pessoapopu = driver.findElement(By.className("artdeco-toast-message"))
.getText().replaceAll(newLine, "");
或尝试/询问更方便的HTML代码。
给定HTML,您应该能够.getText()
,在换行符上拆分该文本,然后进行第一次拆分以获取所需的文本。
driver.findElement(By.cssSelector("p.artdeco-toast-message")).getText().split("\r\n")[0];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.