我使用driver.findElement(By.xpath())找不到带有xpath的Web元素;

时间:2013-08-30 11:28:54

标签: java selenium selenium-webdriver

我试图在页面上找到要点击的链接:

<a id="folder0" class="js-folder icon-wrap icon-wrap_left menu__item__link menu__item__link_act menu__item__link_unread" href="/messages/inbox" rel="history">
    <span class="js-folder-b-unread js-folder-unread menu__item__link__qnt">7</span>
    <i class="js-folder-ico icon icon_left icon_folders icon_inbox_act"></i>
    <span class="menu__item__link__text menu__item__link__text_linear">Input</span>
</a>

Java代码:

driver.findElement(By.xpath(".//*[@id='folder0']/span[2]")).click();

但是驱动程序找不到该元素:

 org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":".//*[@id='folder0']/span[2]"}

4 个答案:

答案 0 :(得分:7)

感谢您的所有答案。我找到了解决问题的方法。最后一个命令是与IFrame链接的命令

WebElement editorFrame = driver.findElement(By.cssSelector("#sentmsgcomposeEditor_ifr"));
   driver.switchTo().frame(editorFrame);

   WebElement body1 = driver.findElement(By.tagName("body"));
   body1.sendKeys(Keys.CONTROL + "a"); 

所以我真的在IFrame因为它找不到任何元素。 我执行了以下命令:

 driver.switchTo().defaultContent();

之后可以找到定位器。

答案 1 :(得分:2)

不使用.

尝试
driver.findElement(By.xpath("//*[@id='folder0']/span[2]")).click();

答案 2 :(得分:1)

你应该尝试通过id而不是xpath来定位。

driver.findElement(By.id("folder0")).click();

有两个原因:

  1. 按ID定位通常更快(请参阅here了解原因)。
  2. 由于您正在尝试测试链接,因此您无需单击链接元素本身上的内部<span>
  3. 如果您仍想使用xpath ,或者仍想获取内部<span>,可以在Firefox中使用firebug来复制xpath;这将为您提供正确的xpath,并告诉您是否犯了错误。

    Firebug Copying XPath

答案 3 :(得分:-1)

如果Selenium给你这个错误,它只是意味着XPath找不到任何元素。显然,你的XPath表达式是错误的。

在给定的XPath表达式中,您正在寻找具有span = id的任何元素下的第二个folder0元素。您给定的HTML代码在您要查找的span的父元素上看不到任何标识符。

如果没有看到整个页面,很难说正确的XPath表达式是什么。