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();
}
}
windowDialog.Hwnd가 0으로 표시됩니다. –
새 IE 호출이 시작되지 않은 경합 조건이 될 수 있습니까? 창 핸들? 그러면 기존 IE 프로세스에 탭을 추가 할 때 실행중인 IE의 인스턴스가있을 때 작동하는 이유를 알 수 있습니다. 따라서 시작 시간이 더 짧습니다. –
전에 System.Windows.Automation을 사용 해보지 않았습니다. 브라우저 개체가 항상 DownloadIeFile 메서드에 전달 될 때 어떻게 될 수 있습니까? – jmdon