关闭

Android自动化测试在多种屏幕下的注意事项

发表于:2012-10-26 10:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  由于所有的坐标位置都是以像素计算的,没有考虑到缩放的情形,所以在不同密度的屏幕上就会发生点击错位的情况。

  为了修复这个问题,解决方案就是获取当前屏幕的密度和对dpi计算大小的控件的缩放比例,然后恢复原始的比例再发送点击消息:

1:  // 需要传递要点击的控件View的实例
2:  public void clickOnScreen(View view, boolean longClick, int time) {
3:      if(view == null)
4:          Assert.assertTrue("View is null and can therefore not be clicked!", false);
5:      int[] xy = new int[2];
6:
7:  // 获取控件在屏幕上的位置 – 如果是dpi计算大小的控件,这个位置是缩放后的位置
8:      view.getLocationOnScreen(xy);
9:
10:  // 获取控件的大小,并且计算出点击的控件中点位置
11:      final int top = view.getTop();
12:      final int viewWidth = view.getWidth();
13:      final int viewHeight = view.getHeight();
14:      float x = xy[0] + (viewWidth / 2.0f);
15:      float y = xy[1] + (viewHeight / 2.0f);
16:
17:  // 计算缩放比例,将要点击的x, y坐标恢复到缩放前的情况。
18:      Activity activity = activityUtils.getCurrentActivity();
19:      DisplayMetrics rdm = activity.getResources().getDisplayMetrics();
20:      DisplayMetrics wdm = new DisplayMetrics();
21:      activity.getWindowManager().getDefaultDisplay().getMetrics(wdm);
22:      x *= wdm.scaledDensity / rdm.scaledDensity;
23:      y *= wdm.scaledDensity / rdm.scaledDensity;
24:
25:  // 最后再发送Android点击消息
26:      if (longClick)
27:          clickLongOnScreen(x, y, time);
28:      else
29:          clickOnScreen(x, y);
30:  }

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号