UI自动化测试,首要考虑的是我们所选用的测试工具或框架对测试程序的支持如何。而这个支持,则主要是通过对控件的识别和操作来体现的;但是,不管一个测试工具或者框架对测试程序的支持程序如何,它执行测试程序时最终都是以屏幕的绝对坐标来定位执行的,尽管我们平时都能听到很多人在说,尽量避免用坐标。
尽量避免用坐标和最终通过坐标来识别,这个看起来有点冲突,但是却又不会冲突,是不是有点类似太极的感觉了。
坐标,通常分为两类:绝对坐标和相对坐标。
1. 通常我们所说的坐标都是基于屏幕左上角的绝对坐标。测试工具和我们人的操作最终也都是通过这个坐标来进行测试程序操作的,只不过有的我们知道,有的我们不知道,仅此而已。
通俗的讲:我们人手动来点击屏幕的时候,只是在点击的位置发送一个屏幕点击事件,这个屏幕点击事件通过windows库定位到当前活动的窗体,再对这个窗体的一个具体位置传递点击事件,从而获得响应。这个过程,在我们的感官和需求中,我们只需要直接对活动窗体的进行操作的结果,至于定位,who care?
自动化测试本质上就是来模拟人的行为的操作,所以实现过程大致类似。它首先通过我们在代码中编写的id、text、index、class等来定位到我们要操作的控件,然后再读取这个控件的x、y属性来发送点击事件。但是,在使用层面,我们只看到了通过id来点击,至于其他获取坐标这些,leave them alone。
2. 说到相对坐标,这个就稍微有点复杂。目前已知的相对方式有相对左上、左下、右上、右下、中上、中下、居中;并且根据是否随着父窗口变化而变化,又可分类为:不扩展、同步扩展(和父窗口一起放大/缩小)、按比例扩展(父窗口扩大3倍,该对象也扩大3倍)。
举个例子来说,屏幕上有一个记事本窗口“记事本.txt”,它的坐标绝对坐标是400,600,这个记事本的开始菜单栏,它的坐标是450,700。如果假设记事本窗口的坐标为,那么这个开始菜单栏就可以描述为:相对于窗口"记事本.txt"的坐标为50,100,绝对坐标就可以表示为;再假设菜单栏中的编辑按钮绝对坐标为500,700,那么它就可以描述为:相对于菜单栏的坐标为50,0,绝对坐标就可以表示为。这样的话,这个窗口上的所有坐标就都可以用一个坐标来维护了,如果窗口位置发生变化,我们也只需要修改一个最上层父窗口的坐标就可以动态适配所有按钮的坐标了。
上面就是相对的解释。其实说白了,所谓相对坐标,就是一种优化的坐标计算方式,可以让我们用尽量少的改动去适应更多的变化。
至于它的相对方式和扩展方式,则就只是其中的一些计算方式,在这里就不一一举例了。
那么,了解了上面的这些,我们可以做些什么呢?
平时在开展自动化测试时,总是会遇到一些不能识别的自定义控件,尤其是app类型程序。那么这时候我们就可以通过上面的坐标适配来完善解决一下。
下面,我来简单说一个基于坐标的控件识别的简单实现思路:
1. 实现思想:通过虚拟截图的方式来提供一个快速定位虚拟控件的坐标系,并对齐赋予一些额外的识别参数;嵌入到其他测试工具中直接使用。
2. 首先,通过调用windows api或者其他截图程序,对测试程序的全窗口截一个半透明的截图(可以按比例缩放);
然后,获取测试程序的坐标,并监控这个截图上的拖拽事件来计算控件的坐标系,并写入xml文件;
其次,将这个xml文件导入到测试工具的对象库中进行使用。这里需要注意,有的测试工具不支持外部自定义对象,所以需要做一些转换。
3. 代码:以后再传吧。这块东西最好做成可视化的,比较易于操作
最新内容请见作者的GitHub页:http://qaseven.github.io/
自动化测试之控件点击
时间: 2024-11-26 17:32:43
自动化测试之控件点击的相关文章
android控件点击变背景
问题描述 android控件点击变背景 怎么在点击一个控件后改变背景呢?我说的是在不点击其他控件的时候保持背景的改变,不是点击的瞬间改变,再强调一句:不是点击的瞬间改变 解决方案 Android控件背景点击改变 解决方案二: 如果没理解错你的意思的话, 事件监听+延迟 解决方案三: 监听click事件,然后调用postDelayed 解决方案四: 用选择器selector呀,设置一下就行了 解决方案五: 开启线程延迟执行切换背景 解决方案六: 表达不清楚~~~~~
android-关于百度地图MapView控件点击事件的
问题描述 关于百度地图MapView控件点击事件的 我是新人,求各位帮忙.最近在做百度二次开发!用Android 想实现当点击地图也就是点击MapView上的某一点的时候给地图添加一个覆盖物,并且获取到点击地点的经纬度!该用什么方法实现,百度官网提供的接口有一个 地图单击事件监听接口: OnMapClickListener listener = new OnMapClickListener() { /** * 地图单击事件回调函数 * @param point 点击的地理坐标 / public
gridview控件点击“处理/取消”显示索引超出范围,各位大神帮忙看看,感激不尽!!!
问题描述 gridview控件点击"处理/取消"显示索引超出范围,各位大神帮忙看看,感激不尽!!! 我的数据库表qianfei 的id字段为自编,对欠费审核时,点击"处理/取消"显示索引超出范围,各位大神帮忙看看,感激不尽!!! cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using Sy
图片-Android Button控件点击区域怎么设置为圆形
问题描述 Android Button控件点击区域怎么设置为圆形 如题,怎么将默认的方形Button响应区域设置为圆形响应区域,因为图片是圆形的 解决方案 如图:一个自定义Button类,用它替代xml里的Button. 解决方案二: 用的imagebutton?图片用png格式,背景设为透明 解决方案三: 背景也可用shape设置圆形 解决方案四: 使用shape属性来写吧.http://www.cnblogs.com/cyanfei/archive/2012/07/27/2612023.ht
listview里的item里的控件点击改变另一个控件的值
问题描述 listview里的item里的控件点击改变另一个控件的值 这是一个pulltorefreshListView的列表 ,现在想实现点击 +- 然后中间的textView会改变的问题,但是我在做的过程中,只是内部可以改变,界面上并不会出现变化,求各位大神解决一下! 解决方案 改变之后,需要刷新adapter的 解决方案二: 我已经刷新过的 但是没有用呀 解决方案三: 楼上正解, adapter.notifyDataSetChanged(); 解决方案四: 要是我做 就写一个监听器 监听按
关于一个控件点击事件的小问题的实现方式
问题描述 关于一个控件点击事件的小问题的实现方式 有四个颜色为白色textview控件 当我点击第一个textview时,第一个textview颜色变成黄色,当我点击第二个textview时,第二个textview颜色变成黄色,同时第一个textview颜色变成白色,这个要怎么实现,求详细代码(要考虑代码的复用性,假如我的textview为50个呢) 解决方案 有个观察者模式与发布与订阅模式可以帮助你搞定 解决方案二: CMonthColCtrl控件的一个小问题
GridView控件点击删除按钮,删除成功后重新绑定数据,可是数据未能及时更新,需得重新打开页面才能更新
问题描述 GridView控件点击删除按钮,删除成功后重新绑定数据,可是数据未能及时更新,需得重新打开页面才能更新,急求解答!!!! 解决方案 解决方案二:没人呢?解决方案三:不可能的,看下你代码解决方案四:确定是在你删除以后重新绑定的?解决方案五:在删除成功后,要重新绑定.解决方案六:你打开页面有个查询绑定的方法,在删除成功后再次调用这个方法就行最好代码放上来...解决方案七:DataBind()解决方案八:参考:解决方案九: 解决方案十:这个要看一下你写的代码...重新绑定了就不需要刷新..
android 安卓-安卓控件点击事件,适配器中的listview
问题描述 安卓控件点击事件,适配器中的listview listview里面每一个item加入一个popwindow 固定位置,如何实现随着listview的滑动而滑动 解决方案 学习笔记之安卓的显示控件ListView 解决方案二: 在item里加入popwindow?能给我看看UI吗?
!小的在模版页中使用menu控件,点击菜单时选中样式不起作用。
问题描述 在模版页中使用menu控件,点击菜单时选中样式不起作用.各个页面都是基于这个模版生成的,现在是想点击上面的菜单有选中效果.在selectedstyle那里设定了属性,但每次点击时都不起作用,猜想是由于刷新的缘故???请各位大虾帮忙哦~~ 解决方案 解决方案二:我晕,一转眼就第二页去了,那么多大虾帮帮忙拉解决方案三:还是没有高手回答~我没描述清?还是问题太简单了?