差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
rf:rf:sikulilibrary [2013/03/24 23:42]
tony
rf:rf:sikulilibrary [2023/06/25 09:48] (目前版本)
行 8: 行 8:
 讓我們來看看將Sikuli做成TestLibrary整合示意圖:​\\ 讓我們來看看將Sikuli做成TestLibrary整合示意圖:​\\
 {{:​rf:​rf:​rf_sikulirobot_arch.png?​300|}}\\ {{:​rf:​rf:​rf_sikulirobot_arch.png?​300|}}\\
-基本上就是我們需要去實做一個Sikuli的TestLibrary,我稱為SikuliLibrary,它會依靠Sikuli。實做方法據我所知有兩個,一個是依靠Sikuli自帶的sikuli-script.jar,另外一個是靠同樣SikuliLab的[[https://​code.google.com/​p/​sikuli-api/​|Sikuli API]]。由於Sikuli API已經將繁複的操作給包成API,因此我選擇它來實做TestLibrary。+基本上就是我們需要去實做一個Sikuli的TestLibrary,我稱為SikuliLibrary,它會依靠Sikuli。實做方法據我所知有兩個,一個是依靠Sikuli自帶的sikuli-script.jar,另外一個是靠同樣SikuliLab的[[https://​code.google.com/​p/​sikuli-api/​|Sikuli API]]。由於Sikuli API已經將繁複的操作給包成API,因此我選擇它來實做TestLibrary。
 ==== Sikuli API ==== ==== Sikuli API ====
 在Sikuli API的[[https://​code.google.com/​p/​sikuli-api/​wiki/​BasicUsage|官方文件]]已經有一些Sample Code教導大家如何使用,我就不贅述只做總結。 在Sikuli API的[[https://​code.google.com/​p/​sikuli-api/​wiki/​BasicUsage|官方文件]]已經有一些Sample Code教導大家如何使用,我就不贅述只做總結。
行 17: 行 17:
   * Keyboard: 提供鍵盤相關操作。   * Keyboard: 提供鍵盤相關操作。
   * Canvas: 畫布,我把它拿來Debug用。可以針對你想要的ScreenRegion做一些畫框框或印文字的動作,讓你可以知道行為操作是否正常。   * Canvas: 畫布,我把它拿來Debug用。可以針對你想要的ScreenRegion做一些畫框框或印文字的動作,讓你可以知道行為操作是否正常。
-在Linux上,Sikuli API會相依於OpenCV的函式庫。我是將OpenCV 2.4版抓下來編譯後再將那些so取來用,讓TestLibrary可以portable。+在Linux上,Sikuli API會相依於OpenCV的函式庫。我是將OpenCV 2.4版抓下來編譯後再將那些so取來用,讓TestLibrary可以portable。
 ==== Keywords ==== ==== Keywords ====
 目前我想到的操作有:​ 目前我想到的操作有:​
行 24: 行 24:
   * Move Image: 移動圖片到目標位置。   * Move Image: 移動圖片到目標位置。
   * Click Image: 點擊圖片。   * Click Image: 點擊圖片。
-  * Find All Image: 搜尋圖片出現的所有位置這意味著圖片會顯示在多個地方。 +  * Find All Image: 搜尋圖片出現的所有位置這意味著圖片會顯示在多個地方。回傳結果設計為index 0代表著數量,接著都是以x與y座標為一組資料。Ex. [ 2, 100, 200, 150, 250 ]。 
-  * Find Image: 搜尋圖片位置。+  * Find Image: 搜尋圖片位置。回傳結果為x與y座標,Ex. [ 150, 250 ]
   * Image Should Exist: 確認某個圖片是否存在。   * Image Should Exist: 確認某個圖片是否存在。
   * Disable Debug Mode: 取消偵錯模式。   * Disable Debug Mode: 取消偵錯模式。
行 83: 行 83:
 NATIVE_LIB_PATH=$BASEPATH/​libs/​native NATIVE_LIB_PATH=$BASEPATH/​libs/​native
  
-CLASSPATH=$TOOLSPATH:$RFPATH+CLASSPATH=$RFPATH
 java -Djava.library.path="​$NATIVE_LIB_PATH"​ \  java -Djava.library.path="​$NATIVE_LIB_PATH"​ \ 
           -cp "​$CLASSPATH"​ org.robotframework.RobotFramework -P "​$BASEPATH/​libs/​*"​ "​$@"​           -cp "​$CLASSPATH"​ org.robotframework.RobotFramework -P "​$BASEPATH/​libs/​*"​ "​$@"​
行 91: 行 91:
 {{:​rf:​rf:​rf_testcases_sikulilib3.png|}}\\ {{:​rf:​rf:​rf_testcases_sikulilib3.png|}}\\
 \\ \\
-接著就是用它拉,這個範例是送Alt+F9組合鍵縮小視窗並確認某張圖片是否存在:​\\+接著就是用它拉,這個範例是送Alt+F9組合鍵縮小視窗並確認某張圖片是否存在,我將圖片放在TestSuite的相對目錄中:\\
 {{:​rf:​rf:​rf_testcases_sikulilib2.png|}}\\ {{:​rf:​rf:​rf_testcases_sikulilib2.png|}}\\
 \\ \\
行 97: 行 97:
 {{:​rf:​rf:​rf_testcases_sikulilib1.png|}}\\ {{:​rf:​rf:​rf_testcases_sikulilib1.png|}}\\
  
-註: 目前已知問題在Ubuntu中Enable Debug Mode會出現Error setting window transparency ​using的錯誤。+註: 目前已知問題在Ubuntu中Enable Debug Mode會出現Error setting window transparency或The window must use a translucency-compatible graphic的錯誤,我想應該和我在VM上執行有關係吧
 ===== Summary ===== ===== Summary =====
-Script-Based與Plugin-Based彼此間有什麼優缺點呢?​+Script-Based與Plugin-Based彼此間有什麼優缺點呢?​
 ^ ^ Script-Based ^ Plugin-Based ^ ^ ^ Script-Based ^ Plugin-Based ^
 |程式碼活動性|敗,修改維護必須透過SikuliIDE|勝,直接在Robot中透過Keyword操作流程| |程式碼活動性|敗,修改維護必須透過SikuliIDE|勝,直接在Robot中透過Keyword操作流程|
行 112: 行 112:
   * [[http://​docs.oracle.com/​javase/​6/​docs/​api/​java/​awt/​event/​KeyEvent.html|Java6 SDK - KeyEvent]]   * [[http://​docs.oracle.com/​javase/​6/​docs/​api/​java/​awt/​event/​KeyEvent.html|Java6 SDK - KeyEvent]]
   * [[https://​code.google.com/​p/​sikuli-api/​wiki/​BasicUsage|Sikuli API - Basic Usage]]   * [[https://​code.google.com/​p/​sikuli-api/​wiki/​BasicUsage|Sikuli API - Basic Usage]]
 +  * [[http://​suncat6.blog95.fc2.com/​blog-entry-2.html|Build OpenCV on CentOS5.8]]
 +  * [[http://​www0.cs.ucl.ac.uk/​staff/​ucacbbl/​opencv-2.4.3/​|OpenCV 2.4.3 FAQ]]
 +  * [[http://​www.pressingquestion.com/​3967025/​Error-In-Making-Opencv|Error in Making OpenCV]]
  
 =====    ===== =====    =====