如何重置Selenium鼠标光标位置?

时间:2013-05-17 09:59:47

标签: c# selenium-webdriver

我正在使用Selenium2 WebDriver C#API测试一个具有某些行为的javascript Web应用程序,具体取决于鼠标。我有一个扩展方法,它在web元素上执行悬停以保持代码DRY。

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();
}

这就是把浏览器放在无人区的地方。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

DOM不可知方法似乎是一个坏主意。  上面的代码完全在Firefox驱动程序中用于“走出文档”例外。

我能想到的最好的事情是将鼠标光标设置到页面上最根元素的(0,0)位置或(在我的例子中是一个IFrame,持有单页javascript应用程序)并使用继承来进行初始化。在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();
    }
}

框架中的所有内容都可以继承该类并访问该方法。