2012-12-10 9 views
6

Podczas korzystania uiautomator, takeScreenshot(File storePath) zawsze zwraca false bez względu parametr mijam w.Dlaczego Android uiautomator za UIDevice # takeScreenshot zawsze return false na emulatorze

Próbowałem dać albo new File(dir_name, file_name) lub new File(file_name), żadna z nich działa (oczywiście mkdir pierwszy, jeśli dir_name nie istnieje).

Za każdym razem, po prostu return false i /data/local/tmp/ na emulatorze jest pusty.

BTW, nie sądzę, że jest to problem z uprawnieniami, ponieważ próbując podobnego dumpWindowHierarchy można wygenerować plik zrzutu tam.

Z góry dziękuję za pomoc.

+0

jak dodać uiautomator do naszego projektu, muszę wziąć zrzut ekranu proszę mi pomóc ... – kalandar

+0

@kalandar należy wykonać czynności opisane na tej li nk: http://developer.android.com/tools/testing/testing_ui.html jest wystarczająco szczegółowy. Zasadniczo do skonfigurowania projektu, musisz dodać obsługę JUnit3 lib i uiautomator.jar + android.jar. –

+0

dziękuję @ Jing li .... zrobię to – kalandar

Odpowiedz

7

Jeśli używasz emulatora do uruchamiania testów, powinieneś włączyć "Użyj Host GPU" w swojej konfiguracji AVD. Po tej zmianie zadziałało to dla mnie.

Jeśli nadal masz problem, możesz wypróbować screencap. Jest to narzędzie wiersza poleceń do robienia zrzutów ekranu. Działa w obu ustawieniach emulatora. Aby zapisać zrzut ekranu w danym ścieżce wykonać:

Process process = Runtime.getRuntime().exec("screencap <path>"); 
process.waitFor(); 

Zastosowanie /data/local/tmp, aby uniknąć problemów z pozwoleniem. Możesz także użyć karty SD. Jest asynchroniczny, więc poczekaj, aż proces zakończy się za pomocą funkcji waitFor(). Rozpozna pożądany format wyjściowy poprzez rozszerzenie podanego pliku.

Albo można uzyskać PNG w InputStream (nie trzeba czekać):

Process process = Runtime.getRuntime().exec("screencap -p"); 
InputStream output = new BufferedInputStream(process.getInputStream()); 

Można pominąć -p, jeśli chcesz uzyskać plik w formacie JPEG. Zrzuty ekranu JPEG są większe, ale uzyskanie ich zajmuje mniej czasu. Sposób

+0

dzięki za odpowiedź, rozwiązuje mój problem po włączeniu opcji "Użyj hosta GPU". Tak, funkcja tworzenia zrzutów ekranu jest zazwyczaj budowana w oparciu o metodę renderowania. Moim zdaniem, jeśli wbudowana funkcja działa, nie powinniśmy używać zewnętrznej biblioteki do robienia tego samego. –

+1

Czy istnieje sposób, aby to zrobić za pomocą metody UiDevice typu TakeScreeshot Androida? Próbuję tego na urządzeniu, ale tam też zawodzi i daje wynik jako fałszywy zawsze. Katalog zostanie utworzony, ale pozostanie pusty po wywołaniu metody takeScreeshot. – sarabhai05

3

takeScreenshot() stosuje się od 4,2 i powyżej urządzeń android wersja

Jeśli wersja urządzenia jest właściwe, a następnie za pomocą następującego fragmentu kodu

File path = new File("/sdcard/filename.png"); 
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH); 
    } 

możemy zobaczyć, jak plik postępując komenda

$ adb shell ls -l /sdcard/name-of-file 
+0

to już nie działa z Uiautomator 2.0 –

Powiązane problemy