Appium+Robotframework实现iOS应用的自动化测试-6:手势密码的解决方案
2015-09-02 13:42
344 查看
转载地址:http://blog.csdn.net/wd168/article/details/47122933
手势密码在很多应用都会运到,手势密码都要求至少连接4个点,但AppiumLibrary并没有提供对应的关键字,本人尝试连续使用Swipe关键字两次解决该问题,为什么要用两次呢?因为Swipe的参数只是起点和终点,如果直接给出手势密码的起点和终点,则会忽略中间的点,连续使用两次Swipe关键字在Android中偶尔可以成功,但在iOS中则没有一次成功过,为了彻底解决该问题,本人仔细看了Appium的文档,终于所有发现,请看来自于Appium的官方网站的如下截图:
![](http://img.blog.csdn.net/20150729101940683)
从中我得知手势密码的问题一定可以解决。
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?
def gesture(self, platform):
""" Gesture the element """
driver = self._current_application()
action = TouchAction(driver)
if platform == "iOS":
action.press(x=100, y=500).wait(ms=500).move_to(x=600, y=0). \
wait(ms=500).move_to(x=0, y=500).wait(ms=500).release()
else:
action.press(x=50, y=100).wait(ms=500).move_to(x=150, y=0). \
wait(ms=500).move_to(x=0, y=100).wait(ms=500).release()
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.如何把坐标作为参数传递进来
也请朋友分享下你们的解决方案,欢迎互动讨论。
手势密码在很多应用都会运到,手势密码都要求至少连接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?
def gesture(self, platform):
""" Gesture the element """
driver = self._current_application()
action = TouchAction(driver)
if platform == "iOS":
action.press(x=100, y=500).wait(ms=500).move_to(x=600, y=0). \
wait(ms=500).move_to(x=0, y=500).wait(ms=500).release()
else:
action.press(x=50, y=100).wait(ms=500).move_to(x=150, y=0). \
wait(ms=500).move_to(x=0, y=100).wait(ms=500).release()
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.如何把坐标作为参数传递进来
也请朋友分享下你们的解决方案,欢迎互动讨论。
相关文章推荐
- Appium+Robotframework实现iOS应用的自动化测试-5:一个简单的例子
- Cocos2d-x----------------------------------ProgressTimer进度条
- iOS TableView实现上拉加载更多数据
- Appium+Robotframework实现iOS应用的自动化测试-4:OS X中安装和启动RIDE
- enumerateKeysAndObjectsUsingBlock 的用法
- MobileCrackme4
- Android关于Fragment长期置于后台返回重叠的问题
- php微信开发接入指南
- Appium+Robotframework实现iOS应用的自动化测试-3:一个必不可少的工具介绍
- Appium+Robotframework实现iOS应用的自动化测试-2:OS X中启动Appium
- Appium+Robotframework实现iOS应用的自动化测试-1:Appium在OS X中的安装
- android集成极光消息推送
- Android 混淆代码总结
- 微信关键词自动回复代码
- appium源码分析(九)-getText,setText
- js判断 pc端 移动端
- Appium 自动化用例设计(TESTNG 篇)
- swift基础教程——数组和字典
- Appium 自动化用例设计(Excel 配置篇)
- iOS scrollview实现图片放大和缩小的功能