2009-05-19 38 views
15

使用Watin,我試圖處理一個確認對話框並告訴watin按「OK」。這是在互聯網上可以很好地記錄 - 你使用ConfirmDialogHandlerUseDialogOnce方法..除了它不適合我。我得到以下錯誤:Watin - 使用ConfirmDialogHandler處理確認對話框

WatiN.Core.Exceptions.WatiNException: Dialog not available within 5 seconds

我使用的是華廷2.0測試版的ATM,但我以前使用1.X的早期版本,它有同樣的問題。測試在一個同事的機器上運行64位Vista,我運行64位Windows 7

的代碼看起來是這樣的:

 using (IE ie = new IE("http://localhost/TestApp/TestConfirmPage.asp")) 
     { 
      var approveConfirmDialog = new ConfirmDialogHandler(); 

      using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog)) 
      { 
       ie.Button(Find.ByName("btn")).ClickNoWait(); 
       approveConfirmDialog.WaitUntilExists(5); 
       approveConfirmDialog.OKButton.Click(); 
      } 
      ie.WaitForComplete(); 
     } 

ASP頁很簡單,它是由一個按鈕,使得力一個確認,這樣的:

<input type="button" name="btn" id="btn" value="Click me" onclick="ConfirmApp()" /> 

而且ConfirmApp已經剝離下來進行測試,因此現在它包含所有爲:

bOK = confirm("You clicked a popup. Did you mean to?"); 
return bOK; 
+0

相關:http://stackoverflow.com/questions/5626538/watin-ie9-cant-click-ok-buttons/9769242#9769242 – 2012-03-19 12:10:05

回答

11

該代碼看起來很好,我認爲它應該工作。唯一覺得我做了不同的事情是使用Dialog塊放入Wait for Complete。不知道爲什麼,但在我做之前,我也有一些問題,有時它有時不起作用。在等待直到存在之前,我不會使用時間限制。但你可能已經嘗試過那個。

例如:

using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog)) 
     { 
      ie.Button(Find.ByName("btn")).ClickNoWait(); 
      approveConfirmDialog.WaitUntilExists(); 
      approveConfirmDialog.OKButton.Click(); 
      ie.WaitForComplete(); 
     } 
+0

使用的組合的代碼更改就像這樣,並且刷新的DLL將它排序。 – 2010-08-13 15:14:19

1

我面臨着同樣的問題,不管我做什麼,它沒有工作,直到我發現了一個解決辦法這需要時間,但爲我工作。

WaitUntilExists()的默認時間爲30秒因此在IE9中使用它時提供的延長時間限制如下。

handler.WaitUntilExists(40); // or whatever time suits you above 30

這當然需要時間,但它的工作原理。

2

我有同樣的問題,並嘗試了很多東西,但只是忽略了一部分我打電話.Click(),然後只是改變它.ClickNoWait()和事情排序。希望這可以幫助

0

剛剛花了幾個小時,對話觀察者解決方案的變化。在IE9中沒有任何工作適合我。

我結束了一個爲我工作的單線程,希望它可以幫助別人!這種方法完全避免了試圖通過使用用戶按鍵來處理對話。

  • 對於確定。執行導致按鈕ClickNoWait的所有步驟,然後:

SendKeys.SendWait(「{ENTER}」);

  • 對於取消。執行導致元素ClickNoWait的所有步驟,然後: SendKeys.SendWait(「{TAB}」); SendKeys。SendWait( 「{} ENTER」);

NB:使用System.Windows.Forms的