点击图片链接与Selenium webdriver java

时间:2017-10-11 15:06:01

标签: java image selenium xpath

我已经查看了类似问题的答案,看起来我的代码应该可以工作,但我得到了#34;无法点击元素"代码调用时出现错误,单击Web元素。

以下是html标记段

<div class="x-tree-node-item">
  <a title="Manage Users" class="sidenavmenu_unselected" id="m-22" onclick="toggleMenu('22', '');" href="#">
    <img title="" align="bottom" id="mi-22" alt="" src="ca/images/arrow.png" border="0">Manage Users
  </a>
  <div style="margin-left: 1em;">
    <ul class="submenu-show" id="mp-22" style="height: auto; display: none;">
      <li>
        ...
      </li>
    </ul>
  </div>

找到链接的Java代码是:

By xpath=By.xpath("//a[contains(@title,'Manage Users')]/img");
WebElement manageUsers = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(xpath));
manageUsers.click();

它找到了元素,但是我收到错误: org.openqa.selenium.ElementNotInteractableException:无法点击元素

id是动态生成的,因此我们无法通过id找到并且图像源被多个链接使用。 谢谢你的帮助。

*更新* 在JeffC和Xwris的帮助下解决了这个问题。 JeffC的最后评论显示,找到了多个节点。所以,我添加了以下代码:

       List<WebElement> manageUserImages=driver.findElements(xpath);
   for (WebElement manageUserImage:manageUserImages) {
       if (manageUserImage.isDisplayed()) {
           manageUserImage.click();   
       }
   }

由于&#34;管理用户&#34;一次只显示元素。作为标题,这将找到正确的元素并提供所需的结果。

@JeffC,如果您可以在评论中发布答案,我们可以将答案标记为正确答案。 再次感谢所有帮助过的人。

2 个答案:

答案 0 :(得分:1)

看起来你的xpath是错误的。 就个人而言,我会从div开始,并深入到实际的&lt; a&gt;标签

在某些情况下,您的网络元素位于&lt; li>标签,我会更进一步向上树并选择一个未隐藏的div。

即你指示它搜索特定的&lt; div&gt;

谁告诉你你只能通过id选择?你可以用任何东西! :)

这应该有用。

//div[@class='x-tree-node-item']//a[@title='Manage Users']

这也应该有用。正确使用'包含'如下:

//div[@class='x-tree-node-item']//a[text()[contains(.,'Manage Users')]]

希望这有帮助!

PS。请注意 text contains 区分大小写并且将匹配部分文本。 所以,如果你搜索:

//a[text()[contains(.,'age User')]]

它仍将是一场成功的比赛!

  

OP的评论后更新:

您实际上并不需要xpath帮助程序。您只需在浏览器中点击F12,然后按CTRL + f即可打开底部的搜索字段。请参阅我的示例,了解如何使用部分文本匹配(“图像”)找到问题的标题。

还要注意xpath旁边的1个1(意味着我们的元素是唯一的)。尝试为你的情况做同样的事情。我怀疑你需要爬到树上,然后从早些时候开始。 div>所以你可以找到其余部分。enter image description here

答案 1 :(得分:-1)

取消定位器的“/ img”部分。您想要单击锚点(a)而不是图像本身。

//a[@id='m-22']

或者,定位器可以是:{{1}}