我正在使用Android上的UI Automator進行一組測試。我有它的工作,但我目前的測試是用大量的字符串文字。訪問Android UI Automator測試的資源
字符串文字很好,當我只是想讓事情在第一時間工作,但他們會很糟糕。如果應用程序發生更改,字符串文字將需要更改以匹配。另外,我的測試必須完全重做才能測試其他語言的本地化版本,這很愚蠢。
應用程序本身具有存儲在資源中的所有字符串。每串有一個不變的標識......這裏有一個例子:
<string name="more_options">More options</string>
的應用程序代碼總是會使用名稱more_options
查找字符串資源,而不是硬編碼"More options"
到代碼。
所以我想要的是導入所有的字符串資源,將它們存儲在某種地圖對象中,然後在我的UI Automator測試代碼中使用類似m.get("more_options")
而不是像現在這樣的字面字符串"More options"
。不管我做什麼,我都希望它成爲構建並推送到設備以運行測試的JAR文件的一部分。例如,我不想將XML字符串資源文件推送到設備,並嘗試在測試運行時讀取它們。我想在構建JAR文件時創建數據。
我看着構建應用程序產生的文件,而像more_options
這樣的名稱只設置爲整數。這些必須是索引或指向資源庫的指針,但我不知道如何將該商店複製到我的UI Automator項目中並將其連接起來;在Android應用中,您使用Context
對象來訪問資源,並且UI Automator JAR文件沒有Context
。
這是一個常見問題,人們必須已經解決了這個問題,但是我的谷歌搜索沒有發現人們如何解決這個問題。
如果我沒有得到任何建議,我將編寫一個Python腳本來導入XML文件並編寫一個具有構建我需要的映射的函數的Java文件,然後從我的UI Automator中調用該腳本測試程序。 (我有一個Python腳本,運行一系列命令行工具來啓動一個UI Automator測試,無論如何......我不介意讓它做更多的工作。)但是我認爲應該有一個純Java解決方案爲此,可能需要從應用程序的源目錄中抓取已編譯的文件。
它看起來當反用APK-工具的應用程序,該字符串由他們的名字不是他們的資源ID代表。也許查看[source](https://github.com/iBotPeaches/Apktool) – tophernuts
這種有用的工作方式: 'String value = this.getApp()。getApplicationContext()。getResources()。getText(id) .toString()' –