1. 程式人生 > >Appium_8_滑動/連續滑動/多點觸碰

Appium_8_滑動/連續滑動/多點觸碰

一,簡單滑動方法

在Appium中模擬使用者滑動操作需要使用swipe方法,該方法定義如下:

   def swipe(self, start_x, start_y, end_x, end_y, duration=None):
        """Swipe from one point to another point, for an optional duration.

        :Args:
         - start_x - x-coordinate at which to start
         - start_y - y-coordinate at which to start
         - end_x - x-coordinate at which to stop
         - end_y - y-coordinate at which to stop
         - duration - (optional) time to take the swipe, in ms.

        :Usage:
            driver.swipe(100, 100, 100, 400)
        """

滑動解析

滑動主要分為:

  1. 水平滑動
  2. 垂直滑動
  3. 任意方向滑動

滑動軌跡圖如下:

程式碼實現:

def get_size():
    x = driver.get_window_size()  #獲取螢幕大小,返回dict
    return x
def swipe_slide(num1,num2,num3,num4,times):
    l = get_size()
    print(l)
    x_start = int(l.get('width')*num1)
    print(x_start)
    x_end = int(l.get('width')*num2)
    print(x_end)
    y_start = int(l.get('height')*num3)
    y_end = int(l.get('height')*num4)
    driver.swipe(x_start,y_start,x_end,y_end,times)    #滑動,前四個引數為座標,第五個引數為持續時間(毫秒)

二,連續滑動操作

滑動操作一般是兩點之間的滑動,而實際使用過程中使用者可能要進行一些多點連續滑動操作。如九宮格滑動操作,連續拖動圖片移動等場景。那麼在Appium中該如何模擬這類操作呢?

TouchAction

Touch Action包含一些列操作,比如按壓、長按、點選、移動、暫停。由著些不同操作可以組成一套動作。使用TochAction需要先匯入對應的模組

from appium.webdriver.common.touch_action import TouchAction

按壓

方法:press() 開始按壓一個元素或座標點(x,y)。通過手指按壓手機螢幕的某個位置。 press也可以接收螢幕的座標(x,y)。

press(self, el=None, x=None, y=None)

e:

TouchAction(driver).press(x=0,y=308)

長按

方法:longPress() 開始按壓一個元素或座標點(x,y)。 相比press()方法,longPress()多了一個入參,既然長按,得有按的時間吧。duration以毫秒為單位。1000表示按一秒鐘。其用法與press()方法相同。

long_press(self, el=None, x=None, y=None, duration=1000)

點選

方法:tap() 對一個元素或控制元件執行點選操作。用法參考press()。

tap(self, element=None, x=None, y=None, count=1)

移動

方法:move_to() 將指標從上一個點移動到指定的元素或點。

move_to(self, el=None, x=None, y=None)

注意:

移動到目位置有時是算絕對座標點,有時是基於前面一個座標點的偏移量,這個要結合具體App來實踐。

暫停

方法:Wait()

wait(self, ms=0)

暫停指令碼的執行,單位為毫秒。

釋放

方法release() 結束的行動取消螢幕上的指標。

release(self)

執行

perform() 執行的操作傳送到伺服器的命令操作。

perform(self)

TouchAction九宮格滑動操作

TouchAction(driver).press(x=219, y=282).wait(1000) \
        .move_to(x=346, y=291).wait(1000) \
        .move_to(x=523, y=279).wait(1000) \
        .move_to(x=364, y=433).wait(1000) \
        .move_to(x=216, y=576).wait(1000) \
        .move_to(x=362, y=583).wait(1000) \
        .move_to(x=514, y=585).wait(1000) \
        .release().perform()

三,多手勢操作

使用場景

在使用地圖App中,我們經常需要對介面進行縮放操作來更加便利的檢視位置。那麼在Appium中怎樣去模擬這類操作呢?

MultiAction

MultiAction 是多點觸控的類,可以模擬使用者多點操作。主要包含 add()  perform() 兩個方法, MultiAction可以結合前面所學的 ActionTouch可以模擬出使用者的多個手指滑動的操作效果;

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)
a2 = TouchAction(driver)

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

MultiAction(driver).add(a1, a2)

執行

perform(self) 執行儲存在物件中的操作。

用法

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

Ps:是不是有點類似Python裡面的多執行緒和多程序的使用。

多點觸控操作實踐——地圖App縮放

滑動原理圖解

程式碼實現

def get_size():
    '''獲取螢幕大小'''
    size_dict = driver.get_window_size()
    x = size_dict.get('width')
    y = size_dict.get('height')
    return x,y
def shrink():
    '''縮小'''
    x,y = get_size()
    print(x,y)
    action1 = TouchAction(driver)
    action2 = TouchAction(driver)
    add_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()
    add_action.add(action1,action2)
    #執行操作
    add_action.perform()

參考資料

參考資料:

相關推薦

Appium_8_滑動/連續滑動/

