Вопрос на знание XPATH - почему не находит элемент?

Всем привет.

Вот такой локатор:

.//*[contains(text(),‘Вы успешно’)]

<div class="step-success ng-binding">
            <div class="svg-icon svg-icon-3x svg-icon-success" name="icon-success" size="3">
                        <svg class="icon-svg"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/images/icons-svg-931e29ae.svg#icon-success"></use></svg>
                        <!-- ngIf: additionalIcon -->
                    </div>
            Вы успешно создали инвайт(-ы)
</div>

https://www.w3.org/TR/1999/REC-xpath-19991116/#node-tests

https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Function-Calls

https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions

1 лайк

и?) это не отвечает на вопрос, синтаксис у локатора правильный

В полной мере отвечает. Читайте - вдумывайтесь.

//div[contains(text()[normalize-space()],‘Вы успешно’)]

1 лайк

спасибо получилось!

Не очень изящно.

других вариантов нет если нужно искать по тексту

Полагаю, что в Селениде я бы сделал что-то вроде:

$(By.xpath("//*[text()=“Вы успешно создали инвайт(-ы)”]"));

Думаю все же есть, но надо проверять на конкретно вашем объекте

Иногда объект может содержать несколько текстовых нод. На примере их две: одна просто перенос строки, вторая - как раз содержит необходимый текст. Селектор в этом же примере - дергает текст из второй ноды, и является правильным (ну в какой-то мере “правильным”, как компромис между хорошим и красивым)

Ну и да: @vmaximv ответил на вопрос в первом же посте, конкретно описанная мною проблема - это 3я цитата, и скорее всего применима именно в вашем случае.
Я разжевал, что называется, на пальцах, в иной раз - так же отправил бы читать мат.часть; головой надо думать, а не бежать с каждой встречной банальностью на форумы за помощью

1 лайк

//*[text()=‘Вы успешно’]

Не сработает. Нужен дополнительно contains() как минимум.

Извиняюсь, вы правы нужен contains.

В selenide (c 4.10 понимает “неразрывные” пробелы) можно так:

$(withText("Вы успешно"))

//*[contains(.,‘Вы успешно’)]

Если вы объясните как работает ваш локатор - то скорее всего вы сами поймёте, что так делать очень плохо.