Доброго времени суток! Подскажите пожалуйста, как методами селенида найти на странице элементы, у которых есть определённое текстовое или value значение?
С помощью xpath это реализуется
//*[contains(normalize-space(text()), '%1$s') or contains(normalize-space(@value), '%1$s')]
с помощью селенида пытался у найденной строки таблицы искать
текст находит, а value пытается найти не у вложенных элементов, а у самого тега tr. Как искать у вложенных так и не разобрался, потому что or требует тип Condition, не понял, как увязать поиск дочерних элементов и привести их к условию.
Так же не смог найти материала по Condition.or, что за строку сначала нужно ввести, взял из какого-то единственного примера, который нашел в интернете.
Спасибо! Но получается, использование xpath предпочтительнее, т.к. быстрее? Или это только для данного случая? Просто находил в интернете статьи, где люди говорили, что использовать xpath это последнее дело и надо стараться в первую очередь пользоваться методами селенида, т.к. читаемость и универсальность выше
Зависит.
Можно и xpath написать читабельный, а можно и на селениде наговнокодить.
В данном случае - xpath лучше, потому что быстрее. А быстрее он потому, что найдёт нужные элементы за одно обращение к вебдрайверу.
А строчка типа tableRaw.findAll(“td”).filter(or(“text”, text(value), value(value)) будет много раз обращаться к вебдрайверу: сначала получить список элементов, потом в цикле для каждого элемента его текст, его значение… А каждый вызов вебдрайвера занимает несколько десятков миллисекунд. Может, это и не будет заметно, если элементов не много. Но бывает, что их много - скажем, сотня - тогда разница уже будет чувствоваться.
В общем, в каждом случае надо смотреть по обстоятельствам.