进行更改时,XPath会中断

时间:2013-08-20 21:44:58

标签: xpath selenium webdriver selenium-webdriver automated-tests

这是当前的情况:特定位置有多个文件和文件夹。 将鼠标悬停在文件或文件夹上后,会出现一个图标,然后您可以单击该图标并显示一个菜单。用户可以从该菜单中选择任何操作(重命名,移动等)。问题是,只要在该位置创建/添加新文件/文件夹,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。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

试试这个:

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

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

答案 2 :(得分:0)

通常,您应该避免测试中的xpath。 Css选择器更快(特别是在IE中)并且更具可读性。如果data-name是唯一的,那么这应该有效:

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

如果你真的需要一个xpath,那么user1177636提供的那个也将完成这项工作。