无法使用cssSelector定位元素

时间:2013-07-31 09:35:43

标签: css webdriver selenium-webdriver

我正在尝试访问此div并稍后再点击它。

<div class="leaflet-marker-icon marker-cluster marker-cluster-small leaflet-clickable leaflet-zoom-animated" style="margin-left: -6px; margin-top: -6px; width: 12px; height: 12px; opacity: 1; transform: translate(702px, 396px); z-index: 396;" title="13 tracks listened in , UA">

这是我正在尝试做的事情:

WebElement cluster = driver.findElement(By.cssSelector("marker-cluster-small"));

这是我试图做的事情:

WebElement cluster = driver.findElement(By.xpath("//div[@class='leaflet-marker-icon marker-cluster marker-cluster-small leaflet-clickable leaflet-zoom-animated']"));

没有一种方法可行。第一个抛出“无法定位元素”消息。第二个没有出现错误,但是当我这样做时:

cluster.click();
没有任何反应。 我究竟做错了什么? 感谢。

3 个答案:

答案 0 :(得分:4)

您应该在此页How can I find an element by CSS class with XPath?上尝试答案。 你应该能够通过只搜索“marker-cluster-small”来做一些接近你的第一个答案的事情。希望它在某种程度上有所帮助。 所以它会  ("//div[contains(@class, 'marker-cluster-small')]")

答案 1 :(得分:0)

你也可以通过css找到它:

driver.find_element(:css, '.leaflet-marker-icon.marker-cluster.marker-cluster-small.leaflet-clickable.leaflet-zoom-animated')

但在这种情况下,康纳的答案是最好的,因为班级价值太长了。

答案 2 :(得分:0)

在你的CSS选择器中,你只是告诉它marker-cluster-small - 但这不起作用,因为它正在寻找一个元素标签,而不是一个类。要使它找到一个类,你需要这样的点符号:

div.marker-cluster-small

.marker-cluster-small

请记住,类上的CSS选择器比xpath选择器更有效,因为你可以只命名一个类 - 即使该元素也有其他类。

所以我建议使用CSS作为理想的定位器解决方案,简洁有效地使用CSS:

WebElement cluster = driver.findElement(By.cssSelector(".marker-cluster-small"));

P.S。在Firefox上使用firepath验证了CSS。

相关问题