WatiN错误”;hwnd不能是IntPtr.Zero或null;

本文关键字:Zero IntPtr null 不能 错误 hwnd WatiN | 更新日期: 2023-09-27 18:26:57

我在使用WatiN执行浏览器自动化时遇到此错误。

我正在使用上一个线程中的这个解决方案,以便访问"另存为"对话框

代码在DownloadIeFile方法的下一行失败。

AutomationElementCollection dialogElements = AutomationElement.FromHandle(windowDialog.Hwnd).FindAll(TreeScope.Children, Condition.TrueCondition);

奇怪的是,如果机器上已经打开了IE的实例,那么代码运行良好。我试着通过以下方式来模仿它:

1] 创建临时浏览器的实例
2] 创建浏览器对象用于操作
3] 关闭两个浏览器实例.s.

并且这也失败了。

仅供参考,这是我正在使用的代码:

class UpdateDiaryFigures
{ 

    public static void Start()
    {

        System.Threading.Thread.Sleep(1000);
        IE browser = new IE("http://www.example.com");
        //browser.Visible = false;
        Login(browser);
        string test = GetExport(browser, "AgentOpen", "01/10/2014", DateTime.Today.ToString("dd/MM/yyyy"), "Agent Name Ltd");
        //browser.Dispose();
    }

    static string GetExport(IE browser, string exportName, string fromDate, string toDate, string ddlValue)
    {
        browser.GoTo("http://www.example.com/ExcelExport.aspx");
        string open = "";
        switch (exportName)
        {
            case "AgentOpen":
            case "AgentClosed":
                if (exportName == "AgentClosed") { open = "Yes"; } else { open = "No"; }
                browser.TextField(Find.ById("txtAgentFromDate")).Value = fromDate;
                browser.TextField(Find.ById("txtAgentToDate")).Value = toDate;
                browser.SelectList(Find.ById("cboAgentCleared")).Select(open);
                browser.SelectList(Find.ById("cboAgent")).Select(ddlValue);
                browser.Image(Find.ById("btnPrintAgentRpt")).Click();
                break;
            case "AllAgentOpen":
                break;
            case "AllAgentClosed":
                break;
            case "CourtOpen":
            case "CourtClosed":
                break;
        }
        string filename = @"c:'Downloads'" + exportName
        browser.DownloadIeFile(filename);
        return filename;
    }
    static void Login(IE browser)
    {
        browser.TextField(Find.ByName("ctl00$cphMainContent$txtCompanyID")).Value = "ID";
        browser.TextField(Find.ByName("ctl00$cphMainContent$txtUserID")).Value = "user";
        browser.TextField(Find.ByName("ctl00$cphMainContent$txtPassword")).Value = "pass";
        browser.Button(Find.ByName("ctl00$cphMainContent$btnLogin")).Click();
    }
}

WatiN错误”;hwnd不能是IntPtr.Zero或null;

即使只能看到一个IE窗口,也可能有多个iexplore.exe进程在运行。例如iexplore.exe和iexplorer.exe*32