Appium+Robotframework实现iOS应用的自动化测试-6:手势密码的解决方案

手势密码在很多应用都会运到,手势密码都要求至少连接4个点,但AppiumLibrary并没有提供对应的关键字,本人尝试连续使用Swipe关键字两次解决该问题,为什么要用两次呢?因为Swipe的参数只是起点和终点,如果直接给出手势密码的起点和重点,则会忽略中间的点,连续使用两次Swipe关键字在Android中偶尔可以成功,但在iOS中则没有一次成功过,为了彻底解决该问题,本人仔细看了Appium的文档,终于所有发现,请看来自于Appium的官方网站的如下截图:

从中我得知手势密码的问题一定可以解决。

Robotframework基于Python,所以也只安装了Appium的Python客户端。

由于AppiumLibrary没有提供手势密码关键字,那就自己写一个Library。但是该尝试失败了,主要是由于Appium执行中需要很多上下文参数,而自己写的Library如何与AppiumLibrary交互是个问题,也许可以解决,但可能会比较麻烦。

转变下观念,干脆曲线救国吧。

既然安装了AppiumLibrary,并且它是开源的,直接去修改其源代码不就搞掂了吗?

于是,去到AppiumLibrary安装的文件夹,默认会安装到/Library/Python/2.7/site-packages/AppiumLibrary(Android的我用的是Windows 7进行测试,默认安装路径为:C:\Python27\Lib\site-packages\AppiumLibrary\keywords),再到keywords目录中找到_touch.py文件,就是它了。

给这个文件的类_TouchKeywords加上一个方法gesture,具体代码如下:

[python] view plaincopyprint?

  1. def gesture(self, platform):
  2. """ Gesture the element """
  3. driver = self._current_application()
  4. action = TouchAction(driver)
  5. if platform == "iOS":
  6. action.press(x=100, y=500).wait(ms=500).move_to(x=600, y=0). \
  7. wait(ms=500).move_to(x=0, y=500).wait(ms=500).release()
  8. else:
  9. action.press(x=50, y=100).wait(ms=500).move_to(x=150, y=0). \
  10. wait(ms=500).move_to(x=0, y=100).wait(ms=500).release()
  11. action.perform()

该方法的参数platform用于传入平台,取值为iOS或者Android,这里有两个关键的知识点:

1.press方法中的坐标为绝对坐标,move_to方法中的坐标都是相对坐标,具体来说第一个move_to中的坐标相对于press方法中的坐标,第二个move_to方法中的坐标相对于第一个move_to方法中的坐标。

2.wait是必须的:开始我没有用wait,结果效果是划动太快,直接从第一个点到了最后一个店,掠过了中间的点,加上wait之后就正常了。这里ms表示为毫秒,ms=500就是等待500毫秒。

使用的话很简单:在iOS中为:Gesture    iOS;在Android中为:Gesture    Android

可能有些人会问为什么把坐标点写死了,不做为参数传递进来呢?

其实我一开始也是把坐标作为参数,共用了三组坐标分别表示起点,中间的点和终点坐标,但执行时总是报错,也一直找不到原因,后来想到其实手势密码是不变的,并不需要改变,干脆写成硬编码,如果坐标变化了,那就直接改这个文件即可,反正Python是解释型的语言,用到的时候会自动编译,也省去了编译的麻烦,也是很方便的。

在iOS和Android中都测试通过。

本文中的两个问题:

1.如何写一个Library来提供手势密码

2.如何把坐标作为参数传递进来

也请朋友分享下你们的解决方案,欢迎互动讨论。

时间: 2024-12-17 09:56:02

Appium+Robotframework实现iOS应用的自动化测试-6:手势密码的解决方案的相关文章

Appium+Robotframework实现iOS应用的自动化测试-5:一个简单的例子

万事具备,只欠编码! 下面看一个简单的示例,这个示例验证常见的登录功能.这个例子的应用是我所在的公司正在研发的,还没有正式上线,就不提供下载路径了.登录功能是很多应用都用的,这个大家都知道是怎样的功能. 首先请看resource.txt文件的代码: *** Settings *** Library AppiumLibrary *** Variables *** ${REMOTE_URL} http://192.168.1.6:4723/wd/hub ${PLATFORM_NAME} iOS ${

Appium+Robotframework实现iOS应用的自动化测试-4:OS X中安装和启动RIDE

有两种方式进行Appium测试: 1. 远程方式进行Appium测试:在Windows系统中启动RIDE并运行测试,这种方式的好处是方便,简单,但在一开始可能因为配置的问题测试跑不起来: 2.本地方式进行Appium测试:就是直接在OS X中启动RIDE并运行测试,这种方式的好处是直接,能够很直接的得到测试结果,但不是很方便,毕竟大家平时还是主要使用Windows操作系统. 不管哪种方式,都可以参考之前的文章Appium+Robotframework实现Android应用的自动化测试-4:App

