Получить родителя по тексту элемента n вложенности

Добрый день.
Кусок html:

<tbody>
  <tr>
    <td class="text-start">
      <span data-v-b91c7d64="">
        <a data-v-b91c7d64="" href="/preparation/view/bf304fbb-2ae6-42ed-aab3-489c9b8d3586?sequence_id=2969" class="link">2969</a>
      </span>
    </td>
  </tr>
</tbody>

Вопрос в следующем:
Как методами Selenide получить tr по тексту из span? (который 2969)
Пробовал сделать следующее:

public SelenideElement getRowFromTableOnValue(String searchValue) {
        SelenideElement findRowInTableWithValue = $(byXpath("//tbody/tr")).find(byText(searchValue));
        return findRowInTableWithValue.closest("#tr");
    }

Но как я понимаю поиск происходит на уровне элемента td.
Пробовал указывать путь так //tbody/tr/td, но так тоже не работает.
P.S
сразу напишу, что задача легко решается через xpath:

public SelenideElement getRowFromTableOnValue(String searchValue) {
        SelenideElement findRowInTableWithValue = $(byXpath("//tbody/tr")).$x(String.format(".//*[text()='%s']", searchValue));
        return findRowInTableWithValue.$x("./ancestor::tr");
    }

Но интересно, как она решается именно через методы Selenide (имеется ввиду методы find или что то подобное)

Привет!

Но как я понимаю поиск происходит на уровне элемента td.

Нет, с чего вы взяли?
Строка $(byXpath("//tbody/tr")).find(byText(searchValue)) находит элемент <a ... class="link">2969</a>.

задача легко решается через xpath

Ну так и можно через XPath, почему бы нет?
В конце концов сам селенид под капотом тоже использует XPath для этих же целей.

как она решается именно через методы Selenide

А вообще можно так: $(byTagAndText("span", "2969")) (метод byTagAndText появился в Selenide 6.3.0).

Приветствую, спасибо за ответ!
Через .find(byText(searchValue)).closest("#tr"); выбрасывается:

org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression ancestor::#tr[1] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string 'ancestor::#tr[1]' is not a valid XPath expression.
  (Session info: chrome=100.0.4896.127)

Проверял на версии Selenide 6.1.1

решётку-то уберите!

2 лайка

closest("#tr") означает поиск по id, а вам нужно по Тэгу. Поменяйте на closest(“tr”).

1 лайк

Заработало, спасибо!