Appium之主要的元素定位疑点难点

发表于:2018-1-29 10:32

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

 作者:keitwo    来源:简书

  前言
  测试APP时,有时候会遇到上下左右滑动的界面、遇到native 和 webview 切换的界面、弹框界面、元素坐标定位等等情况。下面将分别对这几个难点做主要解析:
  一、滑动界面的元素定位
  1.查看APPIUM API源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快。默认为None可不填,一般设置500-1000毫秒比较合适。
  swipe(self, start_x, start_y, end_x, end_y, duration=None)
  Swipe from one point to another point, for an optional duration.
  从一个点滑动到另外一个点,duration是持续时间
  :Args:  - start_x - 开始滑动的x坐标
  - start_y - 开始滑动的y坐标
  - end_x - 结束点x坐标
  - end_y - 结束点y坐标
  - duration - 持续时间,单位毫秒
  :Usage:  driver.swipe(100, 100, 100, 400)
  2.手机从左上角开始为0,横着的是x轴,竖着的是y轴
  
  3.由于不同手机屏幕的分辨率不一样,所以同一个元素在不同手机上的坐标也是不一样的,滑动的时候坐标不能写死了。可以先获取屏幕的宽和高,再通过比例去计算
  
获取屏幕宽度和高度
  4.为了后续方便调用滑动封装函数,下面示例代码就把滑动进行封装
  >swipe函数参数说明:
  参数1:driver设备
  参数2:t是持续时间
  参数3:n滑动次数
  
滑动封装函数
  二、native与webview的切换
  现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了。
  1.认识识webview
  >用uiautomatorviewer定位工具查看app页面,发现页面上有些区域无法定位到,如下图左边红色区域,只能定位到这个大框框,红色框里面的元素是无法识别的。
  >这时候可以查看元素属性,如右图它的class属性,上面写着WebView,那毫无疑问这种页面就是webview了。
  
webview页面
  2.、接触contexts
  >.context的中文翻译是上下文环境,学过selenium的同学,也可以理解为句柄(handle),其实是一回事,反正知道是两个不同的环境就行了。
  >.先获取页面是contexts环境,如下图红色区域,获取的是一个list列表:
  NATIVE_APP:这个就是native,也就是原生的
  WEBVIEW_com.xxxx :这个就是webview
  >.当看到打印出来有下图两个,就说明获取到webview的context了(当然也有的app有坑,可能明明有webview,却通过contexts获取不到,这种需要特殊处理了)
  
获取webview 的context
  3.换到webview
  >要想操作webview上的元素,第一步需要切换环境(跟selenium的切换iframe,切换handle思路是一样)
  >切换方法:switch_to.context(参数是webview的context)
  >由于第二步已经获取到contexts是一个list对象,取这个list的第二个参数就行,也就是contexts[1]
  
换到webview页面

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号