Appium+Robotframework实现iOS应用的自动化测试-1:Appium在OS X中的安装

之前的系列文章介绍了Appium以及结合RobotFramework对Android应用如何进行测试. 从今天开始,我开始介绍Appium+RobotFramework如何测试iOS应用. 测试iOS应用相比测试Android应用要稍微麻烦些,主要是Appium一定要在OS X中运行才能跑测试,所以前提条件是需要搭建OS X的环境. 因为没有苹果电脑,所以我的方案是用虚拟机安装好OS X,具体如何安装大家可以在网上查找相关的资料,不过请注意最低需要OS X 10.7,推荐 10.8和10.9,我

Appium+Robotframework实现iOS应用的自动化测试-2:OS X中启动Appium

安装好了之后,在应用程序中找到Appium,点击其图标,如果一切正常,接着会出现一个Appium启动后的界面窗口,如下图所示. 1.1 iOS Settings 点击顶部的苹果图标,弹出iOS Settings窗口,如下图所示. 在该窗口可以对将要进行测试的iOS应用进行设置,因为接下来我们写脚本来跑测试,所以可以统统不进行设置,保持其默认值即可.如果不在脚本中设置,则需要在这里设置下,不过大部分保持默认值即可,需要进行设置主要有3个: 1.App Path:点击Choose按钮后会弹出选择iO

Appium+Robotframework实现iOS应用的自动化测试-3:一个必不可少的工具介绍

有些读者可能有疑问,iOS的模拟器怎么启动呢?怎么定位界面中的控件呢? 下面我们就来进行介绍: 1.Inspector简介 Inspector从字面上看这个单词的意思是检查员,这里可理解为是一个检查器,那检查什么呢?实际上就是用来检查界面中的控件,可以用它来定位控件,当然它的功能还不仅仅是这个,还可以录制脚本呢. 2.启动Inspector 当Appium处于运行就绪状态中,点击OS X顶部的旋转中的Appium图标,此时会弹出一个下拉菜单,如下图所示. 点击最下方的Show Inspector

Appium+Robotframework实现Android应用的自动化测试-4:AppiumLibrary介绍和安装

Appium是个好东东,Android,iOS都支持,并且居然RobotFramework也支持Appium了,这就是本文要介绍的AppiumLibrary. 通过前面的文章Appium+Robotframework实现手机应用的自动化测试-1:Appium简介,大家知道可以使用多种语言来写Appium的测试脚本,但如果从编写效率和学习曲线上来说,当然是用如RobotFramework的关键字的方式最为简单,所以AppiumLibrary就出现了,从Appium官网可知最新的版本是1.2.5,在

Appium+Robotframework实现手机应用的自动化测试-2:安装条件

需要建立设定的移动平台用于运行测试.请看以下的平台要求: 如果你想通过npm install运行Appium,对Appium有所贡献(因为它是开源的哦),需要node.js和npm 0.10或更高版本(使用 n 或 brew install node 安装Node.js,确保没有使用sudo来安装Node或者Appium,否则就会遇到麻烦).建议使用最新的稳定版本. 可以使用appium-doctor来检查是否所有的Appium依赖项都没有问题,运行 appium-doctor并提供参数 --i

Appium+Robotframework实现Android应用的自动化测试-7:模拟器频繁挂掉的解决方案

如果测试用例比较多,则当持续运行多个测试用例后,经常会出现模拟器崩溃或者Appium无法连接到该模拟器的情况出现. 经过分析,本人认为这应该是模拟器或者Appium的缺陷造成的,目前并没有直接的解决方案. 不过可以曲线救国,我的解决方案是:在开始测试时启动模拟器,在测试结束后关闭模拟器,这样虽然需要更多的时间,但这个问题确实不再出现了,时间有的是,可以让其在夜间自动启动执行就可以了. 在Settings中加入Process库,这个库是Robotframework自带的,写明即可. *** Set

Appium+Robotframework实现手机应用的自动化测试-1:Appium简介

使用Appium已经有一段时间了,我是结合之前用了很久的Robotframework来写Appium的自动化脚本,对Android和iOS的原生应用都已经实现了自动化测试,现把自己的一些经验和心得分享出来,由于本人水平有限,难免有不足和错误之处,欢迎读者指正. 以下的介绍翻译自Appium官网,我想这才能最接近Appium创建者的本意吧. Appium是一个开源,跨平台的自动化测试工具,它支持原生的,混合的和移动web App,可以在iOS,Androidhe和FireFoxOS的模拟器以及它们