appium / appium-uiautomator2-server

Appium UiAutomator/UiObject2-based server for Android UI automation. This module is used by appium-uiautomator2-driver component
Apache License 2.0
319 stars 227 forks source link

screenshot failed in real android device #608

Closed kevinycm closed 6 months ago

kevinycm commented 6 months ago

using webelement.screenshot(image_file_path),exception occured:

[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Matched '/element' to command name 'findElement'
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Proxying [POST /element] to [POST http://127.0.0.1:8201/session/f496ffc8-866b-4285-9f9c-a764b7cc9624/element] with body: {"strategy":"id","selector":"com.tencent.mm:id/o7h","context":"","multiple":false}
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Got response with status 200: {"sessionId":"f496ffc8-866b-4285-9f9c-a764b7cc9624","value":{"ELEMENT":"00000000-0000-01fe-ffff-ffff000032d4","element-6066-11e4-a52e-4f735466cecf":"00000000-0000-01fe-ffff-ffff000032d4"}}
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Responding to client with driver.findElement() result: {"element-6066-11e4-a52e-4f735466cecf":"00000000-0000-01fe-ffff-ffff000032d4","ELEMENT":"00000000-0000-01fe-ffff-ffff000032d4"}
[HTTP] <-- POST /session/e0bb43ad-1604-4fdc-a241-35aad7fdb0bb/element 200 354 ms - 137
[HTTP]
[HTTP] --> GET /session/e0bb43ad-1604-4fdc-a241-35aad7fdb0bb/element/00000000-0000-01fe-ffff-ffff000032d4/screenshot
[HTTP] {}
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Calling AppiumDriver.getElementScreenshot() with args: ["00000000-0000-01fe-ffff-ffff000032d4","e0bb43ad-1604-4fdc-a241-35aad7fdb0bb"]
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Matched '/element/00000000-0000-01fe-ffff-ffff000032d4/screenshot' to command name 'getElementScreenshot'
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Did not know how to rewrite the original URL '/element/00000000-0000-01fe-ffff-ffff000032d4/screenshot' for W3C protocol
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Proxying [GET /element/00000000-0000-01fe-ffff-ffff000032d4/screenshot] to [GET http://127.0.0.1:8201/session/f496ffc8-866b-4285-9f9c-a764b7cc9624/element/00000000-0000-01fe-ffff-ffff000032d4/screenshot] with no body
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Got response with status 500: {"sessionId":"f496ffc8-866b-4285-9f9c-a764b7cc9624","value":{"error":"unknown error","message":"java.lang.IllegalStateException: Can't compress a recycled bitmap","stacktrace":"java.lang.IllegalStateException: Can't compress a recycled bitmap\n\tat android.graphics.Bitmap.checkRecycled(Bitmap.java:408)\n\tat android.graphics.Bitmap.compress(Bitmap.java:1529)\n\tat io.appium.uiautomator2.utils.ScreenshotHelper.compress(ScreenshotHelper.java:147)\n\tat io.appium.uiautomator2.utils.ScreenshotHelper.takeScreenshot(ScreenshotHelper.java:66)\n\tat io.appium.uiautomator2.handler.GetElementScreenshot.safeHandle(GetElementScreenshot.java:27)\n\tat io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)\n\tat io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)\n\tat io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)\n\tat io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:77)\n\tat io.netty.cha...
[W3C] Matched W3C error code 'unknown error' to UnknownError
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] Encountered internal error running command: An unknown server-side error occurred while processing the command. Original error: java.lang.IllegalStateException: Can't compress a recycled bitmap
[AndroidUiautomator2Driver@45b4 (e0bb43ad)] java.lang.IllegalStateException: Can't compress a recycled bitmap
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at android.graphics.Bitmap.checkRecycled(Bitmap.java:408)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at android.graphics.Bitmap.compress(Bitmap.java:1529)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.utils.ScreenshotHelper.compress(ScreenshotHelper.java:147)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.utils.ScreenshotHelper.takeScreenshot(ScreenshotHelper.java:66)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.handler.GetElementScreenshot.safeHandle(GetElementScreenshot.java:27)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:77)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:611)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:552)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:466)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]     at java.lang.Thread.run(Thread.java:1012)
[AndroidUiautomator2Driver@45b4 (e0bb43ad)]
[HTTP] <-- GET /session/e0bb43ad-1604-4fdc-a241-35aad7fdb0bb/element/00000000-0000-01fe-ffff-ffff000032d4/screenshot 500 959 ms - 4085

Operating system: macOS 14.2.1 appium version:2.4.1 node version:v21.6.1 npm version:10.2.4 uiautomator2:2.43.2 device:Google Pixel 7 Pro

looking forward for someone's help

KazuCocoa commented 6 months ago

Could https://github.com/appium/appium-uiautomator2-driver?tab=readme-ov-file#mobile-screenshots be a workaround?

mykola-mokhnach commented 6 months ago

the issue should be addressed in the latest driver version