我正在尝试自动化代码测试......好吧,编写时没有考虑测试(许多元素上没有ID,以及许多具有相同类名的元素)。我将不胜感激任何帮助(问题在代码下面):
<div id="author-taxonomies" class="menu-opened menu-hover-opened-inactive" onmouseover="styleMenuElement(this)" onmouseout="styleMenuElement(this)" onclick="toggleSFGroup(this)">Author</div>
<div id="author-taxonomies-div" class="opened">
<div id="top-level-menu" class="opened">
<div id="top-level-menu-item-1" class="as-master">
<div class="filter-label"> Name</div>
</div>
<div id="top-level-menu-item-1" class="as-slave"
style="top: 525px; left: 34px; z-index: 100; display: none;"> </div>
<div id="top-level-menu-item-2" class="as-master">
<div class="filter-label">Title</div>
</div>
<div id="top-level-menu-item-2" class="as-slave">
<div id="top-level-menu-item-2" class="as-slave-title as-slave-title-subgroup"
>Title</div>
<div id="top-level-menu-item-2" class="as-slave-body"> </div>
<div class="as-slave-buffer"> </div>
</div>
<div id="top-level-menu-item-3" class="as-master">
<div class="filter-label">Location</div>
</div>
<div id="top-level-menu-item-3" class="as-slave"> </div>
</div>
</div>
问题是:如何使用xPath表达式引用此菜单的特定标签和属性?例如,如果我想:
答案 0 :(得分:4)
它类似于:
更新:还要确保安装以下firefox插件,在网站https://addons.mozilla.org/en-US/firefox/addon/1095上尝试不同的xpath表达式时非常有用
答案 1 :(得分:3)
作为旁注:尽可能避免在Selenium中使用xpath定位器。如果你有一个很长的xpath表达式,那么与使用其唯一ID识别元素相比,Selenium找到元素的速度可能会慢20倍。当然,有时候除了使用xpath之外别无选择。但是,当你使用它时,将'//'表达式保持在最小 - 这是一个真正的性能杀手。
答案 2 :(得分:2)
如果您刚开始使用Selenium,请下载适用于Firefox的selenium add-on。当您单击DOM元素时,Selenium会显示访问它的xpath。
答案 3 :(得分:2)
我目前正在开发一个开源库,用于通过流畅的.Net API生成xpath表达式。我们的想法是能够生成基于xpath的selenium定位器而无需知道xpath。
以下是一个如何在您的案例中使用库的示例:
XPathFinder.Find.Tag(“div”)。With.Attribute(“id”,“top-level-menu-item-3”)。And.Child(“div”)。With.Attribute(“class” “,”filter-label“)。ToXPathExpression();
这将产生以下xpath: “// DIV [@ ID = '顶级菜单项目-3'] /格[@类= '过滤器标签']”
答案 4 :(得分:0)
您可以使用可以安装在firebug上的firepath(两个firefox插件)。当你得到一个xpath时,不要忘记在使用之前附加//
。在代码或selenium IDE中。你没有附加它,这就是为什么它无法使用。 xpath绝对和相对有两种类型。如果你使用绝对值,它将处理动态id。但如果你使用亲戚,它会在每次运行时中断。