2013-02-25 27 views
4

我一直在嘗試使用Selenium WebDriver與Firefox 19測試我的網頁中的工具提示。
我基本上試圖使用鼠標操作將鼠標懸停在附帶工具提示的元素,以便測試工具提示是否顯示,並懸停在另一個元素上以測試工具提示是否隱藏。 第一個操作很好,但是當鼠標懸停在另一個元素上時,工具提示仍然可見。手動測試網頁時不會發生此問題。
有沒有其他人遇到過這個問題?我使用的是Ubuntu 12.04。Selenium WebDriver鼠標操作moveToElement不會在Firefox上引發鼠標事件Linux

回答

5

高級動作API似乎依賴於本機事件,默認情況下這些事件在Linux版本的Firefox中被禁用。因此,必須明確地在WebDriver實例中啓用它們。

FirefoxProfile profile = new FirefoxProfile(); 
//explicitly enable native events(this is mandatory on Linux system, since they 
//are not enabled by default 
profile.setEnableNativeEvents(true); 
WebDriver driver = new FirefoxDriver(profile); 

而且,在我來說,我需要升級,因爲懸停webdriver的2.31版本(moveToElement)行動沒有正確的2.30甚至明確啓用本地事件工作。使用WebDriver 2.31版和Firefox上Firefox 17和19版對此進行了測試。 欲瞭解更多信息,你可以檢查此鏈接:
http://code.google.com/p/selenium/wiki/AdvancedUserInteractions#Native_events_versus_synthetic_events

+0

這正是我的問題。我發現.click()可以與Actions正常工作,但是直接操作鼠標的任何內容(例如移動或拖動)都不起作用。在創建驅動程序時設置此更正了問題。 – AndyPerfect 2013-05-29 22:55:47

1

我也遇到了Firefox 19上Selenium 2.30的這個問題。它在FF 18.2上正常工作。

+0

您是否發現此問題的任何解決方法?我試圖在Mac上的Firefox上測試它。 – nids 2013-05-09 15:07:28

-1

我有同樣的問題。 起初我用方法moveToElement()沒有perform()。 然後我加Firefox ProfilesetEnableNativeEvents,但它仍然沒有爲我工作。 最後,我以這種方式(解決了這個問題,只需添加perform()

WebElement username = driver.findElement(By.id("username")); 
Actions actions = new Actions(driver); 
actions.moveToElement(username).perform(); 
WebElement tooltip = driver.findElement(By.id("tooltip")); 
tooltip.isDisplayed();

,它工作正常

1

這是一個簡單而方便的方法,用javascript調用,將發送一個鼠標移出()事件(我更喜歡用By來傳遞它們,但是你可以把它改成任何你喜歡的東西

我在Chrome中遇到了一個問題,那裏的工具提示一旦被點擊並且遮住了其他附近的點擊事件就會拒絕關閉,導致它們這種方法在那種情況下節省了一天的時間,希望它能幫助別人LSE!這樣

/** 
* We need this to close help text after selenium clicks 
* (otherwise they hang around and block other events) 
* 
* @param by 
* @throws Exception 
*/ 
public void javascript_mouseout(By by) throws Exception { 
    for (int i=0; i<10; i++) { 
     try { 
      JavascriptExecutor js = (JavascriptExecutor)driver; 
      WebElement element = driver.findElement(by); 
      js.executeScript("$(arguments[0]).mouseout();", element); 
      return; 
     } catch (StaleElementReferenceException e) { 
      // just catch and continue 
     } catch (NoSuchElementException e1) { 
      // just catch and continue 
     } 
    } 
} 

您可以將任何類型的點擊後稱之爲()事件:

By by_analysesButton = By.cssSelector("[data-section='Analyses']"); 
javascript_mouseout(by_analysesButton); 

據透露,礦山試圖通過10倍以上。與嘗試/捕獲循環,因爲我們的應用程序有一個傾向Chrome針對過時的元素異常,因此如果您沒有這個問題,該方法可以大大減少。

相關問題