4

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

<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

3 回答 3

8

感谢您的所有回答。我找到了解决我的问题的方法。最后一个命令是与 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();

之后,可以找到定位器。

于 2013-08-31T09:00:52.080 回答
3

您应该尝试通过 id 而不是 xpath 进行定位。

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

两个原因:

  1. 通过 id 定位通常更快(请参阅此处了解原因)。
  2. 由于您正在尝试测试链接,因此您无需单击内部<span>,只需单击链接元素本身即可。

如果你还想使用 xpath,或者还是想获取 inner <span>,可以在 Firefox 中使用 firebug 来复制 xpath;这将为您提供正确的 xpath 并显示您是否犯了错误。

Firebug 复制 XPath

于 2013-08-30T17:14:18.420 回答
2

Try it without the .

driver.findElement(By.xpath("//*[@id='folder0']/span[2]")).click();
于 2013-08-30T17:17:06.633 回答