【问题标题】:Selenium Webdriver : getText() returning empty String for h2 tagSelenium Webdriver:getText() 为 h2 标签返回空字符串
【发布时间】:2018-10-01 19:05:45
【问题描述】:

我很难从 h2 标记中获取文本。我想要“产品已成功添加到您的购物车”文字。 我的代码:

WebDriver driver = new FirefoxDriver();
driver.get("http://automationpractice.com");
.
.
.
System.out.println(driver.findElement(By.xpath("//*[@id='layer_cart']/div[1]/div[1]/h2")).getText());

这是以下 HTML 代码:

<div class="layer_cart"><span class="cross" title="Close window"/><h2><i class="icon-ok"/>Product successfully added to your shopping cart</h2>

【问题讨论】:

  • 这是 HTML 代码:Html 代码:'
    ' '

    ' '产品已成功添加到您的购物车'

标签: java css selenium selenium-webdriver xpath


【解决方案1】:

这是你的 HTML 结构:

<div class="layer_cart">
  <span class="cross" title="Close window"/>
  <h2><i class="icon-ok"/>Product successfully added to your shopping cart</h2>
...

您有 h2 作为 layer_cart 的直接子代,因此您应该能够将其定位为:

driver.findElement(By.xpath("//*[@id='layer_cart']/h2")).getText()

【讨论】:

    【解决方案2】:

    使用这个 xpath : //div[starts-with(@class,'layer_cart')]

    【讨论】:

      【解决方案3】:

      要从&lt;h2&gt;标签中检索文本产品已成功添加到您的购物车,您需要诱导WebDriverWait,您可以使用以下代码块:

      new WebDriverWait(driver, 20).until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//div[@class='layer_cart']//h2"), "Product successfully added to your shopping cart"));
      WebElement myElement = driver.findElement(By.xpath("//div[@class='layer_cart']//h2[contains(.,'Product successfully added')]"));
      String myText = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[2].textContent;', myElement).strip()
      

      【讨论】:

      • 非常感谢......是的,它适用于 Webdriver 等待条件,我也使用 .getAttribute("innerText") 而不是 getText()...
      【解决方案4】:

      问问自己为什么要从一个你已经知道确切文本的元素中检索文本。我认为您可能更感兴趣的是检查该网站是否在测试期间的某些时间点显示了您所期望的内容。 IE。您想确保在将商品添加到购物车后显示带有“产品已成功添加到您的购物车”的 h2。

      WebDriverWait wait = new WebDriverWait(driver, 10);
      wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h2[contains(text(), 'Product successfully added to your shopping cart')]")));
      

      如果测试在此之后继续进行,您就知道该文本在您预期的时候是可见的。

      【讨论】:

      • 是的,可见性是唯一的问题。谢谢你的帮助。
      【解决方案5】:

      试试这个代码:

      WebElement y = driver.findElement(By.xpath("//div[@id='layer_cart']/div/div/h2"));
      
      System.out.println(y.getAttribute("innerText").trim());
      

      【讨论】:

        猜你喜欢
        • 2012-07-22
        • 2013-08-01
        • 2017-12-18
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 2018-02-28
        • 2020-06-06
        • 1970-01-01
        相关资源
        最近更新 更多