2015-10-14 53 views
0

我一直試圖在硒中單擊名爲bullet的類的span元素。這是一種樹狀結構,可以一旦點擊就展開它的孩子。我嘗試了以下方式,但它不起作用。 下面是UI代碼單擊硒中存在的span元素

<ul id="treelist" class="ltree"> 
<li class="liClosed"> 
<span class="bullet"> </span> 
<b>Setup</b> 
<ul> 
<li></li> 
<li></li>............ 
..................... 
</ul> 
</li> 
</ul> 

的錯誤是: 給定選擇// * UL [@ ID = '樹形列表'] //利[2] //跨度是無效或不導致WebElement

我使用的代碼是:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://somewebapp");  
    WebElement userElement = driver.findElement(By.xpath("//*ul[@id='treelist']//li[2]//span")); 

我想編輯的XPath的方法很多,但未能成功。有人可以幫助解決這個問題嗎?

回答

1

XPath表達式確實無效,刪除*ul

//ul[@id='treelist']//li[2]//span 

這裏是另外一種選擇以定位所需span標籤:

//ul[@id='treelist']//span[@class='bullet'] 

或者,用CSS選擇器

driver.findElement(By.cssSelector("ul#treelist span.bullet")); 
+0

我也試過,它引發nosuchelement異常。無法找到元素:{「method」:「xpath」,「selector」:「// ul [@ id ='treelist'] // li [2] // span」} – rick

+0

感謝您的時間,但同樣的錯誤以上所有答案 - >無法找到元素:{「method」:「css selector」,「selector」:「ul#treelist span.bullet」}。有什麼我失蹤了嗎? – rick

+0

@rick快速檢查 - 頁面上有iframe元素嗎? – alecxe

0

如果你沒有綁定到XPath,你可以嘗試一個簡單的CSS選擇器。

WebElement userElement = driver.findElement(By.cssSelector("span.bullet")); 

看起來像你需要處理一個框架內存在的元素。你可以谷歌很多例子,如何做到這一點,但這裏有一個來自SO。

Find elements inside forms and iframe using Java and Selenium WebDriver

+0

CSS選擇器比XPATH更可靠,特別是當您有語義類名時。這個答案唯一的問題是它沒有解決問題,這只是一個解決方法。 –

+0

@JuanMendes這很大程度上取決於XPath的製作方式。我看到很多人通過右鍵單擊開發工具欄中的某個元素來獲得完整的XPath,而這些元素非常脆弱。手工製作的一個不太脆弱,但我發現CSS選擇器比XPath搜索複雜得多並且速度更快......但這只是我自己。 – JeffC

+0

嘗試按類名選擇元素對於XPATH來說非常困難,特別是如果你想選擇一個具有object類而不是object-anything-else類的項。因此,如果您要將語義信息添加到類屬性中,則獲得可靠的鉤子會更容易。 –

0

span.bullet is not第二li中,這是第一個內。嘗試

//ul[@id='treelist']//li[1]//span 
+0

我有許多li元素,但是我想在ul中選擇第二個li,這就是爲什麼我將代碼編寫爲By.xpath(「// * ul [@ id ='treelist'] // li [2] // span「),你能建議如何去第二個李? – rick