UiAutomator中获取元素坐标

UiAutomator Viewer中获取坐标

  1.在Android-sdk下找到tools,点击进入tools,找到uiautomatorviewer.bat,点击运行,弹出viewer视图:

        

2.将窗口最大化,鼠标放置要获取元素坐标对象上,Viewer右上角会显示该对象的坐标,见下图(坐标必须将窗口放大,才能看到):


3.uiautomator代码中通过坐标进入相应页

// 通过坐标点击箩筐,进入箩筐

   public void AppInByCoordinate() {

      getUiDevice().click(408,1206);

   }  



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用uiautomator2提供的`UiDevice`类的`executeShellCommand()`方法,结合Linux命令`getevent`和`sendevent`来获取指定位置的颜色值。 具体实现步骤如下: 1. 首先需要获取到要获取颜色值的位置坐标,可以使用uiautomator2的`UiObject2`类的`getVisibleBounds()`方法来获取某个元素的可见区域的坐标范围。 2. 然后使用`executeShellCommand()`方法执行`getevent -t /dev/input/event1`命令,其`/dev/input/event1`是指触摸屏输入设备的文件路径。 3. 紧接着,发送一系列的`sendevent`命令,模拟手指在指定位置按下、移动、松开的操作,例如: ``` sendevent /dev/input/event1 3 57 180 sendevent /dev/input/event1 3 53 x sendevent /dev/input/event1 3 54 y sendevent /dev/input/event1 1 330 1 sendevent /dev/input/event1 0 0 0 sendevent /dev/input/event1 3 53 x1 sendevent /dev/input/event1 3 54 y1 sendevent /dev/input/event1 0 0 0 sendevent /dev/input/event1 1 330 0 sendevent /dev/input/event1 0 0 0 ``` 其,`x`和`y`是指要获取颜色值的位置坐标,`x1`和`y1`是指手指移动到的位置坐标。 4. 执行完上述命令后,再执行`cat /dev/input/event1`命令,即可读取到屏幕上点击位置的颜色值。 5. 最后可以将读取到的颜色值转换为对应的十六进制颜色值,例如: ``` String color = "7f0c0c"; int red = Integer.parseInt(color.substring(0, 2), 16); int green = Integer.parseInt(color.substring(2, 4), 16); int blue = Integer.parseInt(color.substring(4, 6), 16); int argb = Color.argb(255, red, green, blue); ``` 完整的代码示例: ```java public static int getColorAtCoordinates(UiDevice device, int x, int y) { String command = "getevent -t /dev/input/event1"; String[] touchCommands = new String[]{ String.format("sendevent /dev/input/event1 3 57 180"), String.format("sendevent /dev/input/event1 3 53 %d", x), String.format("sendevent /dev/input/event1 3 54 %d", y), String.format("sendevent /dev/input/event1 1 330 1"), String.format("sendevent /dev/input/event1 0 0 0"), String.format("sendevent /dev/input/event1 3 53 %d", x + 5), String.format("sendevent /dev/input/event1 3 54 %d", y + 5), String.format("sendevent /dev/input/event1 0 0 0"), String.format("sendevent /dev/input/event1 1 330 0"), String.format("sendevent /dev/input/event1 0 0 0") }; try { Process p = Runtime.getRuntime().exec(command); for (String c : touchCommands) { p.getOutputStream().write((c + "\n").getBytes()); } p.getOutputStream().flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = reader.readLine()) != null) { if (line.contains("ABS_MT_POSITION_X")) { int xPos = Integer.parseInt(line.split(" ")[2]); int yPos = Integer.parseInt(reader.readLine().split(" ")[2]); String colorLine = reader.readLine(); if (colorLine.contains("EV_ABS")) { int red = Integer.parseInt(colorLine.split(" ")[2].substring(0, 2), 16); int green = Integer.parseInt(colorLine.split(" ")[2].substring(2, 4), 16); int blue = Integer.parseInt(colorLine.split(" ")[2].substring(4, 6), 16); return Color.argb(255, red, green, blue); } } } p.waitFor(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } return Color.TRANSPARENT; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值