2015-02-05 3 views
0

Такая структура задаютсяXPath запроса поиск

<div class="user-number">123</div> 
<div class="user-state"> 
<span class="u-state-icon icon icon-1"></span> 
<span> User1</span> 
</div> 

Я пробовал такое (неправильное) XPath для поиска User1 по user-number и не понимаю, где проблема ..

xpath=//*[@class='user-number' and text() = '123']/following-sibling::*[contains(@class,'user-state')]/descendant::*[contains(@text,'User1')] 

Что такое лучший способ отладить его? Например, если

xpath=//*[@class='user-number' and text() = '123']/following-sibling::*[contains(@class,'user-state')] 

находит некоторый элемент - как распечатать его текстовое свойство - чтобы проверить, какой элемент на самом деле находится?

+0

похоже, что я нашел ответ // * [@ class = 'user-number' и text() = '123']/next-sibling :: * [contains (@ class, 'user-state')]/span [text() = 'User1'] Но лучший путь для отладки по-прежнему остается вопросом)) – Jadwiga

ответ

0

Ваше выражение XPath является, конечно же, неправильно - @text следует заменить text() (или просто .): выражения XPATH

//*[@class='user-number' and . = '123']/following-sibling::*[contains(@class,'user-state')]/descendant::*[contains(.,'User1')] 

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

$x("//*[@class='user-number' and . = '123']/following-sibling::*[contains(@class,'user-state')") 

И посмотреть, если есть совпадение.

Или вы также можете отладить его внутри своего кода. Например (с использованием python), найти первый элемент div и распечатать это текст:

element = driver.find_element_by_xpath("//*[@class='user-number' and . = '123']") 
print(element.text) 
0

мета-вопрос, как отлаживать XPath выражения?

Ну, для простых, подобных им, лучше всего просто смотреть на них, пока не увидите проблему. Проверьте правописание имен, проверьте пространства имен, проверьте проблемы с пробелами. По крайней мере, это проще, чем отладка регулярных выражений.

Для более сложных XPaths попробуйте разбить их. Удалите предикат и посмотрите, не изменилось ли это. Или работайте в обратном порядке, создайте выражение пути, добавив условия, проверяя на каждом этапе, что он все еще что-то находит.

Если вы действительно серьезно относитесь к XPath, рассмотрите обработку, ориентированную на схему: это будет соответствовать вашему выражению XPath против схемы, чтобы убедиться, что это имеет смысл.

Рассмотрите возможность использования визуального процессора XPath для отладки. Число вокруг. Я использую процессор XPath в oXygen (хотя на самом деле не для отладки XPath, больше для обнаружения содержимого документа, но эти задачи часто необходимо выполнять вместе.)