2012-06-14 38 views
4

我有一個簡單的CSS-based dropdown menu,我嘗試點擊Java Selenium(WebDriver)測試中的一個菜單項。使用WebDriver在基於CSS的菜單中選擇一個選項

enter image description here

兩個菜單(<ul>元件)和項目(<a>)具有標識和創建相應WebElement對象工作正常。我想點擊的項目之一,類似的代碼:

hoverOver(transfersMenu); 
    transferLink.click(); 

hoverOver()我試過all three answers from this question,但他們沒有工作。我不斷收到:

org.openqa.selenium.ElementNotVisibleException: 
    Element is not currently visible and so may not be interacted with 
Command duration or timeout: 2.06 seconds 

(我已經打過電話transferLink.click()hoverOver()之前,希望對隱含等待將使它的工作,但沒了。)

任何想法如何使懸停工作,以便鏈接可以點擊?

Selenium版本2.21.0。我正在使用Firefox 13.0在Linux(Ubuntu)上運行測試。一位同事剛剛在Windows上嘗試過(使用Firefox 12.0),但他也沒有爲他工作。

更新:按照Slanec在評論提示,以及these instructions,我在FirefoxProfile嘗試setEnableNativeEvents(true)。起初,這個失敗:

org.openqa.selenium.InvalidElementStateException: 
    Cannot perform native interaction: Could not load native events component. 

......但之後,我升級到2.23.1硒,我不再讓投訴人。

不過,懸停不起作用(本機事件打開或關閉)。 : -/

+0

鏈接問題的接受解決方案應該工作= /。運行測試時你實際看到了什麼? hoverOver()是否可視化地打開列表?或者不是? –

+0

有些用戶在關於相關事情的不同問題中也建議打開/關閉本地事件。 –

+0

@Slanec:它不能直觀地打開菜單。 (我得到測試通過的唯一方法是手動*將鼠標懸停在菜單上,這使Selenium可以點擊菜單項。)嗯,我會研究本機事件... – Jonik

回答

0

我用下面的代碼到我們的菜單將鼠標懸停在1秒鐘,點擊鏈接之前,就像你正在使用的一個:

action = new SeleniumActionHelper(driver); 

WebElement currentUser = findElementByLinkText("testing1"); 
action.mouseHover(currentUser); 
Thread.sleep(1000); 

值得注意的是,鼠標光標需要保持在懸停的瀏覽器窗口中保留。如果鼠標光標在瀏覽器窗口之外,我體驗到菜單的快速閃存,但不留可見

+0

應該提到'SeleniumActionHelper'似乎來自一個名爲[PrimeFaces]的項目(http://code.google.com/p/primefaces/source/browse/examples/trunk/showcase/src/test/java/ com/prime/showcase/integration/SeleniumActionHelper.java?r = 6585)和'mouseHover()'做的本質是[與此相同](http://stackoverflow.com/a/6233282/56285)。 – Jonik

+0

所以與我已經嘗試的唯一區別是'Thread.sleep(1000)' - 我嘗試過但仍然不適用於我。不管怎麼說,還是要謝謝你。 – Jonik

0

試試這個exampale:

WebElement menuHoverLink= driver.findElement(By.id("test")); 
actions.moveToElement(menuHoverLink).perform(); 
driver.findElement(By.id("test")).click(); 
Thread.sleep(6000); 
+0

我不再使用該產品(或該公司),因此我無法(輕鬆地)嘗試您的解決方案。也許這對他人有幫助。 – Jonik

0

您如何運行你的測試類?我發現通過ANT運行WebDriver使得懸停操作變得不可能,而從命令行(TestNG JAR)或從Eclipse運行測試類的工作很好。

相關問題