Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战

系统 1809 0

简介

在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现。MultiAction是多点触控的类,可以模拟用户多点操作。主要包含加载add()和执行perform()两个方法.

问题思考

在使用地图 App中,我们经常需要对界面进行缩放操作来更加便利的查看位置。那么在Appium中怎样去模拟这类操作呢?

MultiAction

MultiAction 是多点触控的类,可以模拟用户多点操作。主要包含  add()  和  perform()   两个方法, MultiAction可以结合前面所学的  ActionTouch 可以模拟出用户的多个手指滑动的操作效果; MultiAction一般和TouchAction结合使用,故需要导入以下模块:

            
              from
            
            
               appium.webdriver.common.multi_action import MultiAction


            
            
              from
            
             appium.webdriver.common.touch_action import TouchAction
          

加载:

方法 add(self, *touch_actions)将TouchAction对象添加到MultiAction中,稍后再执行。

参数:
  • touch_actions - 一个或多个TouchAction对象,描述一个手指要执行的动作链
用法
            a1 =
            
               TouchAction(driver)

a1.press(el1).move_to(el2).release()

 

a2 
            
            =
            
               TouchAction(driver)

a2.press(el2).move_to(el1).release()

 

MultiAction(driver).add(a1, a2)
            
          

执行

perform(self) 执行存储在对象中的操作。

用法
            a1 =
            
               TouchAction(driver)

a1.press(el1).move_to(el2).release()

 

a2 
            
            =
            
               TouchAction(driver)

a2.press(el2).move_to(el1).release()

 

MultiAction(driver).add(a1, a2).perform()
            
          

Ps:是不是有点类似Python里面的多线程和多进程的使用。

多点触控操作实践 ——地图App缩放

测试场景

安装启动百度地图 Android app 进入地图后分别进行放大缩小操作

测试环境

1.宏哥的系统环境是Windows 10版本 64位系统

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第1张图片

 

2.宏哥的dk版本:"1.8.0_181"

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第2张图片

3.宏哥的appium版本:1.4.16 

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第3张图片

4.selenium:3.141.0

安装selenium:

输入指令pip install selenium

验证安装成功:pip show selenium

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第4张图片

5.测试设备:Android 5.1.1 (不能低于5.0版本)

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第5张图片

6.Python:3.7.2

命令:python -V  ,回车即可。

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第6张图片

7.百度地图 Android版 V10.6.5

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第7张图片

滑动原理图解

  Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第8张图片

放大(Zoom):则手指分别从B>A,C>D同时向外移动放大页面

缩小(pinch):则手指分别从A>B,D>C同时向中间移动缩小页面

想法与思路

  • 安装启动百度地图APP
  • 启动后代码实现点击“同意”,然后接着点击“进入地图”
  • 进入地图由于最近刚过完七夕,有个抢红包的活动,将其关闭
  • 执行缩小函数3次,将地图缩小三次;紧接着执行放大函数,将地图放大三次。

代码实现

(1)安装启动百度地图

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第9张图片

(2)点击“同意”,然后接着点击“进入地图

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第10张图片

(3)进入地图由于最近刚过完七夕,有个抢红包的活动,将其关闭

活动关闭定位

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第11张图片

代码实现

  Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第12张图片

(4)执行缩小函数3次,将地图缩小三次;紧接着执行放大函数,将地图放大三次

  Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第13张图片

代码运行结果

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第14张图片

运行代码夜神模拟器自动化操作

