2

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

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

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

4

1 回答 1

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

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

于 2013-05-23T07:37:29.577 回答