Как я могу нажать удалить эту конкретную строку, где текст доступен? - PullRequest
0 голосов
/ 20 мая 2019

Изображение:

enter image description here

Я должен нажать на вкладку удаления, где текст расположен как "goregaon-vashi". Я тоже пытался использовать родного брата, но потерпел неудачу.

<table class="table table-hover txCustomTable" data-ng-show="!fetchingTxTableData" style="">
        <tbody style="margin-top: 0px;">
            <!-- ngRepeat: currentRow in tableRows --><tr data-ng-repeat="currentRow in tableRows" data-ng-class="currentRow.activeClass" class="ng-scope" style="">
                <!-- ngRepeat: currentColumn in metadata.columns --><td data-ng-repeat="currentColumn in metadata.columns" data-ng-class="currentColumn.dataClass" class="ng-scope emp-col-name">
                    <p compile="currentRow[currentColumn.dbCol].displayHtml"><a class="customerDetailsLink ng-scope" data-ng-click="callerScope.onShowStopOnMap($parent.currentRow.stop_points)">goregaon-vashi</a></p>
                                  </td><!-- end ngRepeat: currentColumn in metadata.columns --><td data-ng-repeat="currentColumn in metadata.columns" data-ng-class="currentColumn.dataClass" class="ng-scope emp-col-actions">
                    <p compile="currentRow[currentColumn.dbCol].displayHtml"><a href="/client1/shuttle/routes/create?code=10214" class="ng-scope">Edit</a><a style="margin-left:10px;" data-ng-click="callerScope.onDeleteButtonPress('10214')" class="ng-scope">Delete</a></p>
                </td><!-- end ngRepeat: currentColumn in metadata.columns -->
                              </td><!-- end ngRepeat: currentColumn in metadata.columns -->
            </tr><!-- end ngRepeat: currentRow in tableRows -->
        </tbody><tbody>
    </tbody></table>

Я пробовал путь как

driver.findElement(By.xpath("//*[contains(text(),'goregaon-vashi')]/following-sibling:://*[contains(text(),'Delete')]")).click();

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Вы пробовали xpath, что вы упомянули выше, просматривая веб-страницу?Этот xpath, который вы упомянули, выделяет веб-элемент Delete?

Я пробовал то же самое, скопировав ваш HTML, и это не так.

Вы можете использовать этот xpath для идентификации Delete:

//a[contains(.,'goregaon-vashi')]/../../..//*[.='Delete']

Здесь элемент Delete не является родственным элементом элемента 'goregaon-vashi'.Следовательно, мы должны перемещаться по его родительскому элементу и должны использовать концепцию следующего брата.

1 голос
/ 20 мая 2019

С таким XPath обычно существует несколько подходов, которые будут работать. Вот как я подхожу к локаторам вот так.

Я пытаюсь найти элемент, который является родительским для обоих элементов, на которые мне нужно сослаться, элемент, содержащий текст, который я ищу, 'goregaon-vashi', а затем ссылку Удалить. Если вы посмотрите на HTML, вы увидите, что оба эти элемента находятся в одной строке таблицы, TR. Поскольку два нужных элемента не находятся в одной и той же ветви DOM, нам нужно найти TR, который содержит один элемент, а затем перейти вниз по другой ветви DOM к ссылке Удалить.

Сначала мы находим TR с тегом A, который содержит текст 'goregaon-vashi'. Если бы все, что мы хотели - это ссылка «goregaon-vashi», XPath выглядел бы как

//tr//a[.='goregaon-vashi']

Чтобы вернуть TR, нам нужно немного изменить XPath на

//tr[.//a[.='goregaon-vashi']]
    ^                        ^
    these extra braces indicate the property that the `TR` should contain

Если вы запустите только это, вы увидите, что он возвращает родительский элемент TR ... именно то, что мы хотим для этого шага. На следующем шаге мы идем вниз по DOM к ссылке Удалить из TR, найденного на первом шаге.

//tr[.//a[.='goregaon-vashi']]//a[.='Delete']
                              ^ this starts the new part

Если вы знакомы с XPath, это должно показаться вам знакомым. Это простой поиск на любом уровне // с поиском тега A, который содержит точный текст «Удалить».

Надеюсь, это имеет смысл. Я проверил это на HTML, который вы разместили, и он вернул правильный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...