2013-05-17 83 views
1

我正在測試一個JavaScript Web應用程序,取決於使用Selenium2 WebDriver C#API的鼠標的一些行爲。我有一個擴展方法在web元素上執行懸停以保持DRY代碼。如何重置Selenium鼠標光標位置?

public static void Hover(this IWebElement webElement, IWebDriver driver) 
{ 
    new Actions(driver).MoveToElement(webElement).Perform(); 
} 

現在我想要一個將鼠標位置「重置」爲獨立於元素的某個自然默認值的方法。我在TearDown()中調用這個函數,在測試後讓驅動程序保持已知狀態。最好的我可以拿出是

public static void ResetMouseCursor(IWebDriver driver) 
{ 
    new Actions(driver).MoveByOffset(-9999, -9999).Perform(); 
} 

哪個只是把瀏覽器放在無人地帶。有一個更好的方法嗎?

回答

0

DOM不可知的方法似乎是一個壞主意。 上述代碼在Firefox驅動程序中完全陷入「超出文檔範圍」異常。

我能想出的最好的東西是將鼠標光標設置到頁面上最根元素的(0,0)位置或(在我的情況下是一個持有單頁javascript的IFrame)應用程序)並使用繼承來完成初始化。在C#驅動程序中,這是。

public class RootFrame 
{ 
    [FindsBy(How = How.CssSelector, Using = "#root-id")] 
    private IWebElement vfrFrame; 
    protected IWebDriver driver; 

    public VfrElement(IWebDriver driver) 
    { 
     this.driver = driver; 
     PageFactory.InitElements(driver, this); 
    } 

    public void ResetMouseCursor() 
    { 
     new Actions(driver).MoveToElement(vfrFrame, 0, 0).Perform(); 
    } 
} 

該框架中的所有內容都可以繼承該類並獲得對該方法的訪問權限。