使用java + selenium WebDriver获取一些文本
我想只得到“邀请发送到xxxxx”的文字,我不想得到里面的内容
我这样得到文字:
String pessoapopu = driver.findElement(By.className("artdeco-toast-message")).getText(); System.out.println(pessoapopu);
页面结构:
实际上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];