2014-10-16 2 views
1

WatiN을 사용하여 브라우저 자동화를 수행 할 때이 오류가 발생합니다.WatiN 오류 "hwnd는 IntPtr.Zero 또는 null이 될 수 없습니다."

I am using this solution from a previous thread in order to acess the Save As dialog

코드는 DownloadIeFile 방법의 다음 줄에 실패한다.

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

기괴한 점은 컴퓨터에 이미 IE 인스턴스가 열려 있으면 코드가 제대로 실행된다는 것입니다. 나는 이것을 모방 시도했다 :

1] 조작
3] 가까운 두 브라우저가 instances.s에 대한 브라우저 객체 를 만들 임시 브라우저
2]의 인스턴스를 만듭니다.

그리고 이것도 실패합니다.

은 참고로이 내가 사용하고있는 코드입니다 :

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(); 
    } 
} 
+0

windowDialog.Hwnd가 0으로 표시됩니다. –

+0

새 IE 호출이 시작되지 않은 경합 조건이 될 수 있습니까? 창 핸들? 그러면 기존 IE 프로세스에 탭을 추가 할 때 실행중인 IE의 인스턴스가있을 때 작동하는 이유를 알 수 있습니다. 따라서 시작 시간이 더 짧습니다. –

+0

전에 System.Windows.Automation을 사용 해보지 않았습니다. 브라우저 개체가 항상 DownloadIeFile 메서드에 전달 될 때 어떻게 될 수 있습니까? – jmdon

답변

1

당신은 하나 개의 IE 창을 볼 수있는 경우에도 실행하는 여러 iexplore.exe를 과정이있을 수 있습니다. 예를 들어 iexplore.exe 및 iexplore.exe * 32

관련 문제