Как использовать XPath для выбора непосредственного брата элемента, который имеет определенный innerText? - PullRequest
0 голосов
/ 17 октября 2019

Вот мой пример исходного HTML:

<!-- Many other elements above this -->

<div class="emf-div-field">
    <span style="width:175px">
        <input class="validate[required]" style="width:100%" value="" id="element_2" name="element_2" type="text">
        <label for="element_2" class="emf-bottom-label emf-text-center">First</label>
    </span>

    <span style="width:125px">              
        <input class="validate[optional]" style="width:100%" value="" id="element_6" name="element_6" type="text">
        <label for="element_6" class="emf-bottom-label emf-text-center">Middle</label>
    </span>

    <span style="width:175px">
        <input class="validate[required]" style="width:100%" value="" id="element_3" name="element_3" type="text">
        <label for="element_3" class="emf-bottom-label emf-text-center">Last</label>
    </span>

</div>

<!-- Many other elements below this -->

Мне нужно, чтобы XPath выбрал элемент <input> непосредственно перед элементом <label>, чей innerText - «Первый». Элемент <input> всегда является родственным элементом <label>.

Это должен быть относительный выбор, основанный на <label> innerText, потому что в общем случае эти операторы могут быть на многих разных уровнях.

Я пробовал это (и многие другие варианты), но ни один не работал:

//input[preceding-sibling::label[text() = "First"]]

Спасибо.

1 Ответ

1 голос
/ 17 октября 2019

Не делайте это слишком сложным. Просто используйте

//span[label='First']/input

Но если вам действительно нужен путь относительно элемента label, используйте

//label[.='First']/preceding-sibling::input[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...