参考代码

            
               1
            
             # coding=utf-
            
              8
            
            
               2
            
             # 
            
              1
            
            .先设置编码,utf-
            
              8可支持中英文,如上,一般放在第一行

            
            
               3
            
            
               4
            
             # 
            
              2
            
            
              .注释:包括记录创建时间,创建人,项目名称。

            
            
               5
            
            
              '''

            
            
               6
            
             Created on 
            
              2019
            
            -
            
              8
            
            -
            
              08
            
            
               7
            
             @author: 北京-宏哥   QQ交流群:
            
              707699217
            
            
               8
            
             Project:学习和使用appium自动化测试-
            
              多点触控操作

            
            
               9
            
            
              '''

            
            
              10
            
             # 
            
              3
            
            
              .导入模块

            
            
              11
            
            
              from
            
            
               appium import webdriver

            
            
              12
            
            
              from
            
            
               selenium.common.exceptions import NoSuchElementException

            
            
              13
            
            
              from
            
            
               appium.webdriver.common.touch_action import TouchAction

            
            
              14
            
            
              from
            
            
               appium.webdriver.common.multi_action import MultiAction

            
            
              15
            
            
              16
            
             desired_caps=
            
              {}

            
            
              17
            
             desired_caps[
            
              '
            
            
              platformName
            
            
              '
            
            ]=
            
              '
            
            
              Android
            
            
              '
            
            
              18
            
             desired_caps[
            
              '
            
            
              deviceName
            
            
              '
            
            ]=
            
              '
            
            
              127.0.0.1:62001
            
            
              '
            
            
              19
            
             desired_caps[
            
              '
            
            
              platforVersion
            
            
              '
            
            ]=
            
              '
            
            
              5.1.1
            
            
              '
            
            
              20
            
            
              21
            
             desired_caps[
            
              '
            
            
              app
            
            
              '
            
            ]=r
            
              '
            
            
              C:\Users\DELL\Downloads\base.apk
            
            
              '
            
            
              22
            
             desired_caps[
            
              '
            
            
              appPackage
            
            
              '
            
            ]=
            
              '
            
            
              com.baidu.BaiduMap
            
            
              '
            
            
              23
            
             desired_caps[
            
              '
            
            
              appActivity
            
            
              '
            
            ]=
            
              '
            
            
              com.baidu.baidumaps.WelcomeScreen
            
            
              '
            
            
              24
            
            
              25
            
             driver=webdriver.Remote(
            
              '
            
            
              http://localhost:4723/wd/hub
            
            
              '
            
            
              ,desired_caps)

            
            
              26
            
             driver.implicitly_wait(
            
              5
            
            
              )

            
            
              27
            
            
              28
            
             x=driver.get_window_size()[
            
              '
            
            
              width
            
            
              '
            
            
              ]

            
            
              29
            
             y=driver.get_window_size()[
            
              '
            
            
              height
            
            
              '
            
            
              ]

            
            
              30
            
            
              #点击同意

            
            
              31
            
             driver.find_element_by_id(
            
              '
            
            
              com.baidu.BaiduMap:id/ok_btn
            
            
              '
            
            
              ).click()

            
            
              32
            
            
              #点击进入地图

            
            
              33
            
             driver.find_element_by_id(
            
              '
            
            
              com.baidu.BaiduMap:id/btn_enter_map
            
            
              '
            
            
              ).click()

            
            
              34
            
            
              35
            
            
              #检测是否有活动页面弹窗,如果有就点击关闭(宏哥做的时候有个领红包的活动页面)

            
            
              36
            
            
              try
            
            
              :

            
            
              37
            
                 closeBtn=driver.find_element_by_id(
            
              '
            
            
              com.baidu.BaiduMap:id/guide_close
            
            
              '
            
            
              )

            
            
              38
            
            
              except NoSuchElementException:

            
            
              39
            
            
                  pass

            
            
              40
            
            
              else
            
            
              :

            
            
              41
            
            
                  closeBtn.click()

            
            
              42
            
            
              43
            
            
              def pinch():

            
            
              44
            
                 action1=
            
              TouchAction(driver)

            
            
              45
            
                 action2=
            
              TouchAction(driver)

            
            
              46
            
                 pinch_action=
            
              MultiAction(driver)

            
            
              47
            
            
              48
            
                 action1.press(x=x*
            
              0.2
            
            ,y=y*
            
              0.2
            
            ).wait(
            
              1000
            
            ).move_to(x=x*
            
              0.4
            
            ,y=y*
            
              0.4
            
            ).wait(
            
              1000
            
            
              ).release()

            
            
              49
            
                 action2.press(x=x*
            
              0.8
            
            ,y=y*
            
              0.8
            
            ).wait(
            
              1000
            
            ).move_to(x=x*
            
              0.6
            
            ,y=y*
            
              0.6
            
            ).wait(
            
              1000
            
            
              ).release()

            
            
              50
            
            
              51
            
            
                  pinch_action.add(action1,action2)

            
            
              52
            
                 print(
            
              '
            
            
              start pinch...
            
            
              '
            
            
              )

            
            
              53
            
            
                  pinch_action.perform()

            
            
              54
            
            
              55
            
            
              def zoom():

            
            
              56
            
                 action1 =
            
               TouchAction(driver)

            
            
              57
            
                 action2 =
            
               TouchAction(driver)

            
            
              58
            
                 zoom_action =
            
               MultiAction(driver)

            
            
              59
            
            
              60
            
                 action1.press(x=x * 
            
              0.4
            
            , y=y * 
            
              0.4
            
            ).wait(
            
              1000
            
            ).move_to(x=x * 
            
              0.2
            
            , y=y * 
            
              0.2
            
            ).wait(
            
              1000
            
            
              ).release()

            
            
              61
            
                 action2.press(x=x * 
            
              0.6
            
            , y=y * 
            
              0.6
            
            ).wait(
            
              1000
            
            ).move_to(x=x * 
            
              0.8
            
            , y=y * 
            
              0.8
            
            ).wait(
            
              1000
            
            
              ).release()

            
            
              62
            
            
              63
            
            
                  zoom_action.add(action1,action2)

            
            
              64
            
                 print(
            
              "
            
            
              start zoom...
            
            
              "
            
            
              )

            
            
              65
            
            
                  zoom_action.perform()

            
            
              66
            
            
              67
            
            
              if
            
             __name__ == 
            
              '
            
            
              __main__
            
            
              '
            
            
              :

            
            
              68
            
            
              for
            
             i 
            
              in
            
             range(
            
              3
            
            
              ):

            
            
              69
            
            
                      pinch()

            
            
              70
            
            
              71
            
            
              for
            
             i 
            
              in
            
             range(
            
              3
            
            
              ):

            
            
              72
            
                     zoom()
          

