0

Текущая ситуация: Есть несколько файлов и папок в определенном месте. Как только вы наведите указатель мыши на файл или папку, появится значок, затем вы можете щелкнуть по этому значку, и появится меню. Из этого меню пользователь может выбрать любое действие (переименовать, переместить и т. Д.). Проблема в том, что XPath, предоставляемый 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 не сломается ?

Ниже приведен раздел HTML, который относится к XPath, предоставленному FirePath. Когда 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> 

Я использую Selenium 2.0, на Eclipse IDE.

+0

Не могли бы вы разместить больше HTML? Является ли атрибут «имя-имя» уникальным для каждого элемента? – JacekM

+0

@JacekM: Да, атрибут data-name уникален для каждого элемента. – T4000

ответ

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 
+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 будет также выполнять работу.

Смежные вопросы