背景:在做移动端UI自动化的时候,可能会碰到某目标控件元素被遮挡的情况,我们知道自动化的点击操作是点击控件元素的中心位置,这就给我们提供了思路。在采用PO(Page Object)模式的情况下,自己所负责的项目的APP页面大的框架一般不会有大的变动,以“今日头条”举例说明。
一、确定页面上下遮挡的组件
对于头条的首页,可以看到顶部的导航栏和底部的导航栏是固定位置的,页面滑动时会被这两个导航栏遮住,但是页面获取的XML中还是会有对应的控件,这就导致了我们点不到,比如途中底部的三张图片
二、获取上下边界的Y坐标与目标点击元素的中心Y坐标
显然,元素被遮挡无法点击是因为目标元素的中心点的Y坐标对于我们“不可见”,顶部遮挡时,是目标元素中心Y坐标小于顶部导航栏的下边界,底部遮挡时是目标元素中心Y坐标大于底部导航栏的上边界。
使用uiautomatorviewer可以看到导航栏的边界坐标
这两个坐标代表着起始坐标(左上角),尾坐标(右下角),那么我们在顶部遮挡元素要的就是他的右下角坐标的Y坐标(320),或者用起始坐标的Y坐标加上控件的高度也可以。
同理底部元素就简单一些,只需要起始坐标的Y坐标即可(2064)。
所以实现的时候比对一下Y坐标,如果是顶部遮挡,就下滑页面,底部遮挡,就上滑页面。一般的导航栏遮挡元素控件高度是确定的,剩下的就是滑动操作的输入值问题了。