AirtestProject/Airtest

1.2.2版本「强制指定更短的边为width,更长的边为height」带来的安卓横屏设备触摸位置不正确

hgjazhgj opened this issue · 6 comments

描述问题bug
Airtest 1.2.2更新中,在获取设备宽高数据时,强制指定更短的边为width,更长的边为height
但是对于平板、模拟器等默认横屏(orientation=0时为landscape)的设备应该是「长边为Width,短边为Height」
因此在touch_proxy.transform_xy时应用了错误的值,致使坐标被错误地拉伸了

相关截图

复现步骤

from airtest.core.android.android import Android
d=Android(...)                            # 此处连接到分辨率为1280*720的模拟器  
print(d.get_current_resolution())         # 得到(720,1280),而在原先的版本中正确的值应为(1280,720)
d.touch((100,100))                        # 实际的点击位置变为了(100/720*1280,100/1280*720)=(177,56)
d.touch((56,177))                         # 这样才点到(100,100)

预期效果
见上

python 版本: python3.8.73.9.6

**airtest 版本: 1.2.2

设备:

  • 型号: BlueStack4 hyperv x64

在AndroidStudio中挑个width>height的设备都能复现相同错误
比如我选择了(2048*1536)的Pixel XL
image
image

其他相关环境信息

请立刻撤回该项更新,删除airtest/core/android/adb.py第893行

类似的获取长宽的错误还有我之前发的 #796
我觉得获取长宽直接最简单的adb shell wm size就行了
image
我在Android类初始化完成后添加以下代码来使用wm size的值替换原先的display_info中的对应项

self._display_info=self.get_display_info()|{i:int(j)for i,j in re.search(r'(?P<width>\d+)x(?P<height>\d+)\s*$',self.adb.raw_shell('wm size')).groupdict().items()}

可否解释一下不采取此种实现的理由?

zer0e commented

同样被这个问题所影响,在测试安卓平板时出现了这个问题,建议回撤更新

新版本修复了这个问题,正式版本周会放出

@zer0e 是否愿意提供邮箱,我们将重新打包后的版本发给你试一下看看你那里的平板设备能否兼容?

已更新,本地直接更到最新版本即可,AirtestIDE更新到1.2.12版本,airtest更新1.2.3版本

zer0e commented

@zer0e 是否愿意提供邮箱,我们将重新打包后的版本发给你试一下看看你那里的平板设备能否兼容?

不好意思,设备也是找其他人借的,下次有机会我测试下