Можно ли как-то комбинировать два xpath в одном?

Проблема (Вопрос) заключается

Мне нужно собрать цены со страницы на нескольких табах и проверить, что они отсортированы по возрастанию. При этом для одного из табов после обычного списка цен идет сразу же цены для альтернативных дат, которые отсортированы отдельно. В тегах связанных с ценами, я отличий с обычными ценами не нашел, но они начинаются после разделителя Alternative Dates.

Я попытался сделать

Я собираю все цены с помощью xpath по ценам - это отлично работает, но включает также и цены для альтернативных дат. что ломает мою проверку сортировки.
XPath для цен: //span[@data-test='price']//span[@data-test='JourneyDetailsPriceMain']
XPath для всех элементов, включая цены под разделителем Alternative Dates: //div[@class='Results__alternativeResultsDivider___CLC0m']//following::*
Я решил, что можно комбинировать xpath чтобы показывать все цены, которые не находятся под альтернативными данными

//span[@data-test='price']//span[@data-test='JourneyDetailsPriceMain'] and not(//div[@class='Results__alternativeResultsDivider___CLC0m']//following::*) ```

У меня не получилось ... комбинировать два  xpath, гугл и стейковерфлоу не нашел можно ли так делать. Возможно так делать нельзя.
Хотел узнать у сообщества можно ли комбинировать два xpath в одном и если да - то что  делаю не так?

как вариант решения задачи: можно собирать два массива цен - все цены и цены которые находятся под Альтернативными датами (xpath //div[@class=‘Results__alternativeResultsDivider___CLC0m’]//following::span[@data-test=‘price’]//span[@data-test=‘JourneyDetailsPriceMain’] ), потом вычислять размер массива цен с альтернативными датами = n и удалять из массива всех цен последние n элементов. Таким образом получать на выходе только цены для выбранной даты без альтернативных дат. Но если есть возможность сразу собирать только цены, не включающие альтернативные даты - я бы предпочел так

Неплохо бы HTML код страницы в студию. Сложно предложить решение опираясь только на существующий xpath

Обе цены в одном теге? Нельзя вытянуть по индексу у родителя?

меня интересует принципиально ли возможно так сделать, чем конкретное решение в этом случае. Можно даже перейти от HTML к XML.

<prices>
 <price> 1.00</price>
<price> 2.00</price>
 <price> 3.00</price>
<alternative dates>another date</alternative dates>
<price> 1.50</price>
<price> 2.50</price>
</prices>

чтобы вытащить все цены -xpath //price
чтобы вытащить только цены для альтернативных дат xpath: //alternative_dates//following::price
чтобы вытащить только цены, которые до альтернативных дат - комбинация //price and not(//alternative_dates//following::price) - не работает
можно вытащить с помощью //alternative_dates//preceding::price - получится ли так на моей странице с ценами, которая несколько сложнее этого xml и где альтернативные даты могут присутствовать, а могут и не присутствовать - тогда запрос на preceding ничего не найдет - будем посмотреть, но принципиальный вопрос - можно ли комбинировать два разных xpath и логические операнды в одном запросе, мне все же интересен.

пока единственное отличие которое я на шел - наличие надписи об альтернативных датах и этот class вроде применяется только для надписи, но не для цен под ним - то есть они именно following а не child

У меня вот такое решение вашей проблемы получилось

//prices/price[not(preceding::alternative-dates)]

Может я не до конца понял вопрос, но почему бы не использовать “|”:

Немного не по теме, но возможно будет интересно ознакомится с такой таблицей:

Комбинирование xpath на Selenide:

$(By.xpath("//*").$(By.xpath(“div[@id=‘i_live_in_the_root_of_dom’]”);

Но вам, кажется, для начала нужно показать html того, что пытаетесь селектнуть.

Спасибо за ответы. В итоге. я все же остановился на варианте, что я собираю все цены, потом собираю цены только для альтернативных дат и потом отнимаю их от конца массивов всех цен. Такой подход кажется мне более удачным, так как альтернативные цены могут быть, а могут и не быть - тогда запрос, который включает хpath к ним будет выдавать эксепшн. Значит надо сначала проверять наличие альтернативных дат, а потом уже или запрашивать или не запрашивать цены для этих дат. А обычные цены есть всегда.

Мой xpath так же выдаст обычные цены если нет альтернативных. Не будет ексепшена.

1 лайк