2017-07-27 94 views
-3

我在點擊span標記中給出的鏈接文本時遇到問題。如何點擊使用硒內部span標記的鏈接java

的html代碼:

<div id="menu" style="width: 1752px;"> 
<div class="dd_menu" dd_event_id="dd_event_2"> 
<a class="dd_menu_menu_entry dd_menu_entry_clickable" href="javascript:void(0);" style="left: 3px; width: 111px;" dd_menu_id="0"> 
<a class="dd_menu_entry dd_menu_entry_clickable" href="javascript:void(0);" style="left: 114px; width: 131px;" dd_menu_id="1"> 
<span class="text" style="background-color: rgba(0, 0, 0, 0);">FirstMenu</span> 

我需要點擊文本 'FirstMenu'。

我已經使用的XPath:.//*[@id='menu']/div/a[2]/span

這似乎並沒有工作。我如何解決它?

+1

你是什麼意思不起作用? –

+0

歡迎來到Stack Overflow!請參閱:[我如何做X?](https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close-reason-for-how-do-i-dox )對SO的期望是,用戶提出的問題不僅僅是研究來回答他們自己的問題,而且還分享研究,代碼嘗試和結果。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案!另請參見:[ask] – JeffC

+0

它給xpath提供了一個錯誤'Unable to locate元素' – roma

回答

0

您的xPath返回span元素,以便您單擊該範圍。爲了使您的XPath返回一個鏈接柔夷花序查詢到以下幾點:

//*[@id='menu']/div/a[span]

該查詢返回一個「鏈接」有跨度元素作爲孩子。

-2

使用xpath並不好。如果頁面的html被改變,你的代碼將停止工作。嘗試使用CSS選擇器。 這是很簡單的代碼,你可以修改它爲您的情況:

var collection = driver.getelementsBy(By.cssSelector('div#menu div')) 

它應該返回你收集的元素 之後,你可以通過訪問集合,找到你要點擊的元素。 希望答案可以幫助你。

+0

'cssSelector'將無法找到'span'標籤。謝謝 – DebanjanB

+0

謝謝,但即使在嘗試所有解決方案後,它似乎沒有任何工作。 – roma

0

嘗試使用下面的XPath: -

//span[contains(.,'FirstMenu')] 

如果它不工作,那麼有可能是任何幀存在。您需要先開啓它。

請讓我知道是否有名稱爲FirstMenu對DOM

更多元素

希望它會幫助你:)

+0

您應該使用equals而不是'contains()'儘可能具體,'// span [。='FirstMenu']' – JeffC

1

如果你的要求是「點擊鏈接FirstMenu上」,那麼你應該使用作爲定位器。無需篡改XPath。

driver.findElement(By.partialLinkText("FirstMenu")).click(); 

.partialLinkText()定位策略應占任何多餘的空格填充由於額外span元素。

+1

這將不起作用,因爲文本位於子SPAN中,而不是'A'標籤。 – JeffC

+0

@JeffC它使用內部文本,並且我假設結束時缺少結尾'',它有一個結束標記,我錯過了當我粘貼代碼時錯過了結尾標記 – SiKing

+0

。我是硒初學者,我剛開始嘗試。我正在測試的網站有超過5個類似的代碼和不同的文本創建菜單。 – roma

0

這個問題通過使用上面指定的相同xpath與通常的語法driver.findElement(By.xpath(「// * [@ id ='menu']/div/a [2]/span」 ))點擊();在給出了測試用例執行的順序之後,使用@Test(priority = something)並給出了一些隱含的等待。 謝謝大家的建議。 問候, 羅馬