測試不同的螢幕和視窗大小

測試是應用程式開發流程中不可或缺的一環。您通常會在模擬器或裝置上執行應用程式,以手動方式驗證程式碼是否正常運作。不過,手動測試相當耗時、容易出錯,對於在各種大小的螢幕和裝置上執行的應用程式而言,通常難以管理。手動測試的問題通常是使用單一裝置進行開發。因此,可在具有不同板型規格的其他裝置中,不會注意到錯誤。

如要找出不同視窗大小和螢幕大小的迴歸,請實作自動化測試,驗證應用程式在不同板型規格中的行為和外觀是否一致。自動化測試會及早找出問題,降低影響使用者體驗的風險。

要測試哪些項目?

針對不同螢幕和視窗大小開發 UI 時,請特別留意下列兩個面向:

  1. 元件和版面配置的視覺屬性在不同大小視窗中有何差異
  2. 如何在設定變更期間保留狀態

視覺屬性

無論您是否針對不同的視窗大小自訂 UI,都必須確認 UI 是否正確顯示。將寬度和高度納入考量 精簡、中等和延伸的寬度和高度如需建議的中斷點,請參閱視窗大小類別

圖 1 Now In Android 中的「為你推薦」畫面,顯示不同視窗大小

此外,當應用程式的大小限制變大時,應用程式可能不會如預期轉譯設計系統中某些元件。

如果應用程式針對不同視窗大小提供自動調整式版面配置,您應執行自動化測試來避免發生迴歸問題。舉例來說,修正手機邊界可能會導致平板電腦的版面配置不一致。建立 UI 測試以驗證版面配置和元件的行為,或是建構螢幕截圖測試,以視覺化的方式驗證版面配置。

狀態還原

在平板電腦等裝置上執行的應用程式,比起手機的應用程式,其旋轉和大小調整頻率高得多。此外,折疊式裝置導入了新的顯示功能 (例如摺疊和展開),可觸發設定變更。發生這些設定變更時,您的應用程式必須能夠還原狀態。然後,您還需要撰寫測試,確認應用程式能正確還原狀態。

圖 2. 折疊式裝置折疊、平鋪式、平鋪旋轉至橫向螢幕式、半平鋪式 (桌面型態)。

首先,請測試應用程式在發生設定變更時不會異常終止。請確保應用程式中的每個 UI 都能處理旋轉、調整大小或摺疊的任何組合。由於在預設情況下,設定變更會重新建立活動,因此有些當機是因為系統假設活動持續性。

測試設定變更的方法有很多種,但在大多數情況下,有兩種方式可以進行測試:

  • 在 Compose 中,使用 StateRestorationTester 以有效率的方式模擬設定變更,而不必重新啟動活動。詳情請參閱以下各節的說明。
  • 在任何 UI 測試 (例如 Espresso 或 Compose) 中,呼叫 Activity.recreate() 即可模擬設定變更。

通常,您不需要使用不同的裝置測試狀態還原,藉此回應設定變更。這是因為重新建立活動的所有設定變更都會有類似的影響。然而,部分設定變更可能會在特定裝置上觸發不同的狀態還原機制。

舉例來說,如果使用者在開啟的折疊式裝置上查看清單詳細資料 UI,然後折疊裝置以切換至封面螢幕時,UI 通常會切換至詳細資料頁面。自動化測試應涵蓋此 UI 狀態還原作業,包括導覽狀態。

如要測試裝置從某個螢幕轉到另一個螢幕或進入多視窗模式時發生的設定變更,您可以使用下列多個選項:

  • 在測試期間使用任何裝置調整螢幕大小。在大多數情況下,這項操作會觸發需要驗證的所有狀態還原機制。不過,由於型態變更不會觸發設定變更,因此這項測試不適用於偵測折疊式裝置中特定型態的邏輯。
  • 使用支援要測試功能的裝置或模擬器觸發相關設定變更。舉例來說,您可以使用 Espresso 裝置控制摺疊式裝置或平板電腦,這樣就能在橫向時從折疊狀態移至平放模式。如需範例,請參閱「程式庫和工具可用於測試不同螢幕大小」的「Espresso 裝置」一節。
圖 3. 裝置摺疊及展開。

針對不同螢幕和視窗大小執行的測試類型

請針對各種用途使用適當的測試類型,驗證測試在不同板型規格中的是否正常運作:

  • UI 行為測試會啟動應用程式 UI 的部分內容,例如活動顯示畫面。這些測試會驗證特定元素是否存在或具有特定屬性。測試可以選擇執行模擬的使用者動作。如要查看檢視區塊,請使用 Espresso。Jetpack Compose 有專屬的測試 API。UI 行為測試可以檢測本機。設備測試會在裝置或模擬器上執行,本機 UI 測試則在 JVM 的 Robolectric 上執行。

    使用 UI 行為測試,驗證應用程式的導覽實作是否正確。測試會執行點擊和滑動等動作。UI 行為測試也會檢查特定元素或屬性是否存在。詳情請參閱自動化 UI 測試

  • 螢幕截圖測試功能會擷取 UI 或元件的螢幕截圖,並將圖片與先前核准的螢幕截圖進行比較。這個方法可以有效防止迴歸,因為單一螢幕截圖可以涵蓋大量元素及其視覺屬性。您可在 JVM 或裝置上執行螢幕截圖測試。目前有很多可用的螢幕截圖測試架構。

最後,您可能需要單元測試,測試邏輯單元會根據裝置類型或視窗大小而有不同的行為,但單元測試在這個領域中較不普遍。

後續步驟

如要進一步瞭解如何實作本文件包含的檢查,請參閱程式庫和工具