t.me/atinfo_chat Telegram группа по автоматизации тестирования

Проблема с постоением правильного xpath

Проблема следующая: пытаюсь по хpath получить нужный текст

    <p style="text-align: center; ">
<strong>Opening hours: </strong>
<br/>
Monday - Thursday 9.00 - 17.00
<br/>
Friday 9.00-16.00
</p>

строю следующий хpath: //*[@id=‘node-1031’]//p[1]
в итоге получаю три строки:

Opening hours:
Monday - Thursday 9.00 - 17.00
Friday 9.00-16.00

задача получить отдельно вторую строку

Для xpath все эти строки равнозначны - это содержимое ноды. Отдельно вторую строку через xpath получить не удастся, надо парсить с помощью других инструментов. Например, regexp, либо просто подстроку искать - зависит от особенностей содержимого ноды

http://www.freeformatter.com/xpath-tester.html#ad-output

Ваш xml
Гугл подсказал такое:
xpath = //p[1]/text()[preceding-sibling::br and following-sibling::br]
result = Monday - Thursday 9.00 - 17.00

P.S. Но лучше попросите девов, сделать что-то более удобоиспользуемое.

1 Симпатия

//p/text()[3] - это правильно с точки зрения xpath, от тока в селениуме такая конструкция работать не будет, т.к. результатом выполнения xpath должна быть нода, а не текст.

Напишите регулярное выражение для выборки конкретного элемента

reg = reg.replaceAll("<.*?>", "").replaceAll("(?m)^[ \\t]*\\r?\\n", "");
String[] result = reg.split("\n");

Где:
result[0] = “Opening hours:”;
result[1] = “Monday - Thursday 9.00 - 17.00”;
result[2] = “Friday 9.00-16.00”;

В вашем случае System.out.print(result[1]);

Monday - Thursday 9.00 - 17.00

Очень круто и сильно!!! Видно что человек знает xpath
но боюсь что некоторые браузеры не смогут отработать такой крутой Xpath

1 Симпатия

Я бы поступил проще, брал бы весь текс и парсил используя java substring
может прямолинейно но всегда понятно как оно работает :slight_smile: