0

我正在尝试自动测试代码......好吧,编写时没有考虑测试(许多元素上没有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 表达式引用此菜单的特定标签和属性?例如,如果我想:

  1. 验证“位置”标签是否存在
  2. 检查当前是否不可见具有“as-slave”类的“Title”
4

5 回答 5

4

这将类似于:

  1. //div[@id="top-level-menu-item-3"]/div[@class="filter-label"]
  2. //div[@id="top-level-menu1"] --- 并检查代码以显示:无 ...假设您使用的是 selenium rc

更新:还请务必安装以下 firefox 插件,在站点https://addons.mozilla.org/en-US/firefox/addon/1095上尝试不同的 xpath 表达式时非常有用

于 2009-03-27T00:22:40.757 回答
3

附带说明:如果可能,尽量避免在 Selenium 中使用 xpath 定位器。如果您有一个较长的 xpath 表达式,与使用其唯一 ID 识别它相比,Selenium 查找元素的速度可能会慢 20 倍。当然,有时除了使用 xpath 之外别无他法。但是,当您使用它时,请尽量减少 '//' 表达式 - 这是一个真正的性能杀手。

于 2009-03-29T18:54:08.383 回答
2

如果您刚开始使用 Selenium,请下载 Firefox 的selenium 插件。当您单击 DOM 元素时,Selenium 会向您显示访问它的 xpath。

于 2009-03-27T00:12:23.807 回答
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", "过滤标签").ToXPathExpression();

这将产生以下 xpath:“//div[@id='top-level-menu-item-3']/div[@class='filter-label']”

在http://code.google.com/p/xpathitup/上查看

于 2010-08-05T05:19:16.030 回答
0

You can use firepath that can be installed over firebug(both firefox plugin). When you get a xpath, dont forget to append // before using it. Either in code or in selenium IDE. You are not appending it thats why its unusable. There are two types of xpath absolute and relative. If you use absolute then it will take care of dynamic ids. But if you use relative it will break with each run.

于 2012-04-27T05:33:26.203 回答