2

Selenium2 WebDriver C# API を使用して、マウスオーバーに応じて動作する JavaScript Web アプリをテストしています。コードを DRY に保つために 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) 位置に設定するか (私の場合は、単一ページの 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();
    }
}

フレーム内のすべてがクラスを継承し、メソッドにアクセスできます。

于 2013-05-23T07:37:29.577 に答える