问题与Selenium,我不知道我应该使用哪个定位器

时间:2015-04-09 12:52:55

标签: java selenium selenium-webdriver

我在java中编写脚本来自动化Selenium中的测试用例。 不幸的是,我完全被阻止了一步。

我无法使用定位器点击元素。

这就是我在浏览器的开发工具中看到的元素(我想上传一张照片,但我需要更多的声誉:()

<li class="x-tree-node"><div ext:tree-node-id="site_~_listUtilities|site" class="x-tree-node-el x-tree-node-leaf x-unselectable file" unselectable="on"><span class="x-tree-node-indent"></span><img src="http://mucs70064.corp.knorr-bremse.com:1080/Windchill/netmarkets/images/sp.gif" class="x-tree-ec-icon x-tree-elbow-end"><img src="http://mucs70064.corp.knorr-bremse.com:1080/Windchill/netmarkets/images/default_leaf.png" class="x-tree-node-icon x-tree-node-inline-icon" unselectable="on"><a hidefocus="on" class="x-tree-node-anchor" href="http://mucs70064.corp.knorr-bremse.com:1080/Windchill/app/#ptc1/site/listUtilities?oid=OR%3Awt.inf.container.ExchangeContainer%3A5&amp;u8=1" tabindex="1"><span unselectable="on">Dienstprogramme</span></a></div><ul class="x-tree-node-ct" style="display:none;"></ul></li>

请问我该怎么办?

提前致谢 巴勃罗

2 个答案:

答案 0 :(得分:1)

假设您想要点击锚元素:

WebElement myAnchor = yourDriver.findElement(By.cssSelector("a.x-tree-node-anchor"));
myAnchor.click();

其中yourDriverWebDriver

的实例

注意:如果您直接从yourDriver执行此操作,可能会找到多个链接,因为这会检查整个页面,因此除非只有一个带有该类名称的锚标记在页面上我建议通过事先执行另一个findElement来缩小搜索范围,这样您就可以找到要点击的确切li节点(帖子中详述的节点)。

然后,例如,如果您将li节点WebElement保存在名称myClickableListItem下,则可以通过将yourDriver替换为myClickableListItem来调用本文开头提到的代码{{1}}

答案 1 :(得分:1)

我认为你有2种选择。我假设您想要点击链接。

选项1

href 可以是唯一足以识别的,假设它是页面上导航到该页面的唯一链接。如果是的话,

// this will find any link on the page with an href that contains site/listUtilities
driver.findElement(By.cssSelector("a[href*='site/listUtilities']").click();

选项2

如果 href 不够独特,请使用<div>附加的伪ID。

// this will find a div with an attribute `ext:tree-node-id` that contains site, and listUtilities, then trickle down to the `a` that is within it.
driver.findElement(By.cssSelector("div[ext\\:tree-node-id*='site'][ext\\:tree-node-id*='listUtilities'] a")).click();

我认为这些是您最安全,最具体的选择。