1.2.2版本「强制指定更短的边为width,更长的边为height」带来的安卓横屏设备触摸位置不正确
hgjazhgj opened this issue · 6 comments
hgjazhgj commented
描述问题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.7
和 3.9.6
**airtest 版本: 1.2.2
设备:
- 型号: BlueStack4 hyperv x64
在AndroidStudio中挑个width>height的设备都能复现相同错误
比如我选择了(2048*1536)的Pixel XL
其他相关环境信息
无
请立刻撤回该项更新,删除airtest/core/android/adb.py
第893行
hgjazhgj commented
类似的获取长宽的错误还有我之前发的 #796
我觉得获取长宽直接最简单的adb shell wm size
就行了
我在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
同样被这个问题所影响,在测试安卓平板时出现了这个问题,建议回撤更新
yimelia commented
新版本修复了这个问题,正式版本周会放出
yimelia commented
已更新,本地直接更到最新版本即可,AirtestIDE更新到1.2.12版本,airtest更新1.2.3版本