2009-11-09 72 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> 

我想使用Selenium在這裏得到HREF在Java中。我曾嘗試以下方法:

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 2011-10-20 21:53:46

回答

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庫(我在這裏談論的是秒),特別是如果它需要瀏覽整個HTML文檔才能找到答案。 – 2009-11-09 09:00:40

+0

@Igor這是一個平衡,允許您的應用程序在沒有測試失敗的情況下有所改變,並且您的測試運行速度更快。我通常寧願不修復應用程序更改之間的測試,因此不介意XPath花費更長的時間。當然你也可以使用CSS定位器,這些定位器速度更快,(通常)更靈活。 :) – 2009-11-09 09:22:04

+0

謝謝你的建議。這只是測試應用程序的測試,所以我會牢記這一點。 ID和類名幾乎是動態生成的,所以我只剩下XPath了...... – Legend 2009-11-10 20:59:59

1

我在過去和Selenium和XPath有類似的問題,並不能真正解決它(除了改變表達式)。只是爲了確定我建議嘗試使用Firefox的XPath Checker插件來安裝xpath表達式。

+0

謝謝。我將安裝並檢查它只是爲了確保我在正確的道路上,我是否正確使用了帶有硒的XPath?我的意思是我應該使用哪一個:getText或getAttribute? – Legend 2009-11-09 05:47:19