2009-05-19 11 views
15

Watinを使用して、確認ダイアログボックスを処理し、 "OK"を押すようWatinに伝えようとしています。あなたはConfirmDialogHandlerUseDialogOnceの方法を使っています。それは私にとってはうまくいきません。私は次のエラーを取得する:ConfirmDialogHandlerを使ってWatin - Handling Confirmダイアログを開きます

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

私はwatin 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ページは非常に簡単です、それはその力ボタンで構成されてい

bOK = confirm("You clicked a popup. Did you mean to?"); 
return bOK; 
:このようなことを確認し、:今それに含まれるすべてがあるように

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

そしてConfirmAppは、テストのためにストリップダウンされました0

+0

関連:http://stackoverflow.com/questions/5626538/watin-ie9-cant-click-ok-buttons/9769242#9769242 –

答えて

11

コードは私にとってはうまく見えますが、うまくいくはずです。私が別のやり方をしたと思うのは、Dialogブロックを使ってWait for Complete insideを置くことだけでした。なぜ私がそれをしたのか分からないのですが、何か問題があります。時にはうまくいかないこともあります。 Waitまでは時間制限はありません。しかし、おそらくすでにそれを試したでしょう。例えば

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

組み合わせを使用してこのようにコードが変更され、DLLのリフレッシュによってソートされました。 –

1

私は同じ問題と私は時間がかかりますが、私のために働くの回避策を見つけるまで、それは働いていなかった何をすべきかに関係なくに直面していました。

WaitUntilExists()のデフォルトの時間は30秒です。したがって、IE9で使用する場合、次のように延長された時間制限があります。

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

それは確かに時間がかかるが、それは動作します。

2

私は同じ問題を抱えていましたが、多くのことを試しましたが、私はClick()を呼び出して1つの部分を見落としてから、ちょうど.ClickNoWait()に変更しました。これがうまくいきたいと思っています

0

ダイアログウォッチャーソリューションのバリエーションで数時間を費やしました。 IE9で何も私のために働いたことはありません。

私は、私のために働く1ライナーで終わった、それが他の誰かを助けることを願って!このアプローチでは、代わりにユーザーキーの押下を使用してダイアログを処理しようとするのを完全に回避します。

  • OKの場合。そして、ボタンClickNoWaitに至るまでのすべての手順を実行します。

SendKeys.SendWaitを( "{ENTER}");

  • CANCELの場合。要素ClickNoWaitに至るまでのすべてのステップを行います。次に、 SendKeys.SendWait( "{TAB}"); SendKeys。SendWait( "{ENTER}");

NB:使用してのSystem.Windows.Forms

関連する問題