Я пишу тесты с использованием эспрессо, мое приложение предназначено для телефона камеры, где я нажимаю кнопку клика вручную, а затем переносится на следующий экран, я не могу чтобы автоматизировать кнопку клика изображения в тестовом коде, как я могу получить доступ к камере с помощью кода, через который я могу сделать то же самое. Спасибо.Эспрессо: как нажимать на кнопку клика по изображению на телефоне
ответ
Вам не следует открывать намерение камеры или у вас не будет никакого способа получить от него результирующее изображение (без нажатия кнопки камеры вручную).
Взгляните на гася раздел камеры этого сайта: https://guides.codepath.com/android/UI-Testing-with-Espresso#stubbing-out-the-camera
Таким образом, вы проверяете вашу деятельность путем имитации фактического изображения «возвращаемый» в ваше приложение из камеры.
Update
И это метод я использую, чтобы получить растровый тест:
public static Bitmap getTestBitmap(Context context, String resourceName) {
Resources resources = context.getResources();
Bitmap ret = null;
int imageResource = resources.getIdentifier(
resourceName, "drawable", context.getPackageName());
Uri pictureUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
+ resources.getResourcePackageName(imageResource) + '/'
+ resources.getResourceTypeName(imageResource) + '/'
+ resources.getResourceEntryName(imageResource));
try {
ret = MediaStore.Images.Media.getBitmap(context.getContentResolver(), pictureUri);
} catch (Exception e) {
}
return ret;
}
И тогда я сохранить растровое изображение во внутренней памяти и получить Ури:
public static Uri saveToInternalStorage(Context context, Bitmap bitmapImage, String fileName) {
ContextWrapper cw = new ContextWrapper(context);
// path to /data/data/yourapp/app_data/pictures
File directory = cw.getDir("pictures", Context.MODE_PRIVATE);
// Create imageDir
File mypath = new File(directory, fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
// Use the compress method on the BitMap object to write image to the OutputStream
bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (Exception e) {
}
}
return Uri.fromFile(new File(mypath.getAbsolutePath()));
}
i am получение 5-27 15: 20: 24.183 3135-3553/com.android.local E/BitmapFactory: невозможно декодировать поток: java.io.FileNotFoundException: /storage/emulated/0/Mohit/IMG_20160527_152024.jpg: open failed: ENOENT (Нет такого файла или каталога) 05-27 15: 20: 24.183 3135-3553/com.android.local E/BitmapFactory: Невозможно декодировать поток: java.io.FileNotFoundException:/storage/emulated/0/Mohit/IMG_20160527_152024 .jpg: open failed: ENOENT (Нет такого файла или каталога) –
В сообщении говорится, что файл не существует на этом устройстве, но, возможно, это связано с проблемой с разрешениями приложения. Во всяком случае, я никогда не использую внешние изображения для тестирования, я думаю, что лучше использовать изображения из ресурсов приложения. См. Мое обновление с помощью метода, который я использую, чтобы получить растровое изображение для тестирования. – jeprubio
Вы не можете получить доступ к пользовательскому интерфейсу камеры, используя Espresso, потому что он не работает в приложениях устройств. Вместо этого вы можете использовать [Espresso-Intents] (https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html), чтобы имитировать поведение. И если вы хотите получить код камеры, вы можете использовать [UIAutomator] (https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html), который работает во всех приложениях устройств. – Droidwala