我正在使用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();
}
这就是把浏览器放在无人区的地方。有更好的方法吗?
答案 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();
}
}
框架中的所有内容都可以继承该类并访问该方法。