XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2017/05/06

Xamarin.UITest 在 Android 裝置上的實作練習

這篇筆記,將會帶領大家實際進行 Xamarin.UITest 的實際實機演練,您只需要跟著這個文件中的說明步驟操作,就會了解到 Xamarin.UITest 是要如何使用。

事前準備工作

首先,您先要完成您的 Xamarin.Forms 跨平台應用程式開發,並且這個 App 確實已經可以執行且正確無誤。
我們這個實機練習過程,將會以 Android 裝置作為 UI 自動測試的演練平台。
您可以使用這個 GitHub Repository 中的 https://github.com/vulcanlee/UITest/tree/master/XFUITest_Source 作為要測試的應用程式對象。
這個應用程式僅有兩個頁面,第一個頁面將會是使用者登入頁面,在這個頁面中,使用者必須輸入正確的帳號與密碼,否則,將會有錯誤訊息顯示出來。
若帳號與密碼輸入正確,此時,就會導航到這個應用程式的首頁
在每個重點過程中,將會把當時螢幕的畫面截圖下來,儲存到測試結果中。

建立 Xamarin.UITest 專案

首先,打開 XFUITest_Source 目錄下的 XFUITest.sln 專案
在 XFUITest 方案滑鼠右擊,選擇 加入 > 新增專案 > Visual C# > Cross-Platfom > UI 測試應用程式 (Xamarin.UITest | 跨平台) 選項。
在底下名稱欄位中,可以輸入您想要的專案名稱,在這裡,我們使用預設值
最後點選 確定 按鈕,完成這個專案的產生。

產生 Android 專案的佈署 APK 檔案

請滑鼠右擊 XFUITest.Droid 專案,選擇項目 設定為起始專案
接著,選擇方案組態為 Release
滑鼠右擊 XFUITest.Droid 專案,選擇項目 建置
確定這個專案可以成功建置後,滑鼠右擊 XFUITest.Droid 專案,選擇項目 封存...
當封存成功之後,在 封存管理員 的右下方,會看到 散發 按鈕,請點選他
當 散發 對話窗出現之後,請點選 臨機操作 按鈕
選擇這個 App 要使用的 簽署身分識別,若您還沒有建立您的專屬簽署身分識別,請建立一個。最後,點選 另存新檔 按鈕
選擇一個適當目錄之後,點選 存檔 按鈕
在 簽署密碼 對話窗出現之後,請輸入您的 簽署身分識別 密碼,之後點選 OK 按鈕。
若再 Visual Studio 左下角的狀態列中,出現了 已完成發行專案 'XFUITest.Droid 訊息,恭喜您,表示您已經產生了這個 Android 發行 APK 檔案了。

開啟測試總管

請點選功能表 測試 > 視窗 > 測試總管,顯示出測試總管的視窗

修正 AppInitializer.cs

請在 UITest1 專案內,找到 AppInitializer.cs 檔案,打開它
使用底下程式碼替換到 StartApp 方法的定義
這裡使用了 ApkFile 方法,指定了這個 Android 專案的 vulcanlab.xfuitest.apk 發行檔案所要的路徑
另外,由於我們需要在不同的時間點,進行當時手機畫面的螢幕截圖,所以,我們需要呼叫 EnableLocalScreenshots() 方法
        public static IApp StartApp(Platform platform)
        {
            if (platform == Platform.Android)
            {
                return ConfigureApp
                    .Android
                    .ApkFile("../../../XFUITest/XFUITest.Droid/bin/Release/com.vulcanlab.xfuitest.apk")
                    .EnableLocalScreenshots()
                    .StartApp();
            }

            return ConfigureApp
                .iOS
                .StartApp();
        }

加入這次做的 UI 自動測試腳本

