如何在Selenium中使用DOM结构查找元素?

时间:2013-08-07 21:25:21

标签: xpath selenium webdriver selenium-webdriver

我的应用程序与Google Maps集成,我正在尝试使用Selenium编写一些UI测试。作为我的一个测试的一部分,我需要在Google Maps提供的infoPopup中找到X.这个元素没有任何id或类,我可以直接在Selenium中找到它。我可以使用XPath但它会使我的测试对谷歌的任何变化都非常脆弱。

另一方面,我可以从我的自定义元素(使用父元素和兄弟元素)中走出DOM结构并轻松找到它(这就是我在javascript中访问它的方式)。我的问题是我是否也可以在Selenium中以相同的方式访问它。

HTML表单:

<div style="width: 10px; height: 10px; overflow: hidden; position: absolute; opacity: 0.7; right: 12px; top: 12px; z-index: 10000; cursor: pointer;">   
    <img src="http://maps.gstatic.com/mapfiles/mv/imgs8.png" draggable="false" style="position: absolute; left: -18px; top: -44px; width: 68px; height: 67px; -webkit-user-select: none; border: 0px; padding: 0px; margin: 0px;">
</div>

XPath://*[@id="map"]/div[1]/div[1]/div/div[3]/div[3]/div/div[13]/div[1]

我对Selenium的经验非常有限。因此,如果有其他方法可以找到可能对我有帮助的元素,那么也很乐意了解它们。

2 个答案:

答案 0 :(得分:1)

您可以使用By.XPath

driver.FindElement(By.XPath("//*[@id='map']/div[1]/div[1]/div/div[3]/div[3]/div/div[13]/div[1]"));

然而,像这样的XPath将非常不稳定并且难以维护,我不建议这样做。

使用像有意义的XPath或CssSelector这样的东西会很好。

By.XPath("//*[@id='map']//div[./img[contains(@src, 'mapfiles/mv/imgs8.png')]]");
By.CssSelector("#map img[src$='mapfiles/mv/imgs8.png']"); 

有关XPath或CssSelector的更多信息,请参阅the documentation

答案 1 :(得分:0)

如果您刚刚开始,我建议您使用FireBug + FirePath添加到Firefox浏览器。首先,它将为您提供在UI上突出显示的元素的精确xpath。Click Here to see it