2013-04-26 91 views
2

我正在編寫自動化測試應用程序。大部分事情已經完成。現在我需要做一些GUI自動化。安裝應用程序是其中的一部分,我需要編寫Java代碼來啓動應用程序安裝程序並選擇適當的選項並安裝應用程序。如果有任何應用程序彈出窗口,然後捕捉並響應這些彈出窗口。捕獲UI中的任何錯誤或警告。這一切都需要用Java開發,我不允許使用任何現有的第三方工具。在Java中自動執行UI測試

只是想知道什麼是做這件事的最好方法。 我在閱讀http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton,有沒有其他最好或簡單的方法來實現這一點。任何想法或文章都會有所幫助。

+0

我想你應該問是否可以使用任何免費軟件後,別人看看它。在非常嚴格的情況下穿着= ked,但即使有免費的東西只要它的建築師的睾丸就可以。但我們必須通過相同的插件。不要試圖建立自己的 – tgkprog 2013-04-26 13:06:00

+0

感謝您的建議。但我相信我不會得到任何其他工具的批准。我仍然在尋找開發這個東西的最佳選擇。 – 2013-04-26 13:11:50

+0

這個問題有幾個版本 - 我將這個[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

回答

1

不能獲得對其他的應用程序控件直接訪問(如按鈕,複選框,列表和其他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); 
} 
+0

感謝Mikle的輸入。讓我至少在機器人課上嘗試一下。所以至少我會有更好的數據與我的管理層分享。在過去,我嘗試使用Perl自動化這種類型的案例,並且它在perl/python中很容易。但Java對我來說還是新手,所以我仍處於學習階段。我不確定它會有多困難,但讓我試一試。 – 2013-04-26 13:27:23

+0

java.awt.Robot非常容易編程。凝灰岩部分就像Mikle所提到的那樣 - UI變化時會發生什麼等。可以使數據輕鬆地在機器人中運行 - 使用屬性文件告訴機器人該做什麼(移動鼠標,單擊,雙擊,發送按鍵等)你可以快速開始。但是稍後會有瓶頸:) – tgkprog 2013-04-26 13:54:39

+0

是的,您實際上需要自行嘗試以確定Java是否適合您的需求:)無論如何,您可以使用Robot類輕鬆模擬真正的鍵盤按鍵和鼠標點擊 - 請參閱小例子我已經添加到答案... – 2013-04-26 14:01:33

2

可能最好的方法是編寫一個Java應用程序來記錄用戶在使用要測試的應用程序時所做的操作。

這意味着記錄所有的鼠標移動和所有擊鍵。

稍後,您的應用程序將播放所有鼠標移動和所有擊鍵。

每當鼠標移動開始,鼠標移動結束,按鍵序列開始,按鍵序列結束時,您還必須將圖像記錄在顯示器(屏幕)上。

您的Java應用程序必須將這些圖像與播放過程中看到的圖像進行比較。如果圖像太不同,你的Java應用程序會拋出一個錯誤。祝你好運,確定差異太大了。

我幾年前使用的工具有一個過程,用戶可以瀏覽回放圖像,並標出可能會更改的圖像,如日期和時間顯示。

如果您從鏈接的維基百科列表中選擇了GUI testing tools之一,則您的時間會更好。有些是開源的,有些是專有的。

正如在生活中大多數事情,你是幸運的,如果你得到你所支付的,

+0

感謝吉爾伯特的回覆。不幸的是,我不能使用任何現成的工具。即使我使用我也必須努力爭取同樣的認可。我的印象是編寫用於安裝任何應用程序的Java代碼(如點擊下一步,然後單擊安裝並捕獲所有彈出窗口)並不困難。但看起來我必須真的想通過它找到一些簡單或可行的解決方案。 Java沒有提供其他選項來處理UI單擊並獲取UI文本。 – 2013-04-26 13:08:30

+0

查看機器人課程。 http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html即使是最有才華的Swing程序員,編寫GUI測試人員也是極其困難的。如果我們將Stack Overflow的前十名Swing回答者聚集在一起,我們可能會在大約一年的時間內生成一個GUI測試者。 – 2013-04-26 13:15:25

+0

感謝您的鏈接。我會通過它。至少我必須在放棄之前做出最好的嘗試。 – 2013-04-26 13:25:10