![](/img/trans.png)
[英]Android Instrumental Test running on Emulator but not on real device
[英]Unlocking the emulator or device for Android test
我正在編寫Android功能測試。 我需要喚醒設備並使應用程序可視化以便它們工作。 我已經咨詢了Android開發人員 。 但是,提出的解決方案存在一些問題:
此類在API級別13中已棄用。請改用FLAG_DISMISS_KEYGUARD和/或FLAG_SHOW_WHEN_LOCKED; 這允許您在應用程序移入和移出前台時無縫隱藏鍵盤鎖,並且不需要請求任何特殊權限。 newKeyguardLock(String)返回的句柄允許您禁用/重新啟用鍵盤鎖。
然而,我嘗試了這個建議,而不是棄用的解決方案,標志一個jsut對我不起作用 - 它沒有解鎖設備。 我還發現了證實標志解決方案不穩定的消息來源(例如對這個答案的評論)。
src/debug/AndroidManifest.xml
(例如這一個和這個 )。 但是,它並沒有按照規定發生 - 調試Mainfest不會包含在設備上已部署的內容中。 它與我構建和部署的方式有關嗎? 我使用Eclipse進行開發(ADT)。 只有當我使用像ant這樣的構建工具時,這個清單注入才會起作用 總而言之 - 有人可以建議一個穩定的解決方案,以便在我的測試執行期間解鎖並保持喚醒設備嗎?
編輯
我現在發現Robotium還在其最新版本的框架中包含了unlockScreen
方法。 它完全使用上面提出的窗口標志,也不能在我的設備上運行。
在運行Robotium測試時,我遇到了與不可靠解鎖相同的問題。 我沒有找到程序化解鎖可靠工作的設備的解決方案,但我做了兩件事作為解決方法。
只需禁用鎖定屏幕( Settings -> Security -> Screen lock -> None
)。 不理想,但在一天結束時,可靠的測試是重要的。
啟用“保持清醒”設置以防止屏幕由於不活動而關閉( Settings -> Developer options -> Stay awake
)。 有些OEM /手機要么沒有這個選項,要么仍然關閉,所以對於那些討厭的設備,我安裝了KeepScreenOn應用程序。
警告:每天24小時在主屏幕上打開屏幕可能會導致屏幕老化或重影。 我不確定這是否是永久性的,但請注意這一點。 在我們的例子中,我們使用專用的測試設備,所以這不是什么大問題。
另請注意,由於手機的屏幕始終處於打開狀態,因此您可能需要調低亮度以降低電池電量(有時USB充電速度可能會很慢)。
到目前為止,只有對我有用的事情是在測試之前啟動喚醒設備腳本。 腳本通過向所有設備發送鍵事件來從cli解鎖設備。 解鎖部分在我的經驗中很重要,有些設備不允許你從cli解鎖它們(你仍然需要刷卡),在這種情況下我建議在Google Play上使用“無鎖”應用程序,它應該有幫助,但可能不適用於所有設備。
我正在研究Gradle插件,它會在Gradle構建過程中運行檢測測試之前做同樣的事情。
我對棄用和新方法都有類似的麻煩。 最終,我最終得到了這個黑客,只是發送一個向上滑動手勢來解鎖:
KeyguardManager keyguardManager = (KeyguardManager) InstrumentationRegistry.getContext().getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardLocked()) {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
int x = device.getDisplayWidth() / 2;
int startY = device.getDisplayHeight();
int endY = 0;
device.swipe(x, startY, x, endY, 50);
}
它依賴於鎖屏的細節,但到目前為止它的效果令人驚訝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.