问题
脚本执行上图右上角 + 号的时候,应用会弹出 popwindow 。这可能是 uiautomator 的 bug
driver.find_element
通过这类方法 find id name 等全部找不到元素会报错。脚本终止执行,遇到这个情况只能用 根据坐标去做点击
如何获取元素精准坐标
- uiautomator viewer
- appium 提供的 inspector
- android monitor
上述三种工具都可以查看 Android 手机的元素和元素属性,这里我采用的 android monitor
定位后点击
可以看到我点击发起群里这个元素,右侧有这个元素的绝度坐标信息。两组 x y。这里为什么是两组呢,这里应该是获取的左上和右下的绝对坐标。这里我取它们的中间值
driver.tap([(800, 300)]) # popwindow 发起群聊 绝对坐标
然后我执行脚本成功解决 popwindow 存在的问题,见下图 gif
后记
通过这种方式我们虽然成功的解决的 appium popwindow 无法通过 id name 等定位元素的问题。但是也有个隐患,这是我在 5.0 吋手机上取的绝对坐标,我努力的去通过定位最中心点去点击。这样是为了在可能的范围内适配 4.0 ~ 6.0 的手机,但是如果直接来一个大平板可能这样算来的坐标就无法点击到我们想点击的元素,解决办法是获取屏幕的长宽根据比例去换算。
# 获取当前手机屏幕大小X,Y
X = self.driver.get_window_size()['width']
Y = self.driver.get_window_size()['height']
有更优雅的方式解决此问题欢迎在下方留言评论