上次介紹iQuery以後,已經有些朋友在開始在手機自動化測試程序裏試用iQuery了,因爲以前的介紹文檔比較含糊,先擱置擴展iQuery使其支持多種編程語言的系列文章,補充一下iQuery的入門教程,以前寫的介紹性文章能夠參考:
1. 開源類庫iQuery Android版使用說明
2. 類jQuery selector的控件查詢iQuery開源類庫介紹html
iQuery是一個開源的自動化測試框架項目,有興趣的朋友能夠在這裏下載:https://github.com/vowei/iQuery/downloadsjava
源碼位置:https://github.com/vowei/iQueryandroid
當前iQuery for iOS還只支持instrument裏的自動化測試,在本教程裏,咱們使用下面的程序演示使用iQuery for iOS編寫自動化測試用例的方法:ios
可用在iphone模擬器裏的程序:https://github.com/vowei/iQuery/tree/master/iOS/targetApp
源代碼:https://github.com/vowei/iQuery/tree/master/iOS/targetApp/Gesturesgit
該教程裏演示的自動化測試用例須要下載iQuery for iOS類庫:github
https://github.com/downloads/vowei/iQuery/iQuery%20for%20iOS.zip編程
依照下面的步驟建立並運行iOS程序的自動化測試用例:
1. 在Mac機上啓動 instruments:app
2. 在「Choose a Template for The Trace Document」對話框裏選擇「Automation」。框架
3. 點擊instruments上的「Choose Target」下拉框 。eclipse
4. 將咱們的演示用程序Gestures.app設置爲目標程序。
5. Gestures.app要求iOS 5的模擬器,須要顯式設置。
6. 而後點擊「Create …」按鈕建立一個新的自動化測試用例腳本。
7. 並在新腳本對話框中輸入以下代碼。
8. 最後,點擊底下的「run」按鈕來執行自動化測試用例腳本,而後在結果對話框裏查看結果。
這個教程是基於Android Instrumentation測試技術寫的,但iQuery for Android同時還支持從View Server的輸出中查詢控件,關於如何從View Server中獲取Android Activity層次信息的方法,後面會寫文章講到:
演示用的Android程序在:https://github.com/vowei/iQuery/tree/master/java/Test/multiplatformdemoproject
其源碼在:https://github.com/vowei/iQuery/tree/master/java/sample
下面是使用iQuery編寫Android Instrument UI測試的方法:
1. 打開eclipse而且建立一個新的Android工程(Create Android Project),命名爲tutorial.
2. iQuery支持android 2.2以上的版本,在這個教程裏,咱們選擇Android 2.2平臺。
3. 由於建立的是測試工程,所以不須要添加任何的Activity。
4. 工程建立完畢以後,更新新建工程的manifest.xml文件,添加一個新的instrumentation塊,來指定要測試的應用的包名。
5. 在eclipse裏右鍵單擊tutorial工程,依次點擊「Build Path」-> 「Configure Build Path」。
6. 在「Properties for tutorial」對話框裏,點擊「Add External JARs」按鈕。
7. 添加對iquery-core.jar和iquery-instrumentation.jar的引用,因爲iQuery是基於antlr的,還須要添加對antlr-runtime-3.4.jar的引用。這篇教程裏,咱們使用robotium來抓取和修改UI控件的信息,還須要添加對robotium-solo-3.1.jar的引用。最後,Build path應該以下所示:
package cc.iqa.studio.demo.test; import java.io.*; import java.util.*; import org.antlr.runtime.*; import junit.framework.Assert; import cc.iqa.iquery.*; import cc.iqa.iquery.android.*; import com.jayway.android.robotium.solo.*; import android.test.ActivityInstrumentationTestCase2; import android.view.*; @SuppressWarnings("rawtypes") public class DemoOnlyTest extends ActivityInstrumentationTestCase2 { private static String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "cc.iqa.studio.demo.MainActivity"; private static String TARGET_PACKAGE_ID = "cc.iqa.studio.demo"; private Solo _solo; @SuppressWarnings("unchecked") public DemoOnlyTest() throws Exception { super(TARGET_PACKAGE_ID, Class .forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME)); } public void setUp() throws Exception { this._solo = new Solo(this.getInstrumentation(), this.getActivity()); } public void testSimplifiedAPI() throws Exception { List<SoloTreeNode> r1 = iQuery.query( new SoloTreeNode(_solo.getCurrentViews().get(0)), "LinearLayout >> TextView [mText = 'Down Under']"); Assert.assertEquals(2, r1.size()); } private List<ITreeNode> parseQueryAgainst(View root, String iquery) throws IOException, RecognitionException { InputStream query = new ByteArrayInputStream(iquery.getBytes("utf8")); ANTLRInputStream input = new ANTLRInputStream(query); iQueryLexer lexer = new iQueryLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); iQueryParser parser = new iQueryParser(tokens); List<ITreeNode> candidates = new ArrayList<ITreeNode>(); candidates.add(new SoloTreeNode(root)); List<ITreeNode> result = parser.query(candidates); return result; } }
9. 最後,將演示用的Android程序安裝到模擬器或者手機上,並運行測試用例。
完整的測試用例文件能夠從這裏下載:
https://github.com/vowei/iQuery/blob/master/java/sample/src/cc/iqa/studio/demo/test/DemoOnlyTest.java