【问题标题】:Fetch a particular String in <div> using xpath使用 xpath 获取 <div> 中的特定字符串
【发布时间】:2020-06-07 23:43:29
【问题描述】:

我有以下 DOM 结构/HTML:

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

我正在使用 Selenium Webdriver 进行测试,并且必须获取字符串自动脚本来执行断言。

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

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

【问题讨论】:

  • 最初 Assert 中的预期值是一个字符串变量,所以我已经像在 UI 中一样获取字符串。

标签: html selenium-webdriver dom xpath assert


【解决方案1】:

是的,可以在 selenium 的 xpath 中执行 text()。直接它不会在硒中工作

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      相关资源
      最近更新 更多