python+Appium自动化:MultiAction多点触控

MultiAction

MultiAction 是多点触控的类,常用于模拟用户多点操作。

主要包含这add()还有perform()两个方法,模拟多点触控,需要导入TouchAction还有MultiAction两个模块。

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对象,描述一个手指要执行的动作链

例子:

action1=TouchAction(driver)

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

action2=TouchAction(driver)

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

MultiAction(driver).add(action1, action2)

执行:

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

action1=TouchAction(driver)

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

action2=TouchAction(driver)

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

MultiAction(driver).add(action1, action2).perform()

场景:百度地图的缩放

代码:

# -*- coding: utf-8 -*-#
from appium import webdriver
import time
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction

desired_caps = {
               "platformName": "Android",
               "platformVersion": "5.1",
               "deviceName": "U4KF9HSK99999999",
               "appPackage": "com.baidu.BaiduMap",
               "appActivity": "com.baidu.baidumaps.MapsActivity",
               "unicodeKeyboard":True,
               "resetKeyboard":True,
               "noReset": True
                }
driver = webdriver.Remote("http://localhost:4723/wd/hub",desired_caps)
driver.implicitly_wait(5)
#获取窗口尺寸

size=driver.get_window_size()
print(size)
x=size[‘width‘]
y=size[‘height‘]
time.sleep(2)
#缩放
def pinch():
    action1=TouchAction(driver)
    action2=TouchAction(driver)
    mul_action=MultiAction(driver)
    action1.press(x=x*0.2,y=y*0.2).wait(1000).move_to(x=x*0.2,y=y*0.2).wait(1000).release()
    action2.press(x=x*0.8,y=y*0.8).wait(1000).move_to(x=-x*0.2,y=-y*0.2).wait(1000).release()
    #执行
    print("-----start pinch-----")
    mul_action.add(action1,action2)
    mul_action.perform()
#放大
def zoom():
    action1=TouchAction(driver)
    action2=TouchAction(driver)
    mul_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.2,y=y*0.2).wait(1000).release()
    #执行
    print("-----start zoom-----")
    mul_action.add(action1,action2)
    mul_action.perform()

if __name__=="__main__":

    for i in range(2):
        time.sleep(2)
        pinch()

    for i in range(2):
        time.sleep(2)
        zoom()
move_to是计算手机的偏移量,用负数控制滑动方向。

原文地址:https://www.cnblogs.com/bugbreak/p/12072128.html

时间: 2024-07-30 08:13:40

python+Appium自动化:MultiAction多点触控的相关文章

多点触控 地图缩放

使用地图App中,我们经常需要对界面进行缩放操作来更加便利的查看位置.那么在Appium中怎样去模拟这类操作呢? MultiAction MultiAction 是多点触控的类,可以模拟用户多点操作.主要包含 add() 和 perform() 两个方法, MultiAction可以结合前面所学的 ActionTouch可以模拟出用户的多个手指滑动的操作效果: from appium.webdriver.common.multi_action import MultiAction from ap

Android多点触控技术实战,自由地对图片进行缩放和移动

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的.因此本篇文章中,我们就来对这一功能进行完善,加入点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放. 如果你还没有看过 Android瀑布流照片墙实现,体验不规则排列的美感

android 多点触控

多点触控 1.多点触控从字面意思讲就是你用大于等于2根的手指触摸子啊手机屏幕上. Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下面列举MotionEvent的一些常用的方法: getPointerCount() 获得触屏的点数. getPointerId(int pointerIndex) 返回一个触摸点的标示,pointIndex是你第几个触控点的索引 getX() 获得触屏的X坐标值 getY() 获得触屏的Y坐标值 getAction()

Android实现图片多点触控自由伸缩

简介 作为Android开发者,我们经常需要自定义控件,比如下面我们说的实现图片的多点触控和伸缩释放,这也是由于用户已经有这样的常识了,那就是看见有图片的地方就可以点击查看大图,并且可以通过手指对图片进行伸缩和移动,如果应用没有实现这一点,那么对用户来说将会是很糟糕的体验,用户很"愤怒".所以作为Android开发者,我们的任务就是让用户"爽".哈哈哈....下面我们将通过自定义ImageView实现以上功能. 涉及技术 一.Matrix(矩阵),Android是通

(五)多点触控之兼容ViewPager

在上一篇文章中,自定义的ZoomImageView已经实现了自由缩放,自由移动以及双击放大与缩小的功能.已经可以投入使用这个控件了.下面我们就在ViewPager中使用这个控件.如果你还没读过上一篇文章,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4940193.html 一.在ViewPager中使用自定义的ZoomImageView 快速的代建起ViewPager吧.修改activity_main.xml中的代码,如下: <Relati

Cocos2dx 多点触控

1 最容易忽略的东西,对于ios平台,须得设置glView的属性: [__glView setMultipleTouchEnabled:YES]; 2 如果调用CCLayer的方法setTouchEnabled,则不需要手动加touchDelegate,因为这个函数里会自动做这些事情. 3 如果调用CCLayer的方法setTouchEnabled,之前可以调用一个设置多点或单点的函数来控制setTouchEnable的注册行为,这个函数是: setTouchMode 4 也可以直接调用 coc

Cocos2d-x3.2 多点触控

//GameScene.h #include "cocos2d.h" USING_NS_CC; class GameScene : public cocos2d::Layer { public:     static cocos2d::Scene* createScene();          virtual bool init();          virtual void onTouchesBegan(const std::vector<Touch*>& t

Android 多点触控错误处理(java.lang.IllegalArgumentException: pointerIndex out of range)

最近做View的多点触控时,每次第一次触控事件完美运行,第二次就直接崩了,错误信息如下: 01-03 00:05:44.220 4377-4410/system_process E/AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: android.ui java.lang.IllegalArgumentException: pointerIndex out of range at android.view.MotionEvent.nat

MultiTouch————多点触控,伸缩图片,变换图片位置

前言:当今的手机都支持多点触控功能(可以进行图片伸缩,变换位置),但是我们程序员要怎样结合硬件去实现这个功能呢? 跟随我一起,来学习这个功能 国际惯例:先上DEMO免费下载地址:http://download.csdn.net/detail/cnwutianhao/9443667 示例图片: 我是用Genymotion录制的,没有真机上多点触控显示的效果那么好,大家在真机上跑程序,会体会到多点触控功能.(注:Genymotion多点触控快捷键是 ctrl+鼠标指针上下拖动) 具体代码实现: 布局