UiAutomator——点击难以识别的控件技巧

    有时候我们使用UiAutomator在查找元素的时候,发现明明元素在UiAutomator view工具中能够识别出,但是使用代码去识别的时候,却发现该元素 UiObjectNotFoundException,是偶然出现的,但是这些就够让我们的测试代码的容错性大大降低,给别人展示的时候,人家看到的是结果,发现时不时的出现错误,那就给人的影响是————你还没做好。

    其实有些元素真的出现该现象的话,我们不妨用另外一个角度去思考——坐标,让我们来举个栗子:
    图一:【播放器】元素(UiAutomatorView 观察)

UiAutomator——点击难以识别的控件技巧_第1张图片

    图二:【全屏按钮】元素(UiAutomatorView 观察)

UiAutomator——点击难以识别的控件技巧_第2张图片

    在定位的过程中,我发现【播放器】定位是一定可以定位出来的,那么我们找一下他们有什么关系??

    其实那个【全屏按钮】跟【播放器】是不同的层的,所以我们不能用getChild的方法去定位,但是它们却有必然的联系,可以发现他们的坐标,【播放器】右下角坐标是(1080,664),【全屏按钮】右下角坐标是(1080,656),我们页可以确定它们的布局是确定的,无论是大屏还是小屏,【全屏按钮】一定在【播放器】右下角。

    如果是这样我们就好办了,我们可以这样想,思路是这样:定位出【播放器】——》获取【播放器】右下角坐标——》转化成【全屏按钮】坐标——》然后使用device.click(x,y)坐标点击——》完成。
    下面是我的写的例子:
     UiObject controllerViewLayout = device.findObject(new UiSelector().resourceId(PAKAGE_NAME+"layout_controller_bottom"));
        //获取播放器元素
        UiObject videoView = device.findObject(new UiSelector().resourceId(PAKAGE_NAME+"kankan_video_view"));
        if (!controllerViewLayout.exists()){
            //点击播放器,会调出操作栏,全屏按钮也会出现
            videoView.click();
            sleep(500);
        }
        UiObject fullScreenBtn =device.findObject(new UiSelector().resourceId(PAKAGE_NAME + "iv_video_fullscreen_layout"));
            if (!fullScreenBtn.exists()){
                //判断不出全屏按钮时
                Rect viewRect = videoView.getBounds();//获取播放器Rect对象,Rect里面就有我们需要的坐标
                int x = viewRect.right;    //这是播放器的X坐标
                int y = viewRect.bottom;    //这是播放器的Y坐标
//                writeRecord("点击坐标方式全屏");
//                writeRecord("x坐标:"+x+",y坐标:"+y);
                device.click(x-20,y-20);   //稍微缩进点,点击坐标
            }else {
                //当可以判断出全屏按钮,我们就直接点了
                fullScreenBtn.clickAndWaitForNewWindow();
            }

运行后,发现这个问题完全解决啦。
主要是用到 Rect 这个类,大家可以去了解一下这个类,会发现对我们测试在定位坐标的时候还是挺有用的,谢谢观阅!

你可能感兴趣的:(自动化学习)