избежать двоеточия в поиске Xpath

Я использую Hpricot с селеном. У меня есть этот элемент ввода html:

<input id="foo:bar"/>

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

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

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

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

Любые идеи?

Благодарность


person Oscar C    schedule 29.06.2010    source источник


Ответы (3)


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

id=foo:bar

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

person Dave Hunt    schedule 29.06.2010

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

Итак, в основном:

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

Надеюсь это поможет.

person edouardbriere    schedule 26.10.2012

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

css=input[id:contains('foo:bar')]
person AlistairH    schedule 29.06.2010
comment
Я не знаком с hpricot, поэтому не могу сказать вам, как преобразовать его в соответствующий синтаксис для этого, но, похоже, он поддерживает локаторы CSS. - person AlistairH; 29.06.2010
comment
Я видел в документации HPricot, что вы можете использовать либо выражение XPath, либо локатор css. Я пробовал ваше предложение, но оно не сработало, хотя не уверен, что это была моя ошибка, я новичок в xpath и селене. Я нашел обходной путь, чтобы получить уникальный элемент со второй частью идентификатора + другой атрибут. Благодарность - person Oscar C; 30.06.2010