當我們需要使用 Xamarin.UITest 進行您所開發的 Xamarin.Android App 做到 UI 自動測試,當然,首先,我們需要先建立一個 UI 測試應用程式
專案,您可以參考下圖,選擇 Visual C#
> Cross-Platform
> UI 測試應用程式(Xamarin.UItest | 跨平台)
,接著輸入這個測試專案名稱,最後,點選 確定
按鈕。
接著,我們需要在剛剛產生的專案之中,指定要測試的 Android 專案,這裡,您會遇到兩個情況。不論是哪種情況,都建議您要間 INTERNET
這個權限啟用。
今天是 2017.05.15,根據官方的文件,
Running Android 6.0 Applications from the IDE 中的描述,若要在 Android 6.0 平台下進行 UI 自動化測試,必須要使用
ApkFile
與在這個方法內加入 APK 的路徑。不過,若我使用第一個方法,也就是使用:在測試專案內,把 Xamarin.Android 專案參考,加入到這個 UI 測試專案內,原則上,不論是在 Debug / Release 模式下,都可以正常進行 UI 自動化測試。(我這裡的環境是 Windows 10 專業版 + Visual Studio 2015 Enterprise 版本)
結論就是,只要將 Android 專案參考加入到 Xamarin UITest 專案內,無視您的 Android 版本,就可以直接進行 UI 自動測試了。
請您將 Xamarin.Android 專案設定成為預設起始專案
若您使用的是 Android 6.0 以下作業系統
例如 API Level 19 的手機或者模擬器,您可以在 AppInitializer.cs
檔案中,修改成為如下程式碼。
在這裡,我們將會使用預設的 PreferIdeSettings()
方法,也就是,總是使用 IDE 中的設定。另外,我們也使用了 EnableLocalScreenshots()
方法,啟用了 Xamarin.UITest 可以進行本地端裝置的螢幕截圖功能。
public class AppInitializer
{
public static IApp StartApp(Platform platform)
{
if (platform == Platform.Android)
{
return ConfigureApp
.Android
.EnableLocalScreenshots()
.StartApp();
}
return ConfigureApp
.iOS
.StartApp();
}
}
之後,您需要將您的 Xamarin.Android 專案的加入到剛剛產生的 UI 測試應用程式(Xamarin.UItest | 跨平台)
專案內的參考,如此,當您建置這個 UI 測試應用程式(Xamarin.UItest | 跨平台)
專案的時候,您的 Xamarin.Android 專案,則也會自動建置到最新版本。
至於 建置模式
您可以選擇 Release
或者是 Debug
模式皆可。
另外,請切換到您要測試的模擬器或者實體手機選項;為了方便做到 UI自動測試,若您是使用模擬器,建議您先將這個模擬器啟動,並且解開螢幕保護模式,而且,請將其他 Android 模擬器關閉起來。若您是要在實體手機上做 UI 自動測試,請將所有的 Android 模擬器都先關閉起來。
接著,請先滑鼠右擊 UI 測試應用程式(Xamarin.UItest | 跨平台)
專案,選擇 重建
,當完成之後,您就可以在測試總管中,看到這些可以測試的選項。
此時,您可以使用滑鼠右擊您有興趣的測試名稱,接著,選取,執行選取的測試
項目。
最後,您會看到神奇的事情發生了,您的 Xamarin.Android 應用程式,便會佈署到您指定的 Android 裝置內,而且自動啟動,然後,就會根據您所設定測試腳本,進行 UI 自動化測試。
若您想要在這種模式下,啟用 Xamarin Test Recorder
,此時,若您的建置模式為 Debug
,則,您會遇到這樣的錯誤訊息:Failed connecting to app: Mono Shared Runtime is not supported. This can be resolved by changing the project configuration or using a Release build.
。解決方式,就如何說明內容所述,請切換到 Release
模式下,就可以使用囉。
若您使用的是 Android 6.0 的作業系統
在這裡,我們將使用 Visual Studio for Android Emulator 中的 6.0 模擬器,做為測試標的。
請您將 AppInitializer.cs
檔案中,修改成為如下程式碼。
在這裡,我們將會使用 ApkFile()
方法,來指定我們要測試的專案來源,此時的來源,就是我們要測試的 APK 檔案。另外,我們也使用了 EnableLocalScreenshots()
方法,啟用了 Xamarin.UITest 可以進行本地端裝置的螢幕截圖功能。
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();
}
關於 ApkFile()
方法的用法,有兩個要注意的地方。
首先,您需要切換建置模式到 Release
模式下,因為,在 Androd 6.0下, Xamarin.UITest 將必須關閉 使用共用執行階段
選項。
另外,您需要手動點選 Xamarin.Android 專案,選擇執行 封存
選項,將您的 Xamarin.Android 專案封存起來,如此,在您的 Xamarin.Android 專案目錄內,就會產生一個 APK檔案。
最後使用這樣的路徑 ../../../XFUITest/XFUITest.Droid/bin/Release/com.vulcanlab.xfuitest.apk
,指定 APK 檔案的路徑。這個路徑的來源,您可以參考下圖:因為,Xmarin.UITest 的專案是位於標號1的位置,而封存起來的 APK 檔案是位於標號2的位置。所以,您有兩種選擇來輸入這個路徑,第一個就是使用絕對路徑,另外一個就是使用相對路徑,透過下圖,您就可以使用相對路徑指出封存起來的 APK檔案的相對路徑了。
若您沒有將 Xamarin.Android 執行封存,並且做 Code Sign 的動作,那麼,當您要進行所要進行的 UI 自動化測試,就會出現底下的錯誤訊息,Visual Studio 會告訴您,無法找到您所指定的 APK 檔案。
結果訊息: SetUp : System.Exception : ApkFile does not exist: D:\Vulcan\GitHub\temp\XFUITest_LocalAndroid\XFUITest\XFUITest.Droid\bin\Release\com.vulcanlab.xfuitest.apk
接著,請先滑鼠右擊 UI 測試應用程式(Xamarin.UItest | 跨平台)
專案,選擇 重建
,當完成之後,您就可以在測試總管中,看到這些可以測試的選項。
此時,您可以使用滑鼠右擊您有興趣的測試名稱,接著,選取,執行選取的測試
項目。
最後,您會看到神奇的事情發生了,您的 Xamarin.Android 應用程式,便會佈署到您指定的 Android 裝置內,而且自動啟動,然後,就會根據您所設定測試腳本,進行 UI 自動化測試。
最後,再度提醒您,根據最前面的說明,剛剛的操作部分,是根據官方文件說明,特別針對 Android 6.0 平台所作的相關設定與處理動作;不過,經過測試,似乎在 Android 6.0 平台下,也可以使用第一個步驟的方法來做到。