使用java + selenium WebDriver获取一些文本

我想只得到“邀请发送到xxxxx”的文字,我不想得到里面的内容

 

我这样得到文字:

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

页面结构:

 

Invitation sent to xxxxx

图片

实际上Selenium的getText()方法也检索子元素中的所有文本,因此据我所知, Murthi推荐的方法是最适用的。 试试这种方法:

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

尝试/要求更方便的HTML代码。

您可以使用//p[@class='artdeco-toast-message']/text() xpath来查找Invitation sent to xxxxx文本的Invitation sent to xxxxx但是selenium不支持xpath中的text()方法来定位文本节点。

如果您尝试使用xpath下面的元素来定位元素,则使用xpath的not()函数排除按钮文本:

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

它再次使用文本节点定位元素,因此Selenium不允许这样做

这里有一个可用于执行相同xpath的解决方案,即JavascriptExecutor

使用JavaScript 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); 

给定HTML,您应该能够.getText() ,在换行符上拆分该文本,然后进行第一次拆分以获取所需的文本。

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