2013-05-26 68 views
2

我是新來的硒,並有一個XPath查找元素的問題。我試圖解決這個問題,但花費了太多的時間,它仍然不起作用。使用硒,xpath找不到'文本'元素

我試圖從this網站自動下載文件。

我正在搜索包含版本名稱的元素,之後我需要相應地單擊下載圖標。

example

我寫了下面的代碼,以便找到元素

var element1 = driver.FindElement(By.XPath("//*[@id='versiontable']/div[3]/a[Text()='Firefox 22.0 (Beta 2)']")); 

但是,這是行不通的,元素不能被發現。

然後我需要點擊相應的下載圖標。我不知道如何點擊與當前版本的Firefox相關的元素。有什麼建議麼?

+0

XPath看起來不對。嘗試[Firepath](https://addons.mozilla.org/en/firefox/addon/firepath/)或一些類似的工具,以便能夠檢查Firebug中的XPath表達式(或使用[Firebug控制檯](http:///getfirebug.com/wiki/index.php/Command_Line_API#.24x.28xpath.29))。此外,我會嘗試'//* [@ id ='versiontable']/div [3] // a [text()='Firefox 22.0(Beta 2)']'(使用'// a'匹配更深層次的'a'元素 - 雖然不確定'div [3]'部分)還是寧可[By.linkText()'](http://selenium.googlecode.com/svn/trunk/docs/api/的Java /組織/ openqa /硒/ By.ByLinkText.html)。 –

+0

感謝您的諮詢。我下載了Firepath,看起來很有幫助。 –

回答

1

首先xpath函數text()必須寫成小寫。
此外,您正在尋找的鏈接條目不是第​​三(3)格。

因爲直接下載是div中class =「right」的鏈接。
請試試這個:

"//div[div/a[text()='Firefox 22.0 (Beta 2)']]/div[@class='right']/a" 
+0

這項工作也適合我。謝謝!我只是想澄清爲什麼我們需要括號「[」第一格後? –

+0

這不是非常有效,也不可維護。您使用與cindition相同的表達式,然後進行導航,因此您無意中兩次執行查找。在這種情況下,它與'// div/div [@ class ='right']/a [text()='Firefox 22.0(Beta 2)']'相同。如果div內有多個'a'元素,它甚至不會是正確的,因爲它會找到所有'a'元素。 – dirkk

+0

@dirkk:我擔心你錯過了「行」中有兩個鏈接的地方。我建議仔細看一下頁面。如果你仍然不理解xapth凸輪,我會給你正確的解釋;-)。也許你應該測試你的xpaht。 –

4

爲什麼不使用By.linktext,對我來說好像容易多了?

driver.findElement(By.linkText("Firefox 22.0 (Beta 2)")).click(); 

但是,您的XPath不工作的原因是它不適合網頁的結構。 div[3]並不是指層次結構中的三個div,而是指下一層次中的第三個div。你需要類似的東西

var element1 = driver.FindElement(By.XPath("//*[@id='versiontable']/div/div/div/a[text()='Firefox 22.0 (Beta 2)']")); 
+0

你是對的,它實際上是工作 - 只是linkText。但是,我確信我正在嘗試幾次,但無論如何,它現在對我來說確實有效。謝謝。 –