2

我在Google/StackOverflow中搜索了很多次以尋求答案。
本來(在Android 6.0之前)我的自動化代碼運行順利,但現在所有的東西都被權限所需的對話框阻止。
我的應用程序需要將數據保存到SD卡中,並且我發現我無法使用Selendroid自動化來解除運行時測試期間由com.android.packageInstaller進程創建的SD卡權限所需的對話框。
我知道我可以手動預配置我的應用程序的權限,但每當我用Jenkins重新安裝我的應用程序,或者開始一個新的Selendroid測試我的應用程序時,所有配置都將被清除。在Selendroid自動化測試中關閉Android 6.0權限所需對話框

從我目前的理解,這裏是解決這一問題的可能途徑:
1.添加「NORESET」標誌告訴Selendroid不消滅當前的設置,但我不能找到它selendroid.io
2 。使用Appium(他們的文檔說他們有Android的NoReset標誌),但是這需要一些時間才能將我的代碼從Selendroid移植到Appium。
移植完成後,我只能知道它是否有效。
3.谷歌提供的任何其他方式,但我無法找到它。

如果有人遇到過類似的問題並有一些信息可以與我分享,我將非常感謝您的幫助,謝謝。

+0

所以現在你的問題是,當您嘗試保存一些數據SCARD,一些對話框彈出來了,你要處理呢?如果你按下對話框上的某個按鈕,它會起作用嗎?對於你的「可能的方式#3」,你到底想要自動化到底是什麼? – Rilwan

+0

我想要做的就是在每次出現對話框時接受對話框。 我曾嘗試使用Selendroid接受,但他們都沒有工作。 Selendroid告訴我它找不到SD卡權限所需的對話框元素,可能的原因是Selendroid只能操縱我的App,但不能解開由System創建的對話框。 當然,我可以手動解僱它,沒有任何問題。 – holy934

+0

你可以按下「接受」按鈕或使用android uiautomator輕鬆處理對話框。或者你可以使用'adb shell input keyevent'來導航並按下對話框上的按鈕。 – Rilwan

回答

0

ü正在尋找的設置是prolly:

SelendroidConfiguration config = new SelendroidConfiguration(); 
config.setNoClearData(true); 

這樣ü將只需要一次給任何權限和OS以後將一直記得。

+0

這正是我在理解中提到的選項1。 但是,沒有清除數據代表「我必須管理我的應用程序的最後一個活動」,這導致了其他問題,我放棄了。 現在我已將這些案件遷移到Espresso。 – holy934

+0

我實際上使用UIAutomator從這篇文章中提到 http://stackoverflow.com/questions/33929937/android-marshmallow-test-permissions-with-espresso – holy934

0

在閱讀Android UIAutomator幾天並評估我的代碼之後,我認識到對於Selendroid本身來說,似乎無法操縱任何UI超出AUT(待測應用程序)。
另外,在我當前的項目中,從Selendroid或Google UIAutomator切換到Appium需要更長的時間。

最簡單可靠的方法是發送[ADB shell輸入tap,]點擊座標X & Y,因爲我只保留少量設備=分辨率類型。

SelendroidDriver driver = new SelendroidDriver(new URL("http://localhost:4444/wd/hub"), caps); 
... 
driver.getAdbConnection().executeShellCommand("input tap 1100 1100"); 
0

實際上,你可以讓Selendroid自動運行的adb命令來添加權限:

List <String> commands = new ArrayList<>(); 
commands.add("shell pm grant com.example.yourapp android.permission.READ_EXTERNAL_STORAGE") 

SelendroidCapabilities capabilities = new SelendroidCapabilities(); 
capabilities.setPreSessionAdbCommands(commands)