2010-06-29 2 views
3

Я использую Hpricot с селеном у меня есть этот HTML элемент ввода:избежать толстой кишки в поисках Xpath

<input id="foo:bar"/> 

И я пытаюсь получить это значение с этим Xpath выражением:

source = Hpricot(@selenium.get_html_source) 
source.search("//input[@id='foo:bar']") 

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

Есть ли способ избежать этого или избежать этой проблемы? Я не могу изменить значения в html, поэтому foo: bar должен быть таким образом, с двоеточием. Но мне нужно как-то найти этот элемент.

Любые идеи?

благодарит

ответ

1

Вы можете быть в состоянии достичь этого с помощью CSS локатора, и указать, что идентификатор содержит определенную строку (на самом деле это соответствие строки должны удалить любые странности, вызванные толстой кишкой). Этот локатор работал для меня, когда я попробовал его в Selenium IDE:

css=input[id:contains('foo:bar')] 
+0

Я не знаком с hpricot, поэтому не мог рассказать вам, как преобразовать в соответствующий синтаксис для этого, но он, похоже, поддерживает CSS-локаторы. – AlistairH

+0

Я видел в документации HPricot, что вы можете использовать выражение XPath или css-локатор. Я пробовал ваше предложение, но это не сработало, не уверен, что это была моя ошибка, но я новичок в xpath и selenium. Я нашел обходное решение, чтобы получить уникальный элемент со второй частью идентификатора + другой атрибут. благодаря –

2

Вам не нужно использовать XPath для этого локатора, до тех пор, как id уникален, вы можете просто использовать:

id=foo:bar 

Даже тогда префикс id= не требуется, поскольку он будет приниматься по умолчанию.

2

У меня была такая же проблема, и другие предлагаемые здесь решения не помогли мне, поэтому использовали get_element_by_id.

Так в основном:

source = Hpricot(@selenium.get_html_source) 
source.get_element_by_id("foo:bar") 

Надеется, что это помогает.

Смежные вопросы