2014-11-14 3 views
1

Я пытаюсь найти элемент на веб-странице, используя Xpath в Selenium API, но похоже, что Xpath на selenium не находит этот элемент из-за пространств имен XHTML. Есть ли способ найти элемент с XHTML на Selenium?Xpath с пространствами имен XHTML в Selenium API Java

Вот Exemple моего вопроса:

<document> 
<xhtml:html xmlns="http://www.w3.org/1999/xhtml"> 
<xhtml:head> 
<xhtml:body onload="initialiser();"> 
<xhtml:div align="center"> 
<xhtml:div align="left"> 
</xhtml:html> 
</document> 

Я хочу найти свой элемент без указания имен, как // XHTML: ДИВ На самом деле, я просто хочу, чтобы использовать как Xpath: // ДИВ

+0

Какой элемент вы хотите найти здесь? – Saifur

ответ

-1

Вы можете использовать подстановочный знак для пространства имен. Что-то вроде: //*:div[1] вернет первый элемент div.

+1

Нет, это работает только с XPath 2.0. Selenium поддерживает все, что находится в браузере, в настоящее время это XPath 1.0. – Abel

-1

Есть два способа написания Xpath для любого webElement:
1: запись абсолютного XPATH
2: написание относительной XPATH

Если писать absoulte XPath, вы должны приступить к HTML иерархии и когда вам понадобится // xhtml ... , но если вы напишете относительные xpaths, вам не нужно определять точную иерархию html

так, предположим, вы хотите, чтобы xpath идентифицировал левый div - // div [@ align = 'left']

+1

Как это помогает аферу? OP явно не имеет проблем с XPath в целом. Кроме того, '// xhtml' does ** не ** требует абсолютной иерархии и, честно говоря, ни относительных, ни абсолютных выражений XPath. Это зависит от выбранной ** оси ** на шаг ** оси **, требуется ли вам писать точную иерархию или нет – Abel

1

(я знаю, что этот вопрос был задан почти год назад, но, похоже, существующие ответы не дают ответа на исходный вопрос)

Последние Селен строит now allow you to use the same prefix as in your document с XPath выражений. Это было зафиксировано в марте 2015 года и тем временем было принято в основной филиал. Не уверен, что он уже находится в текущем стабильном публичном выпуске.

Поскольку простые тесты узлов, такие как ваше предложение, /div, не будут работать даже с новой сборкой селена, вы можете использовать //*[local-name() = 'div'], что даст вам то, что вы хотите.

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