合格开发的参考代码

            # coding=utf-
            
              8
            
            
              
# 
            
            
              1
            
            .先设置编码,utf-
            
              8可支持中英文,如上,一般放在第一行

# 
            
            
              2
            
            
              .注释:包括记录创建时间,创建人,项目名称。

            
            
              '''

            
            Created on 
            
              2019
            
            -
            
              8
            
            -
            
              08
            
            
              
@author: 北京
            
            -宏哥   QQ交流群:
            
              707699217
            
            
              
Project:学习和使用appium自动化测试
            
            -
            
              多点触控操作

            
            
              '''

            
            # 
            
              3
            
            
              .导入模块

            
            
              from
            
            
               appium import webdriver

            
            
              from
            
            
               selenium.common.exceptions import NoSuchElementException

            
            
              from
            
            
               appium.webdriver.common.touch_action import TouchAction

            
            
              from
            
            
               appium.webdriver.common.multi_action import MultiAction

#初始化
desired_caps
            
            =
            
              {}
desired_caps[
            
            
              '
            
            
              platformName
            
            
              '
            
            ]=
            
              '
            
            
              Android
            
            
              '
            
            
              
desired_caps[
            
            
              '
            
            
              deviceName
            
            
              '
            
            ]=
            
              '
            
            
              127.0.0.1:62001
            
            
              '
            
            
              
desired_caps[
            
            
              '
            
            
              platforVersion
            
            
              '
            
            ]=
            
              '
            
            
              5.1.1
            
            
              '
            
            
              

desired_caps[
            
            
              '
            
            
              app
            
            
              '
            
            ]=r
            
              '
            
            
              C:\Users\DELL\Downloads\base.apk
            
            
              '
            
            
              
desired_caps[
            
            
              '
            
            
              appPackage
            
            
              '
            
            ]=
            
              '
            
            
              com.baidu.BaiduMap
            
            
              '
            
            
              
desired_caps[
            
            
              '
            
            
              appActivity
            
            
              '
            
            ]=
            
              '
            
            
              com.baidu.baidumaps.WelcomeScreen
            
            
              '
            
            
              

driver
            
            =webdriver.Remote(
            
              '
            
            
              http://localhost:4723/wd/hub
            
            
              '
            
            
              ,desired_caps)
driver.implicitly_wait(
            
            
              5
            
            
              )