一,簡單滑動方法 在Appium中模擬使用者滑動操作需要使用swipe方法,該方法定義如下: def swipe(self, start_x, start_y, end_x, end_y, duration=None): """Swipe from

摸技術

view 技術 actionbar hist cnblogs turn true ren oat 1 //多點觸摸 放大,縮小 2 public class MainActivity extends ActionBarActivity { 3 4

quojs 及 轉:11個處理摸事件和摸的JS庫

eal detail true asc tps www ast box asp QuoJs官方文檔http://www.360doc.com/content/15/0504/18/11984479_468037372.shtml ==== 11個處理觸摸事件和多點觸

WPF 摸開發[2]:WPF摸的幾個手勢的執行順序

的人 賦值 一個 release 比較 touch 開始 tar 分析 原文:WPF 多點觸摸開發[2]:WPF觸摸的幾個手勢的執行順序前面我講了在win7下使用模擬器,進行調試模擬多點觸摸,其實際開發中這樣也比較麻煩.. 要拿幾個鼠標. 所以更多的人會 買個觸摸套 套在

WPF摸放大縮小旋轉

top rotation https csharp 添加 template wpf 轉載 nds 原文:WPF多點觸摸放大縮小旋轉 版權聲明:本文為博主原創文章,需要轉載盡管轉載。 https://blog.csdn.net/z597

Unity屏操作 (主要是解決 屏問題)

  1)、宣告允許多點觸屏   2)判斷手指觸控到螢幕的位置   3)判斷手指觸控到螢幕的數目     input.touchCount =0       return     input.touchCount =1       我們讓其來做點事: (移動攝像機左右移動)

雷達互動交互軟件大屏全息互動投影Tuio摸檢測驅動引擎系統

鼠標 jpg nag 轉換成 span 輸出 str uio blog 雷達互動交互軟件大屏全息互動投影Tuio多點觸摸程序驅動引擎系統【3D/AR/VR/全息互動投影視覺開發,q(357265844)】 一、適用場景 適用於激光雷達互動投影,墻面、地面、大

Android觸控技術,實現對圖片的放大縮小平移,慣性滑動等功能

首先推薦一下鴻洋大大的打造個性的圖片預覽與多點觸控視訊教程,這套教程教我們一步一步實現了多點觸控實現對圖片的平移和縮放的功能,這篇文章我將在鴻洋大大的基礎之上做了一些擴充套件功能: 1.圖片的慣性滑動 2.圖片縮放小於正常比例時,鬆手會自動回彈成正常比例

android ImageView 手勢縮放,雙擊放大,自由滑動觸控,慣性滑動

相容viewPager import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.graphics

android 自定義ImageView實現圖片手勢滑動觸控放大縮小效果

首先呢,還是一貫作風,我們先來看看眾多應用中的示例:(這種效果是很常見的,可以說應用的必須品.)                             搜狐客戶端                                    百度新聞客戶端          

Android事件傳遞、觸控及滑動衝突的處理

基本概念 所有Touch事件都會被封裝MotionEvent, 包括Touch的型別、位置(相對螢幕的絕對位置,相對View的相對位置)、時間、歷史記錄以及第幾個手指(多點觸控)等; 事件有多種型別,常用的事件型別有:ACTION_DOWN,ACTION_UP,ACTION_MOVE,ACTION

android 自定義ImageView實現圖片手勢滑動 觸控放大縮小效果

                轉自:http://blog.csdn.net/jj120522/article/details/8467810首先呢,還是一貫作風,我們先來看看眾多應用中的示例:(這種效果是很常見的,可以說應用的必須品.)                           搜狐客戶端  

Unity判斷手勢的滑動方向,單觸控和觸控,並獲取剛觸控以及觸控結束事的座標

Unity判斷手勢觸控的型別 ,判斷手勢的滑動方向,並獲取剛觸控以及觸控結束事的座標 本章咱們一起來看下unity對有觸控手勢做出的響應 單點觸控 Input.touchCount==1 移動觸控 Input.GetTouch(0).phase==TouchPhas

兩個手指觸控 滑動 放大縮小 縮放

using UnityEngine; using System.Collections; public class FingersTwo : MonoBehaviour {   public   GameObject  m1, m2;   int Z_Far = 0, Z_

爬蟲界的福利--touchRobot,機器模擬滑動庫(已開源)

button desc 6.0 程序 swiper sta 安裝 set ide 此插件能幹什麽? 一句話概括:通過程序主動觸發移動端滑動、拖拽、觸碰等操作 插件有什麽用呢? 可以用於爬蟲,也可以用於自動化測試以及程序演示 插件演示地址 (從網上扒了一個canvas繪圖的d

擊左滑動一定距離 再次擊向右滑動回到原來位置 並且切換擊圖標

png image chan right tel stop ner over nim $(function(){ var i = $("#right").css("left"); $("#dianji").click(function(){ $("#leftmen

js-滑動判斷滑動方向(移動版)

func result angle dir listener atan bre dto listen var startx, starty; //獲得角度 function getAngle(angx, angy) { return Math.atan2(a

連續滑動操作

roi action 代碼實現 指定 行動 pass erl sele detail 動操作一般是兩點之間的滑動,而實際使用過程中用戶可能要進行一些多點連續滑動操作。如九宮格滑動操作,連續拖動圖片移動等場景。那麽在Appium中該如何模擬這類操作呢? TouchAction

Appium頁面滑動連續操作-TouchAction

TouchAction包含一系列操作,例如短按、長按、點選、移動、暫停,由不同的操作可以組成一套動作,使用TouchAction需要先匯入對應的模組: from appium.webdriver.common.touch_action import TouchAction  

ScrollView與viewpager滑動事件衝突,與選事情衝突解決方案

在產品適配的時候我加了ScrollView,但是產品提出了一個向上輪播需求 首先把豎直向上的viewpager粘出來: package com.cfiigroup.zhehui.hepaidai.view; import android.view.MotionEvent; impo