不能獲得對其他的應用程序控件直接訪問(如按鈕,複選框,列表和其他UI元素),即使如果它是用Java編寫的,除非該應用程序提供了一些選項來控制其UI(我懷疑許多應用程序提供這樣的事情)。
所以可能只有兩種方式(兩者同樣不好,我猜): 1.使用一些第三方本機庫與應用程序進行交互,但在這種情況下會有很多痛苦和問題,具體取決於測試應用程序 2.使用機器人並在該應用程序窗口上模擬鍵和鼠標事件來執行某些操作(如按下按鈕,填充文本框或滾動列表),但這需要組件的精確座標,而且這些座標也無法檢索,所以您只能對這些座標進行硬編碼,並祈禱在測試運行時沒有人移動/調整測試窗口的大小。
總結 - 使用Java編寫UI測試應用程序並不是最好的選擇。 其實我敢打賭,在某些情況下使用其他語言編寫它可能會很痛苦。
也許我是非常錯誤的,有人可以共享一種方式,以更好的方式在Java中做這樣的事情......
P.S.小機器人的例子(填寫抽象的登錄表單):
public static void main (String[] args)
{
fillForm();
}
private static void fillForm()
{
try
{
Robot r = new Robot();
// Set to true so we will wait for events to process
// Still we might need some delays to let application take the input in some cases
r.setAutoWaitForIdle (true);
// Login
typeKey (r, KeyEvent.VK_A);
typeKey (r, KeyEvent.VK_D);
typeKey (r, KeyEvent.VK_M);
typeKey (r, KeyEvent.VK_I);
typeKey (r, KeyEvent.VK_N);
// Tab to password field
typeKey (r, KeyEvent.VK_TAB);
// Password
typeKey (r, KeyEvent.VK_P);
typeKey (r, KeyEvent.VK_A);
typeKey (r, KeyEvent.VK_S);
typeKey (r, KeyEvent.VK_S);
// Process form
typeKey (r, KeyEvent.VK_ENTER);
}
catch (AWTException e)
{
e.printStackTrace();
}
}
private static void typeKey (Robot r, int a)
{
r.keyPress (a);
r.keyRelease (a);
}
我想你應該問是否可以使用任何免費軟件後,別人看看它。在非常嚴格的情況下穿着= ked,但即使有免費的東西只要它的建築師的睾丸就可以。但我們必須通過相同的插件。不要試圖建立自己的 – tgkprog 2013-04-26 13:06:00
感謝您的建議。但我相信我不會得到任何其他工具的批准。我仍然在尋找開發這個東西的最佳選擇。 – 2013-04-26 13:11:50
這個問題有幾個版本 - 我將這個[Java GUI應用程序測試自動化的開源工具]引用給人們(https://sqa.stackexchange.com/questions/18554/open-source-tools從現在開始,Java-gui-application-testing-for-automation-of-java-gui-application-testing)。它有很好的迴應,我想鼓勵_Thinking Q/A_。 – will 2017-07-14 04:47:07