x
            
            =driver.get_window_size()[
            
              '
            
            
              width
            
            
              '
            
            
              ]
y
            
            =driver.get_window_size()[
            
              '
            
            
              height
            
            
              '
            
            
              ]
#点击同意
driver.find_element_by_id(
            
            
              '
            
            
              com.baidu.BaiduMap:id/ok_btn
            
            
              '
            
            
              ).click()
#点击进入地图
driver.find_element_by_id(
            
            
              '
            
            
              com.baidu.BaiduMap:id/btn_enter_map
            
            
              '
            
            
              ).click()

#检测是否有活动页面弹窗,如果有就点击关闭(宏哥做的时候有个领红包的活动页面)

            
            
              try
            
            
              :
    closeBtn
            
            =driver.find_element_by_id(
            
              '
            
            
              com.baidu.BaiduMap:id/guide_close
            
            
              '
            
            
              )
except NoSuchElementException:
    pass

            
            
              else
            
            
              :
    closeBtn.click()

#定义缩小函数
def pinch():
    action1
            
            =
            
              TouchAction(driver) #第一个手势
    action2
            
            =
            
              TouchAction(driver) #第二个手势
    pinch_action
            
            =
            
              MultiAction(driver) #缩小手势

    action1.press(x
            
            =x*
            
              0.2
            
            ,y=y*
            
              0.2
            
            ).wait(
            
              1000
            
            ).move_to(x=x*
            
              0.4
            
            ,y=y*
            
              0.4
            
            ).wait(
            
              1000
            
            
              ).release()
    action2.press(x
            
            =x*
            
              0.8
            
            ,y=y*
            
              0.8
            
            ).wait(
            
              1000
            
            ).move_to(x=x*
            
              0.6
            
            ,y=y*
            
              0.6
            
            ).wait(
            
              1000
            
            
              ).release()

    pinch_action.add(action1,action2) #加载
    print(
            
            
              '
            
            
              start pinch...
            
            
              '
            
            
              )
    pinch_action.perform() #执行

#定义放大函数
def zoom():
    action1 
            
            =
            
               TouchAction(driver) #第一个手势
    action2 
            
            =
            
               TouchAction(driver) #第二个手势
    zoom_action 
            
            =
            
               MultiAction(driver) #放大手势

    action1.press(x
            
            =x * 
            
              0.4
            
            , y=y * 
            
              0.4
            
            ).wait(
            
              1000
            
            ).move_to(x=x * 
            
              0.2
            
            , y=y * 
            
              0.2
            
            ).wait(
            
              1000
            
            
              ).release()
    action2.press(x
            
            =x * 
            
              0.6
            
            , y=y * 
            
              0.6
            
            ).wait(
            
              1000
            
            ).move_to(x=x * 
            
              0.8
            
            , y=y * 
            
              0.8
            
            ).wait(
            
              1000
            
            
              ).release()

    zoom_action.add(action1,action2)  #加载
    print(
            
            
              "
            
            
              start zoom...
            
            
              "
            
            
              )
    zoom_action.perform()  #执行

#主函数调用子函数

#__name
            
            =
            
              ’__main__’表示执行当前py文件;否则当前文件属于调用模块

            
            
              if
            
             __name__ == 
            
              '
            
            
              __main__
            
            
              '
            
            
              :
    
            
            
              for
            
             i 
            
              in
            
             range(
            
              3
            
            ):     #执行缩小函数3次,range(
            
              3
            
            )代表执行0,
            
              1
            
            
              ,2共3次
        pinch()

    
            
            
              for
            
             i 
            
              in
            
             range(
            
              3
            
            ):     #执行放大函数3次,range(
            
              3
            
            )代表执行0,
            
              1
            
            
              ,2共3次
        zoom()
            
          

小结

   好了,时间不早了,关于多点触控宏哥就简单的介绍到这里,大家晚安!!!

您的肯定就是我进步的动力。 如果你感觉还不错,就请鼓励一下吧!记得点波  推荐  哦!!!(点击右边的小球即可! :))
Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第15张图片

       个人公众号                                                              微信群  (微信群已满100,可以加宏哥的微信拉你进群,请备注:进群)          

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第16张图片                                                                   Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)_第17张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论