使用 xpath 在 <div> 中获取特定字符串

Fetch a particular String in <div> using xpath

我有以下 DOM 结构 / HTML:

<div class = "something" >
    <div>
        <span>Some text</span>
    </div>
"Automated Script"
</div>

我正在使用 Selenium Webdriver 进行测试,必须获取字符串 Automated Script 才能执行断言。

Assert.assertEquals("Automated Script",webDriver.findElement(By.xpath("/div")).getText());

但是上面的 xpath 获取了一些文本和自动脚本。 有没有办法只获取字符串自动脚本?

assertEquals:

String divText = webDriver.findElement(By.cssSelector("div.something")).getText();
String spanText = webDriver.findElement(By.cssSelector("div.something span")).getText();
String expectedText = divText.replace(spanText, "").strip();
Assert.assertEquals("Automated Script", expectedText);

asserTrue:

Assert.assertTrue(webDriver.findElement(By.cssSelector("div.something")).getText().contains("Automated Script"));

使用 WebDriverWait,这将等待文本并通过错误:

new WebDriverWait(driver, 5)
        .until(ExpectedConditions
                .textToBePresentInElementLocated(By.cssSelector("div.something"), "Automated Script"));

是的,可以在 selenium 的 xpath 中执行 text()。直接在 selenium

中是行不通的

使用 JavaScript 的 evaluate() 方法并使用 JavascriptExecutor

评估你的 xpath
JavascriptExecutor js = (JavascriptExecutor)driver;
Object message = js.executeScript("var value = document.evaluate(\"//div[@class='something']/text()\",document, null, XPathResult.STRING_TYPE, null ); return value.stringValue;");
System.out.println(message.toString().trim());