我先現在有一個Button是disable的狀態,一旦Button enable,我們就Click彈出一個窗口.
我們使用的測試工具就有同步的功能.
1.自動化工具生成的程序(發現和操作控件,不能真正運行)
button=FindButton();
ClickButton(button);
2.傻瓜的自動化程序(通過加入sleep變成可以運行的程序)
button=FindButton();
Sleep(10);
ClickButton(button);
Sleep(10);
window=FindWindow();
3.簡單的自動化程序(加入同步,使得更可靠和有效率)
button=FindButton();
WaitButtonEnable(button);
ClickButton(button);
window=WaitWindowOpen();
4.完整的自動化程序(保證100%可靠,沒有測試程序bug,簡單寫了一下,沒有包含exception的控制,時間急,可能也會有錯誤,不過就是這個意思)
Button button=null;
for(int i=0;button==null&&i<3;i++) //如果FindButton不穩定,調用三次in case
{
button=FindButton();
if(button==null)
{
Log.Error("Tryout{0}:Can not find button",i); //測試工具不穩定
}
else
{
break;
}
}
if(button==null)
{
Log.Error("Cannot find button. Quit"); //測試工具找不到button,或者產品問題
Log.Screen();//截圖,只是為了示例,以后不再單獨寫
return;
}
if(!WaitButtonEnable(button))
{
if(button.Enabled==true) //測試工具問題,沒有得到enable的消息
{
Log.Error("enabled, but tool didn't detect");
}
else//測試工具問題,不能成功檢測button的狀態,或者產品問題沒有enable
{
Log.Error("don't enable");
return;
}
Window window=null;
for(i=0;window==null&i<3;i++)//ClickButton不穩定,或者沒有得到open event,或者產品問題
{
ClickButton(button);
window=WaitWindowOpen();
if(window==null)//沒有click或者沒有得到消息,或者產品問題
{
int count=0;
findwindow://FindWindow不穩定,重試3次
window=FindWindow();
if(window!=null) //沒有得到消息,但是窗口彈出
{
Log.Error("didn't get event");
break;
}
else //沒有click,或者產品問題, 或者FindWindow不穩定
{
Log.Error("Tryout{0}:didn't get window",i);
count++;
if(count>3)
{
}
else //FindWindow不穩定,workaround
{
Log.Error("goto{0}",count);
goto findwindow;
}
}
}
else //成功
{
break;
}
}
if(window==null)
{
Log.Error("didn't get window, maybe tool or product problem.");
return;
}
原文轉自:http://www.anti-gravitydesign.com