AirtestProject / AirtestProject/Airtest

使用airtest自带的snapshot截图功能时报错

Ouverte
#1,074 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
9.6k
Forks
1.5k
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

(请尽量按照下面提示内容填写,有助于我们快速定位和解决问题,感谢配合。否则直接关闭。)

**(重要!问题分类)**
* 测试开发环境AirtestIDE使用问题 -> https://github.com/AirtestProject/AirtestIDE/issues
* 控件识别、树状结构、poco库报错 -> https://github.com/AirtestProject/Poco/issues
* 图像识别、设备控制相关问题 -> 按下面的步骤

**描述问题bug**
使用airtest自带的snapshot截图功能时报错

```
(在这里粘贴traceback或其他报错信息)
```
[20:30:41][ERROR] b''
[20:30:41][ERROR] b'PID: 4053\nINFO: Using projection 1080x2408@1080x2408/0\nINFO: (external/MY_minicap/src/minicap_30.cpp:243) Creating SurfaceComposerClient\nINFO: (external/MY_minicap/src/minicap_30.cpp:246) Performing SurfaceComposerClient init check\nINFO: (external/MY_minicap/src/minicap_30.cpp:257) Creating virtual display\nINFO: (external/MY_minicap/src/minicap_30.cpp:263) Creating buffer queue\nINFO: (external/MY_minicap/src/minicap_30.cpp:266) Setting buffer options\nINFO: (external/MY_minicap/src/minicap_30.cpp:270) Creating CPU consumer\nINFO: (external/MY_minicap/src/minicap_30.cpp:274) Creating frame waiter\nINFO: (external/MY_minicap/src/minicap_30.cpp:278) Publishing virtual display\nINFO: (jni/minicap/JpgEncoder.cpp:64) Allocating 7887876 bytes for JPG encoder\nERROR: (external/MY_minicap/src/minicap_30.cpp:126: errno: None) Unable to lock next buffer BAD_VALUE (-22)\nERROR: (jni/minicap/minicap.cpp:442: errno: None) Unable to consume pending frame\nINFO: (external/MY_minicap/src/minicap_30.cpp:293) Destroying virtual display\n'
[20:30:41][ERROR] Minicap setup up failed!
[20:30:42][ERROR] OSError('socket connection broken')
[20:30:42][ERROR] Javacap setup up failed!
[20:30:42][ERROR] b''
[20:30:42][ERROR] b''
[20:30:42][ERROR] AdbCap setup up failed!

android/api/test_kc_driver/test_app.py:26 (TestUploadPictureFail.test_up_load_picture_fail)
self =

def test_up_load_picture_fail(self):
with allure.step("点击找货"):
poco(name="com.kuaichengwuliu.driver:id/et_mobile").wait_for_appearance(10)
log.info("点击找货")
poco(name="com.kuaichengwuliu.driver:id/et_mobile").click()
text("24324234324")
sleep(2)
log.info("1")
> snapshot("test.png")

test_app.py:35:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/airtest/utils/logwraper.py:90: in wrapper
res = f(*args, **kwargs)
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/airtest/core/api.py:286: in snapshot
screen = G.DEVICE.snapshot(filename, quality=quality, max_size=max_size)
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/airtest/core/android/android.py:407: in snapshot
screen = self.screen_proxy.snapshot(ensure_orientation=ensure_orientation)
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/airtest/core/android/android.py:162: in screen_proxy
self._screen_proxy = ScreenProxy.auto_setup(self.adb, default_method=self._cap_method,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls =
adb =
default_method = 'MINICAP', args = ()
kwargs = {'display_id': None, 'ori_function': . at 0x122e7f760>, 'rotation_watcher': }
screen =
name = 'ADBCAP'
screen_class =

@classmethod
def auto_setup(cls, adb, default_method=None, *args, **kwargs):
"""
In order of priority, try to initialize all registered screenshot methods,
select an available method to return

按优先顺序,尝试初始化注册过的所有屏幕截图方法,选择一个可用方法返回

Custom method 自定义方法 > MINICAP > JAVACAP > ADBCAP

Args:
adb: :py:mod:`airtest.core.android.adb.ADB`
default_method: String such as "MINICAP", or :py:mod:`airtest.core.android.cap_methods.minicap.Minicap` object

Returns: ScreenProxy object

Examples:
>>> dev = Android()
>>> screen_proxy = ScreenProxy.auto_setup(dev.adb, rotation_watcher=dev.rotation_watcher)
>>> screen_proxy.get_frame_from_stream()
>>> screen_proxy.teardown_stream()

"""
screen = None
if default_method:
if isinstance(default_method, str) and default_method.upper() in cls.SCREEN_METHODS:
screen = cls.SCREEN_METHODS[default_method.upper()](adb, *args, **kwargs)
elif isinstance(default_method, BaseCap):
screen = default_method
if screen and cls.check_frame(screen):
return ScreenProxy(screen)
# 从self.SCREEN_METHODS中,逆序取出可用的方法
for name, screen_class in reversed(cls.SCREEN_METHODS.items()):
if name == default_method:
continue
screen = screen_class(adb, *args, **kwargs)
if cls.check_frame(screen):
return ScreenProxy(screen)
# 如果没有找到任何可用方法,抛出异常(但是至少adbcap是可用的)
> raise ScreenError("No available screen capture method found")
E airtest.core.error.ScreenError: 'No available screen capture method found'

/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/airtest/core/android/cap_methods/screen_proxy.py:104: ScreenError
**相关截图**
(贴出遇到问题时的截图内容,如果有的话)
(在AirtestIDE里产生的图像和设备相关的问题,请贴一些AirtestIDE控制台黑窗口相关报错信息)

**复现步骤**
1. 调用 snapshot()函数截图保存
2. 报错在上面的堆栈里面

**预期效果**
(预期想要得到什么、见到什么)

**python 版本:** `python3.10`

**airtest 版本:** `1.2.6`
> airtest版本通过`pip freeze`可以命令可以查到

**设备:**
- 型号: vivo T1
- 系统:android 11
- (别的信息)

**其他相关环境信息**
(其他运行环境,例如在linux ubuntu16.04上运行异常,在windows上正常。)

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.