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 セレクターは XPath よりも優れています。

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

一般に、テストでは xpath を避ける必要があります。Css セレクターは (特に IE で) 高速で読みやすくなっています。data-name が一意の場合、これは機能するはずです。

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

本当に xpath が必要な場合は、user1177636 によって提供されたものでも機能します。

于 2013-08-20T22:44:30.967 に答える
0

これを試して:

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

xpath 内のすべてのインデックスを定義する必要はありません。多くの場合、変更されるインデックスが 1 つだけの場合は、そのインデックスを削除すると機能します。

于 2013-08-20T22:40:22.267 に答える