2016-05-25 1 views
1

Я пишу тесты с использованием эспрессо, мое приложение предназначено для телефона камеры, где я нажимаю кнопку клика вручную, а затем переносится на следующий экран, я не могу чтобы автоматизировать кнопку клика изображения в тестовом коде, как я могу получить доступ к камере с помощью кода, через который я могу сделать то же самое. Спасибо.Эспрессо: как нажимать на кнопку клика по изображению на телефоне

+0

Вы не можете получить доступ к пользовательскому интерфейсу камеры, используя 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

ответ

1

Вам не следует открывать намерение камеры или у вас не будет никакого способа получить от него результирующее изображение (без нажатия кнопки камеры вручную).

Взгляните на гася раздел камеры этого сайта: 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())); 
} 
+0

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 (Нет такого файла или каталога) –

+0

В сообщении говорится, что файл не существует на этом устройстве, но, возможно, это связано с проблемой с разрешениями приложения. Во всяком случае, я никогда не использую внешние изображения для тестирования, я думаю, что лучше использовать изображения из ресурсов приложения. См. Мое обновление с помощью метода, который я использую, чтобы получить растровое изображение для тестирования. – jeprubio