Get some text with java + selenium WebDriver

后端 未结 4 1560
深忆病人
深忆病人 2020-12-12 02:08

I want to get only the text \"Invitation sent to xxxxx\", I do not want to get what\'s inside the

4条回答
  •  隐瞒了意图╮
    2020-12-12 02:43

    You can use //p[@class='artdeco-toast-message']/text() xpath to locate the Invitation sent to xxxxx text but selenium doesn't support text() method in xpath to locate a text node.

    Either if you try to locate the element using below xpath to exclude the button text by using not() function of xpath :

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

    Again it locating the element using text node so Selenium doesn't allow this

    Here one solution available to execute same xpath i.e. JavascriptExecutor

    Use evaluate() method of JavaScript and evaluate your xpath using JavascriptExecutor

    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());
    

    It will give you the expected result. No need to get all data and then formatting using String functions.

    You can explore evaluate() in detail from here

提交回复
热议问题