2012-05-31 3 views
2

자바 스크립트 경고 창의 "확인"버튼을 클릭하려고합니다. 그러나 AddDialogHandler 메서드는 개체 참조가 개체의 인스턴스로 설정되지 않습니다. 내가 뭘 잘못하고 있니?WatiN - 기존 WebBrowser에 ReturnDialogHandler를 추가 할 수 없습니다.

// Class 
IE browser; 

button_click() 
{ 
    var thread = new Thread(() => 
    { 
     WatiN.Core.Settings.AutoStartDialogWatcher = false; 
     browser = new IE(webBrowser1.ActiveXInstance); 

     ReturnDialogHandler myHandler = new ReturnDialogHandler(); 

     browser.AddDialogHandler(myHandler); // This line throws exception 

     browser.Button(Find.ById("alertButton")).ClickNoWait(); 
     myHandler.WaitUntilExists(); 

     myHandler.OKButton.Click(); 

     browser.WaitForComplete(); 

    }); 
    thread.Name = "KillAlertWindowAsync"; 
    thread.IsBackground = true; 
    thread.SetApartmentState(ApartmentState.STA); 
    thread.Start(); 
    } 
} 
+0

일반적인 확인 대화 상자 창입니까? –

+0

간단한 자바 스크립트 경고입니다. – iCantSeeSharp

답변

0

이 작업을 시도 할 수 있습니다 :

var approveConfirmDialog = new ConfirmDialogHandler(); 

using (new UseDialogOnce(Browser.DialogWatcher, approveConfirmDialog)) 
{ 
     //Your code to invoke popup. 

     approveConfirmDialog.WaitUntilExists(); 
     approveConfirmDialog.OKButton.Click(); 
} 

이 가정입니다 그것은 일반적인 확인 팝업입니다.

+0

나는 그것을 시도해보고 어떤 일이 일어나는지 보겠다.하지만 내 주요한 문제는 핸들러를 기존 브라우저 인스턴스에 추가하는 것이다. – iCantSeeSharp

+0

@Souvlaki 이것은 모두 동일한 브라우저 인스턴스에서 처리되어야합니다. 추가 인스턴스가 생성되지 않습니다. –

0

Emerica의 코드를 사용하여 그는 새로운 인스턴스 인 "Browser.DialogWatcher"를 사용하고 있습니다. 브라우저가 정적 인 경우에만 작동해야합니다.

browser = new IE(webBrowser1.ActiveXInstance); 

으로 정의 된 브라우저 개체가 있으므로 "browser.DialogWatcher"를 사용하여 특정 인스턴스를 호출 할 수 있습니다. 그러나 주목할 점은 IE9와 대화 상자에 알려진 문제점이 있다는 것입니다. 나는 최신 2.1 WatiN 버전을 가지고 있는지 확인하는 것이 좋습니다. 이미 해당 버전이 있다고 가정하고 Internet Explorer 8을 사용하여 IE 9 - WatiN 호환성 문제가 아닌지 확인하도록 설정하십시오. 그렇게하려면 브라우저에서 F12를 누르고 브라우저 & 문서 모드를 IE8로 전환하면됩니다.

관련 문제