12

Chạy thử nghiệm trên thiết bị Android với sdk 26 khiến chúng không thành công do tính năng Autofill mới ẩn các trường khi máy pha cà phê đang cố nhấp vào chúng.Cách tắt tính năng Tự động điền mới từ Android Oreo để kiểm tra cà phê

Tôi đang chạy thử nghiệm của mình trên phòng thí nghiệm kiểm tra firebase để tôi không thể tắt chúng theo cách thủ công trên thiết bị thử nghiệm của mình.

Một số hình ảnh:

1. Mật khẩu hiển thị trước khi nhấp vào trường tên người dùng.

enter image description here

2. Sau khi nhấp trường mật khẩu lĩnh vực tên người dùng được ẩn bởi thoại Autofill này:

enter image description here

3. Sau khi đăng nhập nó cho thấy một hộp thoại Fill:

enter image description here

Espresso cant click now field field từ autofi hộp thoại sẽ ẩn trường của tôi và fail.

Sử dụng AutofillManager#disableAutofillServices() chỉ vô hiệu hóa # 2. hộp thoại nhưng # 3. vẫn còn đó.

Làm cách nào để tắt Tự động điền trên thiết bị thử nghiệm?

+0

Mỗi câu trả lời đã xóa, Cài đặt> Hệ thống> Nâng cao> Dịch vụ tự động điền> Đặt thành "Không". – CommonsWare

+0

@CommonsWare Tôi không có quyền truy cập cài đặt trên thiết bị từ đám mây như firebase, tôi cần phải tắt các cài đặt từ mã trước khi thử nghiệm chạy – Caipivara

Trả lời

1

adb shell pm disable com.google.android.gms/com.google.android.gms.autofill.service.AutofillService

Điều này sẽ tắt dịch vụ tự động điền. Nó tương tự như tắt dịch vụ tự động điền trong cài đặt hệ thống theo cách thủ công. Nó ít nhất là làm việc trên giả lập. Nhưng điều này cần truy cập root.

Một cách khác để tắt dịch vụ tự động điền là thay đổi cài đặt autofill_service.

adb shell settings put secure autofill_service null

+0

Cài đặt cuối cùng' adb shell đặt an toàn autofill_service null' hoạt động! cảm ơn người đàn ông – Caipivara

2

Dựa trên tài liệu, bạn có thể tắt các dịch vụ tự động điền sử dụng AutofillManager#disableAutofillServices() API:

Nếu ứng dụng gọi API này đã cho phép các dịch vụ tự động điền họ sẽ bị vô hiệu.

Cách sử dụng:

 

    val autofillManager: AutofillManager = context.getSystemService(AutofillManager::class.java) 
    autofillManager.disableAutofillServices() 
 

Bạn có thể làm điều này trong @Before bước thử nghiệm của bạn.

+0

Nó đã xóa hộp thoại "Nhấn để cho Google" nhưng hộp thoại vẫn hiển thị hộp thoại "Lưu mật khẩu với AUTOFILL với GOOGLE" . – Caipivara

+1

Tôi không có thiết bị O và tôi không thể tìm thấy ứng dụng "Tự động điền với Google" bên trong trình giả lập. Tôi nghĩ rằng bạn có thể cố gắng vô hiệu hóa ứng dụng đó thông qua lệnh shell adb ([như thế nào?] (Https://stackoverflow.com/a/35157119/1083957)) khi thực hiện kiểm tra thiết bị: 'adb shell pm disable package.name.of. autofill.with.google'. – azizbekian

+0

bạn có thể tìm thấy nó trong 'Cài đặt' cho trình giả lập Android O. – Caipivara

0

Tắt tính năng tự động điền khi thử nghiệm. Định nghĩa một lớp TestRunner trong gradle

defaultConfig { 
    testInstrumentationRunner "com.cover.android.TestRunner" 
} 

sau đó

public class TestRunner extends AndroidJUnitRunner { 

@Override 
public void onCreate(Bundle arguments) { 
    super.onCreate(arguments); 
    CustomEditText.TESTING = TRUE; 
    } 

sau đó sử dụng một phiên bản tùy chỉnh của EditText

public class CustomEditText extends AppCompatEditText { 
public static boolean TESTING = false; 
public CustomEditText(Context context) { 
    super(context); 
} 

@Override 
public int getAutofillType() { 
    return TESTING? AUTOFILL_TYPE_NONE : super.getAutofillType(); 
} 
+0

Thật tệ khi thay đổi tất cả 'EditText' trong ứng dụng của tôi chỉ cho mục đích này nhưng cảm ơn – Caipivara

0

Theo tài liệu: khi xem đều tập trung vào là một phần của tập dữ liệu. Các ứng dụng có thể được thông báo khi khả năng được hiển thị bằng cách đăng ký một AutofillManager.AutofillCallback thông qua registerCallback (AutofillCallback). Khi người dùng chọn tập dữ liệu từ khả năng chi trả, tất cả các chế độ xem có trong bộ dữ liệu được tự động điền, thông qua các cuộc gọi đến tự động điền (Tự động điền) hoặc tự động điền (SparseArray).

Bối cảnh là sau đó kết thúc khi một trong những điều sau đây xảy ra:

  1. cam kết() được gọi hoặc tất cả các quan điểm savable đã mất hết.
  2. cancel() được gọi.

Bạn có thể an toàn gọi các phương thức của nó từ bất kỳ chuỗi nào.

Các thể hiện của lớp này phải được lấy bằng cách sử dụng Context.getSystemService (Lớp) với đối số AutofillManager.class.

Sử dụng: disableAutofillServices() để xóa dịch vụ.

Các vấn đề liên quan