2016-04-09 25 views
0

60 saniyede bir geri sayımım var ve bir öğenin web sayfasında çıkıp çıkmadığını kontrol etme görevim var (waituntil 60s). Sorun, başlamak için düğmeye tıkladığım zamandır. Zamanlayıcı, web sürücüsü bir zaman aşımı istisnası atana kadar başlamaz. Zamanlayıcıdan önce try-catch bloğunu neden çalıştırdığına dair hiçbir fikrim yok.Başka şeyler işlenirken zamanlayıcıyı nasıl çalıştırabilirim

Sorum şu: Zamanlayıcıyı ve blok çalışmayı aynı anda nasıl çalıştırabilirim. Ve bir istisna atılırsa, zamanlayıcı durur.

Herhangi bir fikrin var mı? Yardımın için minnettarım. Teşekkürler.

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

Neden "wait.Until" (açık bekle, burada açıklandı: http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits) yerine kullanamazsınız, ör. 'WebDriverWait wait = yeni WebDriverWait (sürücü, TimeSpan.FromSeconds (60)); IWebElement myDynamicElement = wait.Until ((d) => {return_FindElement (By.Id ("logout")); –

+0

@KirilS. Çünkü txtTimer metin kutusuna geri sayımı göstermek istiyorum. Web sürücüsü için 60s zaman aşımı ayarlamıştım. –

+0

oh, bu nedenle senkronize olmayan bir şekilde çalışmasını istiyor musunuz? Bunun gibi bir şey kullanmanız gerektiğini düşünüyorum: https://blogs.infosupport.com/c-5-0-async-explained-as-simple-as-possible/ (örneğin arka planda selenyum görevi, UI "bekliyor" -alan ve ön planda sayma) –

cevap

0

Onun, zamanlayıcı selenyum koduyla aynı parçacığı çalışan zamanlayıcı kodundan önce deneyin yakalamak çalışmıyor, bu yüzden deneyin yakalamak çarptığında, FindElement fırıncı bazı örtük bekleme süresine bağlı olarak iplik tutan selenyum içine.

System.Timers veya System.Threading.Timer'daki gibi çok iş parçacıklı bir zamanlayıcı kullanmanız gerekir.