51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3871|回复: 4
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    奋斗
    2023-3-4 10:30
  • 签到天数: 660 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2015-8-19 09:15:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    手势密码在很多应用都会运到,手势密码都要求至少连接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,具体代码如下:

    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.如何把坐标作为参数传递进来

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


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏2
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-8-23 15:39
  • 签到天数: 44 天

    连续签到: 1 天

    [LV.5]测试团长

    2#
    发表于 2015-11-23 14:59:03 | 只看该作者
    学习了,谢谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-1-20 09:04
  • 签到天数: 6 天

    连续签到: 3 天

    [LV.2]测试排长

    3#
    发表于 2016-1-7 08:42:12 | 只看该作者
    大神,我有问题 ,我想请教下你哈,能方便加我下QQ嘛  489679058
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-1-20 09:04
  • 签到天数: 6 天

    连续签到: 3 天

    [LV.2]测试排长

    4#
    发表于 2016-1-7 08:43:11 | 只看该作者
    大神 有问题请教你,能方便加我下qq嘛 489679058;论坛我加不了你为好友
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2016-1-21 14:30:25 | 只看该作者
    "自己写的Library如何与AppiumLibrary交互是个问题"   我现在就需要自己写个lib,调用AppiumLibrary中的方法,但是各种不通,有没有人研究这个,给个方向上的指点?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-26 15:34 , Processed in 0.070572 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表