Selenium Webdriver:getText()为h2标记返回空字符串

时间:2018-04-21 04:00:26

标签: java css selenium selenium-webdriver xpath

我很难从 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>

5 个答案:

答案 0 :(得分:0)

这是您的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()

答案 1 :(得分:0)

使用此xpath: 的 // DIV [开始-与(@类, 'layer_cart')]

答案 2 :(得分:0)

要从<h2>标记中检索文本已成功添加到购物车的商品,您需要引导 WebDriverWait ,您可以使用以下代码块:< / p>

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

答案 3 :(得分:0)

问问自己为什么要从已经知道确切文本的元素中检索文本。我认为您可能更感兴趣的是检查网站是否显示了您在测试期间某些时间点的预期。即你想确保一个h2与&#34;产品成功添加到你的购物车&#34;将商品添加到购物车后可见。

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

如果在此之后测试仍在继续,您知道文本在预期时可见。

答案 4 :(得分:0)

尝试此代码:

WebElement y = driver.findElement(By.xpath("//div[@id='layer_cart']/div/div/h2"));

System.out.println(y.getAttribute("innerText").trim());