0

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

我使用硒2.0,在Eclipse IDE中。

+0

你能否发布更多的HTML?每个项目的“数据名称”属性是唯一的吗? – JacekM

+0

@JacekM:是的,数据名称属性对每个项目都是唯一的。 – T4000

回答

2

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

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

CSS选择器是在这种情况下比XPath的还要好:

#main_files_view li[data-name='solids_A.raas'] .document_tools 
+0

它工作正常!谢谢!!! – T4000

0

试试这个:

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

你做不必定义xpath中的每个索引,并且通常如果它只是一个变化,删除索引将会出现问题ķ。

0

一般来说,你应该在你的测试中避免xpaths。 Css选择器更快(特别是在IE中)并且更具可读性。如果数据名称是唯一的,然后这应该工作:

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

如果你真的需要一个XPath通过user1177636提供也将做的工作之一。