我有一个60秒的计时器倒计时和一个检查元素是否在网页上退出的任务(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 :(得分:0)
它没有在定时器代码之前运行try catch,定时器在与selenium代码相同的线程中运行,所以当它遇到try catch时,FindElement根据一些隐含的等待时间来保存线程到达selenium。 / p>
您需要使用多线程计时器,例如System.Timers
或System.Threading.Timer
中的计时器。