0

ポップアップするダイアログで [OK] をクリックしようとしています。IE9 が WatiN のダイアログ ハンドラとうまく連携しないことを読みました。私は WatiN-2.1.0.1196-net-4.0 を使用しています。

以下は私の方法です。基本的に、アラートページに移動します。そのページでは、行ごとに個別に削除をクリックするか、複数のチェックボックスを選択して一括で削除できます。個々のアラート削除ボタンのコレクションの最初の削除ボタンを取得し、それが存在するかどうかを確認します。その場合は、[すべて選択] ボタンをクリックしてから、[選択したアラートをすべて削除] ボタンをクリックします。

その時点まではすべて機能しているようで、削除を確認するダイアログが表示されます。その後、メソッドは browser.waituntilexists() でタイムアウトします。

待機時間を増やしてみましたが、ハンドラーの種類をDialogHandler、ConfirmDialogHandler、AlertDialogHandlerなどに切り替えてみましたが、ポップアップするダイアログウィンドウが見つからないようです。

このダイアログを確認するには、回避策が必要です。

    private void DeleteAlerts(Browser browser)
    {
        browser.GoTo(URLs.CompleteUrl + "/alerts.aspx?apid=" + PID);
        while (browser.Page<AlertsAspx>().deleteMessage.Exists)
        {
            var handler = new ConfirmDialogHandler();
            browser.Page<AlertsAspx>().SelectAll.Click();
            using (new UseDialogOnce(browser.DialogWatcher, handler))
            {
                //Assert.Fail("Never Sees Dialog");
                browser.Page<AlertsAspx>().Delete.ClickNoWait();
                handler.WaitUntilExists(50);
                handler.OKButton.Click();
                browser.WaitForComplete();
            }
        }
    }
4

1 に答える 1

1

これを行う簡単な汚い方法を次に示します。

    public void ConfirmOKTest()
{
    using (IE ie = new IE("http://localhost/confirmtest.htm"))
    {
        ConfirmDialogHandler handler = new ConfirmDialogHandler();
        using (new UseDialogOnce(ie.DialogWatcher, handler))
        {
            ie.Button("myButton1").ClickNoWait();
            handler.WaitUntilExists();
            handler.OKButton.Click();
        }
        ie.WaitForComplete();
        Assert.AreEqual("Clicked OK", ie.Button("myButton1").Text);
    }
}

編集:コードがフォーマットされていない理由がわかりません。

追記:やっと手に入れました。

于 2013-01-04T22:45:41.133 に答える