2016-04-09 10 views
0

私はタイマーカウントを60秒に下げ、要素がWebページ(waituntil 60s)で終了するかどうかをチェックするタスクを持っています。問題は、ボタンをクリックして開始するときです。タイマーは、Webドライバがタイムアウト例外をスローするまで開始しません。タイマーの前にtry-catchブロックを実行する理由がわかりません。他のものの処理中にタイマーを実行させるにはどうすればいいですか?

私の質問は、タイマーとtry-catchブロックの作業を同時に行う方法です。例外がスローされると、タイマーは停止します。

私はあなたの助けに感謝します。おかげさまで

private void timer1_Tick(object sender, EventArgs e) 
    { 
     counter--; 
     if (counter == 0) 
      timer1.Stop(); 
     txtTimer.Text = counter.ToString(); 
    } 


private void button2_Click(object sender, EventArgs e) 
    { 
     int counter = 60; 
     timer1 = new System.Windows.Forms.Timer(); 
     timer1.Tick += new EventHandler(timer1_Tick); 
     timer1.Interval = 1000; // 1 second 
     timer1.Start(); 
     txtTimer.Text = counter.ToString(); 

     // Check if user is already logged in. If not => exit 
     try 
     { 
      driver.FindElement(By.Id("logout")); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Error: Please login first."); 
      return; 
     } 
     button1.Enabled = true; 
    } 
+0

「wait.Until」を使用できないのはなぜですか(明示的な待機、http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits)。 'WebDriverWait wait =新しいWebDriverWait(ドライバ、TimeSpan.FromSeconds(60)); IWebElement myDynamicElement = wait.Until ((d)=> { return d.FindElement(By.Id( "logout")); }); '? @KirilS。 –

+0

。私はカウントダウンをテキストボックスtxtTimerに表示したいからです。私はすでに60秒のWebドライバのタイムアウトを設定しました。 –

+0

ああ、非同期に実行したいのですか?私はあなたが次のようなものを使用する必要があると思う:https://blogs.infosupport.com/c-5-0-async-explained-as-simple-as-possible/(すなわち、背景上のセレンタスク、UI "待っている"フォアグラウンドでカウントダウンする) –

答えて

0

ITSは、タイマーがセレンコードと同じスレッドで実行されているタイマーコードの前にトライキャッチを実行していないので、それはトライキャッチに当たったとき、FindElementが固まっいくつかの暗黙の待ち時間に基づいてスレッドを保持していますセレンに変換する。

System.TimersまたはSystem.Threading.Timerなどのマルチスレッドタイマーを使用する必要があります。

関連する問題