2009-11-09 1 views
0

У меня есть некоторые HTML, как это:Селен: Не в состоянии понять XPATH

<h4 class="box_header clearfix"> 
<span> 
<a rel="dialog" href="http://www.google.com/?q=word">Search</a> 
</span> 
<small> 
<span> 
<a rel="dialog" href="http://www.google.com/?q=word">Search</a> 
</span> 
</h4> 

Я пытаюсь получить HREF здесь в Java с использованием Selenium. Я пробовал следующее:

selenium.getText("xpath=/descendant::h4[@class='box_header clearfix']/"); 
selenium.getAttribute("xpath=/descendant::h4[@class='box_header clearfix']/"); 

Но ни одна из этих работ не работает. Он продолжает жаловаться, что мой xpath недействителен. Может кто-нибудь сказать мне, какую ошибку я делаю?

+0

Если вы перешли селен 2 и используют ASP.NET Web Forms (который выглядит так, как вы), вы можете воспользоваться некоторыми вспомогательными классами. http://www.foliotek.com/devblog/simplifying-c-selenium-2-tests-for-asp-net-webforms/ – Narnian

ответ

4

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

selenium.getAttribute("xpath=/descendant::h4[@class='box_header clearfix']/[email protected]"); 

Вы также можете изменить ваш XPath, так что это немного более гибким, чтобы изменить, или даже использовать CSS, чтобы найти элемент:

//modified xpath 
selenium.getAttribute("//h4[contains(@class,'box_header')]/[email protected]"); 

//css locator 
selenium.getAttribute("css=.box_header [email protected]"); 
+0

@Dave & @Legend: Если вам нужна скорость ваших тестов, я бы посоветовал избежать таких гибких выражений xpath (используя // и аналогичные). Причина в том, что Selenium по умолчанию использует библиотеку javascript XPath, которая является _very_ slow (я говорю о секундах здесь), особенно если ей нужно пройти весь HTML-документ, чтобы что-то найти. –

+0

@Igor Это баланс, позволяющий вашему приложению немного измениться без провалов тестов, а ваши тесты работают быстрее. Обычно я предпочитаю не исправлять тесты между изменениями приложений, поэтому не против того, чтобы XPath занимал немного больше времени. Конечно, вы также можете использовать CSS-локаторы, которые быстрее и (как правило) более гибкие. :) –

+0

Спасибо за совет. Это было просто тестирование тестового приложения, поэтому я буду помнить об этом. Иды и имена классов почти динамически генерируются, поэтому в итоге мне остался только XPath ... – Legend

1

У меня были аналогичные проблемы с Selenium и xpath в прошлом, и я не мог ее разрешить (кроме изменения выражения). Чтобы быть уверенным, что я предлагаю попробовать свои выражения xpath с помощью дополнения XPath Checker для firefox.

+0

Спасибо. Я смогу установить это и проверить его. Чтобы убедиться, что я на правильном пути, я правильно использую XPath с селеном? Я имею в виду, какой из них мне следует использовать: getText или getAttribute? – Legend