我的应用程序与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的经验非常有限。因此,如果有其他方法可以找到可能对我有帮助的元素,那么也很乐意了解它们。
答案 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