Проблема (Вопрос) заключается в том что не находит элемент
Код
.//*[contains(text()[normalize-space(.)],'Сумма перевода меньше $ 0.50')]
игра с пробелами не дала результата. если указывать без $ 0.50 то все ок
Проблема (Вопрос) заключается в том что не находит элемент
Код
.//*[contains(text()[normalize-space(.)],'Сумма перевода меньше $ 0.50')]
игра с пробелами не дала результата. если указывать без $ 0.50 то все ок
Так у Вас же перевод строки. Надо не пробелами играться, а переводами строк
Как тогда это отобразить в xpath
Попробуйте добавить “\n” прямо в текст после “Сумма перевода меньше”
Вообще, играть с текстом в xpath - так себе практика, не стабильная. Мой совет - найдите этот элемент не по тексту и заберите текст, а потом заведите себе функу типа:
def get_lower_alnum_text(string: str) -> str:
return ''.join([s.lower() for s in string if s.isalnum()])
И сравнивайте строки уже в тесте.
искать тест по хпасу - единственный вариант когда куча кнопок или филдов . работает стабильно. ищем же по тексту.
Скопируйте текст из элемента, в xpath убрав граничные пробелы.
Пробовал, не помогл
Что мешает найти все элементы с куском текста «Сумма перевода меньше», а затем из них найти нужный?
Тогда 2 contains
.//*[contains(text(),'Сумма перевода меньше') and contains(text(),'$ 0.50']
Хорошее решение, попробую
вам проверить значение или выбрать элемент?
если проверить значение я бы взял у этого элемента getText()
и потом простая проверка assertJ
так есть иквалс игнорируя пробелы, переносы строк и тд
Если еще надо давай сюда свой кусок DOMа в текстовом формате, попробую напиать тебе xpath по тексту
Согласен.
Плюс, не генерируется ли часом $ 0.5 динамически? Если так, то xpath отрабатывает раньше сгенерированного элемента.
нет, не генерируется
прикрепил
Решения вижу здесь 4:
.//small[contains(text(), '$ 0.50')]
.//*[contains(normalize-space(text()), 'Сумма перевода меньше $ 0.50')]
по моему если code base java (java.util.stream.Collectors
) c# (System.Linq
) ruby (core) ( про Пyтон наверняка не знаю ) то можно производить на клиенте фильтрацию и по моему это довольно популярно
А если так?
.//*[text()[contains(normalize-space(.),‘Сумма перевода меньше $ 0.50’)]]