請打開 Tests.cs 檔案,使用底下程式碼來替換。
我們將 [TestFixture(Platform.iOS)] 這個屬性註解起來
我們加入了一個新的測試腳本 LoginTest
    [TestFixture(Platform.Android)]
    //[TestFixture(Platform.iOS)]
    public class Tests
    {
        IApp app;
        Platform platform;

        public Tests(Platform platform)
        {
            this.platform = platform;
        }

        [SetUp]
        public void BeforeEachTest()
        {
            app = AppInitializer.StartApp(platform);
        }

        [Test]
        public void AppLaunches()
        {
            app.Screenshot("登入頁面");
        }

        [Test]
        public void LoginTest()
        {
            app.Screenshot("登入頁面");
            app.EnterText(x => x.Class("EntryEditText"), "vulcan");
            app.Tap(x => x.Class("EntryEditText").Index(1));
            app.EnterText(x => x.Class("EntryEditText").Index(1), "123");
            app.Tap(x => x.Text("登入"));
            app.WaitForElement(x => x.Id("message"));
            app.Screenshot("登入錯誤頁面");
            app.Tap(x => x.Id("button2"));
            app.WaitFor(() =>
            {
                Thread.Sleep(1000);
                return true;
            });
            app.Tap(x => x.Class("EntryEditText"));
            app.EnterText(x => x.Class("EntryEditText"), "1");
            app.Tap(x => x.Class("EntryEditText").Index(1));
            app.EnterText(x => x.Class("EntryEditText").Index(1), "1");
            app.Tap(x => x.Text("登入"));
            app.WaitFor(() =>
            {
                Thread.Sleep(4000);
                return true;
            });
            app.WaitForElement(x => x.Text("歡迎來到 Xamarin.Forms 的跨平台開發世界"));
            app.Screenshot("登入成功頁面");
        }
    }

開始進行 UI 自動測試

您現在的測試總管視窗,應該會如同下圖,沒有任何的測試方法可以選擇。
請滑鼠右擊 UITest1 專案,選擇 重建
當建置完成後,您現在的測試總管視窗,應該會如同下圖,有測試方法可以選擇。
滑鼠右擊 LoginTest 項目,接著選取 執行選取的測試 項目,此時,Visual Studio 將會開始進行自動化的 UI 測試,所有的過程,將會依照您所設定的腳本來執行。
等候一下,您的模擬器就會自動啟動這個應用程式,並且開始輸入錯誤的密碼,接著進行登入,而後顯示錯誤訊息;稍後,就會輸入正確的帳號與密碼,並且切換到應用程式首頁。
當UI自動測試作業完成之後,您會看到測試總管如下圖的畫面。
在測試總管的最下方,有個 輸出 連結,請點選它。
您會看到如下的測試紀錄日誌
所以,當您的UI自動測試有任何錯誤發生的時候,可以參考這個測試紀錄日誌,試圖找出可能的問題原因。

測試名稱:     LoginTest
測試結果:     成功
結果 StandardOutput:     Full log file: C:\Users\vulca\AppData\Local\Temp\uitest\log-2017-05-06_00-08-53-984.txt
Skipping IDE integration as important properties are configured. To force IDE integration, add .PreferIdeSettings() to ConfigureApp.
Android test running Xamarin.UITest version: 1.3.8
Initializing Android app on device 169.254.76.233:5555 with apk: D:\Vulcan\GitHub\temp\XFUITest_Source\XFUITest\XFUITest.Droid\bin\Release\com.vulcanlab.xfuitest.apk
Signing apk with Xamarin keystore.
Took screenshot. { Path: "D:\Vulcan\GitHub\temp\XFUITest_Source\UITest1\bin\Release\screenshot-1.png", Title: "登入頁面" }
Using first element (2 total) matching Class("EntryEditText").
Tapping coordinates [ 540, 736 ].
Using element matching Class("EntryEditText").Index(1).
Tapping coordinates [ 540, 938 ].
Using element matching Class("EntryEditText").Index(1).
Tapping coordinates [ 540, 938 ].
Using element matching Text("登入").
Tapping coordinates [ 540, 1183 ].
Waiting for element matching Id("message").
Took screenshot. { Path: "D:\Vulcan\GitHub\temp\XFUITest_Source\UITest1\bin\Release\screenshot-2.png", Title: "登入錯誤頁面" }
Using element matching Id("button2").
Tapping coordinates [ 893, 1051 ].
Using first element (2 total) matching Class("EntryEditText").
Tapping coordinates [ 540, 736 ].
Using first element (2 total) matching Class("EntryEditText").
Tapping coordinates [ 540, 736 ].
Using element matching Class("EntryEditText").Index(1).
Tapping coordinates [ 540, 938 ].
Using element matching Class("EntryEditText").Index(1).
Tapping coordinates [ 540, 938 ].
Using element matching Text("登入").
Tapping coordinates [ 540, 1183 ].
Waiting for element matching Text("歡迎來到 Xamarin.Forms 的跨平台開發世界"). 
Took screenshot. { Path: "D:\Vulcan\GitHub\temp\XFUITest_Source\UITest1\bin\Release\screenshot-3.png", Title: "登入成功頁面" }

沒有留言:

張貼留言