WatiN ie9确认对话框不工作

本文关键字:工作 对话框 确认 ie9 WatiN | 更新日期: 2023-09-27 18:01:04

可能重复:
Watin&IE9-无法点击ok按钮

var dialogHandler = new WatiN.Core.DialogHandlers.ConfirmDialogHandler();
            using (new WatiN.Core.DialogHandlers.UseDialogOnce(browser.DialogWatcher, dialogHandler))
            {
                browser.Button(Find.ById("btnSave")).ClickNoWait();
                dialogHandler.WaitUntilExists();                                       
            }

它不适用于ie9,javascript确认我已经使用了最新版本2.1

WatiN ie9确认对话框不工作

ConfirmDialogHandler confirmHandler = new ConfirmDialogHandler();
        using (new UseDialogOnce(browser.DialogWatcher, confirmHandler))
        {
            confirmHandler.WaitUntilExists();
            confirmHandler.CancelButton.Click();
        }

它适用于ie7,但不适用于ie9DrunkenMonkey的答案不起作用

WatiN-2.1.0.1196

如果确认对话框在IE9中不起作用,请尝试下一个决策

(Visual studio 2010、Windows7、NetFramework 4.0、Internet explorer 9(

首先,您必须将引用UIAutomationClient和UIAutomationTypes添加到测试项目中。

下一个方法扩展浏览器类

public static void ConfirmDialogIE9(this Browser browser)
    {
        browser.ShowWindow(NativeMethods.WindowShowStyle.ShowMaximized);
        Thread.Sleep(2000);
        System.Windows.Automation.TreeWalker trw = new System.Windows.Automation.TreeWalker(System.Windows.Automation.Condition.TrueCondition);
        System.Windows.Automation.AutomationElement mainWindow = trw.GetParent(System.Windows.Automation.AutomationElement.FromHandle(browser.hWnd));
        System.Windows.Automation.AutomationElementCollection main = mainWindow.FindAll(System.Windows.Automation.TreeScope.Children
       , System.Windows.Automation.Condition.TrueCondition);

        foreach (System.Windows.Automation.AutomationElement element in main)
        {
            if (element.Current.Name.Equals("VIIS - Windows Internet Explorer") && element.Current.LocalizedControlType == "pane")
            {
                System.Windows.Automation.AutomationElement DialogBox = trw.GetFirstChild(element);
                DialogBox.SetFocus();
                System.Windows.Automation.InvokePattern clickOk = (System.Windows.Automation.InvokePattern)
                DialogBox.FindAll(System.Windows.Automation.TreeScope.Children, System.Windows.Automation.Condition.TrueCondition)[0].GetCurrentPattern(System.Windows.Automation.AutomationPattern.LookupById(10000));
                clickOk.Invoke();
                Thread.Sleep(1000);
                break;
            }
        }

我的项目中有以下代码:

var cancel = browser.Link(Find.ByUrl(CANCEL_LINK));
var confirmDialog = new ConfirmDialogHandler();
using (new UseDialogOnce(browser.DialogWatcher, confirmDialog))
{
    cancel.ClickNoWait();
    confirmDialog.WaitUntilExists();
    confirmDialog.OKButton.Click();
    browser.WaitForComplete();
}

这在IE9中有效。请注意,它是WatiN v2.0.50727,但我认为这对运行v2.1没有什么影响。

Watin有处理对话框的方法。尝试使用以下方法:

public static void SetCloseIEHandler(bool clickOk)
{
    closeIeHandler = new CloseIEDialogHandler(clickOk);
    BaseIEController.IE.DialogWatcher.Add(closeIeHandler);
}
private static void ClearDialogHandler(IDialogHandler dialogHandler)
{
    if (BaseIEController.IE.DialogWatcher.Contains(dialogHandler))
    {
        BaseIEController.IE.DialogWatcher.Remove(dialogHandler);
        dialogHandler = null;
    }
}