ด้วยข้อจำกัดของ Espresso ที่ไม่สามารถทำ action กับ element ที่อยู่ภายนอก application ได้ เราจึงต้องใช้ UI automator ช่วยในการกดปุ่ม Allow แทน โค้ดข้างล่างนี้จะกดปุ่ม Allow ให้เราโดยอัตโนมัติ ถ้าหากปุ่มดังกล่าวปรากฏอยู่
private val device: UiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) fun allowPermissionsIfNeeded() { if (Build.VERSION.SDK_INT >= 23) { val allowPermissions = device.findObject(UiSelector().text("Allow")) if (allowPermissions.exists()) { try { allowPermissions.click() } catch (e: UiObjectNotFoundException) { } } } }เนื่องจากเป็นการกดปุ่ม Allow โดยไม่สนใจว่า เป็นการขอ permission ใด จึงสามารถนำไปใช้กับการขอ permission อื่นๆได้ เช่น การเลือกรูปจาก gallery, การใช้งาน location เป็นต้น
สำหรับข้อมูลเพิ่มเติม สามารถอ่านได้ที่ https://stackoverflow.com/questions/33929937/android-marshmallow-test-permissions-with-espresso