1

这是当前情况:特定位置有多个文件和文件夹。将鼠标悬停在文件或文件夹上后,会出现一个图标,然后您可以单击该图标,然后会出现一个菜单。从该菜单中,用户可以选择任何操作(重命名、移动等)。问题在于,每当在该位置创建/添加新文件/文件夹时,FirePath 提供的 XPath 就会被破坏。

这是在 XPath 被破坏之前可以正常工作的初始代码行:

webDriver.findElement(By.xpath("//*[@id='main_files_view']/ol/li[6]/ul/li[4]")).click(); 

每当在该位置添加新项目时,值为“6”的索引可以更改为“7”(文件的新位置),并且生成的 XPath 现在略有不同:

webDriver.findElement(By.xpath("//*[@id='main_files_view']/ol/li[7]/ul/li[4]")).click();

如何更改 XPath 并使其健壮,以便无论添加/删除的项目数量如何,XPath 都不会中断?

下面是与 FirePath 提供的 XPath 相关的 HTML 部分。提供 XPath 时,最后一个类也会突出显示。

 <li class="storage_item document file_object even ui-draggable" data-thumb-translation="Translated" data-possible-actions="Rename Delete Share Move View" data-file-size="0 bytes" data-item-type="file" data-display-name="solids_A" data-name="solids_A.raas" data-id="bd48453c752043d98afb237b86ee88a3">
    <a class="file_name" href="#/Item/Details?id=bd48453c752043d98afb237b86ee88a3&itemtype=File&tab=Default">
    <img class="file_list_icon" width="16" height="16" src="https://api-staging.autodesk.com/content/gateway/2013.1.307595.626/z/Content/images/fileIcons/small/raas.png"/>
    <div class="name_container">
    <ul class="tools">
        <li class="preview_trigger"/>
        <li class="comment_balloon none has_tooltip" data-tooltip-contents="#comment_balloon_tooltip" data-comments="0">
        <li class="categorize action has_tooltip" data-tooltip="Categories"/>
        <li class="document_tools has_tooltip" data-tooltip="Actions"/>
    </ul>
</li>

我在 Eclipse IDE 上使用 Selenium 2.0。

4

3 回答 3

2

如果data-name是唯一的,那么你有

//*[@id='main_files_view']/ol/li[@data-name='solids_A.raas']/ul/li[contains(@class, 'document_tools')]

在这种情况下,Css Selector 甚至比 XPath 更好:

#main_files_view li[data-name='solids_A.raas'] .document_tools
于 2013-08-20T22:36:57.787 回答
0

试试这个:

By.XPath("//*[@id='main_files_view']/ol/li/ul/li[4]")

您不必在 xpath 中定义每个索引,并且通常如果它只是一个更改的索引,则删除该索引将起作用。

于 2013-08-20T22:40:22.267 回答
0

一般来说,您应该在测试中避免使用 xpath。Css 选择器更快(尤其是在 IE 中)并且更具可读性。如果 data-name 是唯一的,那么这应该有效:

webDriver.findElement(By.cssSelector("#main_files_view li[data-name='solids_A.raas'] li.document_tools"));

如果您真的需要 xpath,user1177636 提供的 xpath 也可以完成这项工作。

于 2013-08-20T22:44:30.967 回答