zoukankan      html  css  js  c++  java
  • Appium常用操作之九宫格滑动解锁

    之前的swipe API提供的操作可以实现单向滑动,如果想要实现类似于九宫格这种连续的滑动需求,该怎么做呢?

    TouchAction包含一系列的操作,比如按压、长按、点击、移动、暂停等,可以由这些操作组成一组工作来完成实际的连续滑动需求。

    在分析实际需求时,我们会发现有两种情况:

    第一种 :整个解锁图案就是一个view,没有其他子元素,那么我们就只能采取坐标的形式

    解决问题思路:先获取元素坐标位置,再获取元素大小,然后切割图片,获取步长,分别计算出每个点的坐标

    #首先得到对应 滑动解锁经过的坐标点
    element=driver.find_element_by_id("com.xxzb.fenwoo:id/lpv_password")
    #获取起始坐标-九宫格左上顶点
    loc=element.location
    #获取元素大小
    size=element.size
    #获取分割后的均值,即下面要用到的九宫格的步长
    step=size["height"]/6
    #得到九宫格绘制的起点坐标,这里例子为第一个坐标点
    start_x=loc["x"]+step
    start_y=loc["y"]+step
    #滑动九宫格操作,从第一个点、一次滑动到第二个、第三个、第五个、第九个
    ta=TouchAction(driver)
    ta.press(x=start_x,y=start_y).wait(200).
        move_to(x=start_x+step*2,y=start_y).wait(200).
        move_to(x=satrt_x+step*4,y=start_y).wait(200).
        move_to(x=start_x+step*2,y=start_y+step*2).wait(200).
        move_to(x=start_x+step*4,y=start_y+step*4).wait(200).
        release().wait(200).
        perform()
    

    第二种情况是:九个点不是由一整个view构成,而是由分开的imageview的集合构成;

    解决问题思路:每个点可以直接定位到,然后移动

    #得到所有imageview的集合
    images=driver.find_elements(By.xpath,"//android.widget.FrameLayout/android.widget.ImageView")
    #滑动
    ta=TouchAction(driver)
    ta.press(images[0])wait(200).
        move_to(images[1]).wait(200).
        move_to(images[2]).wait(200).
        move_to(images[4]).wait(200).
        move_to(images[9]).wait(200).
        release().wait(200).
        perform()
    

      这种情况就是常见的场景,先找到各个元素的定位,然后通过TouchAction()来滑动。

    关于TouchAction:

    1.源码可以在这个路径找到:Libsite-packagesappiumwebdrivercommon ouch_action.py

    class TouchAction(object):
        def __init__(self, driver=None):
            self._driver = driver
            self._actions = []
    
        def tap(self, element=None, x=None, y=None, count=1):
            模拟手指触摸屏
    
        def press(self, el=None, x=None, y=None):
            短按:模拟手指按住一个元素,或者坐标
    
        def long_press(self, el=None, x=None, y=None, duration=1000):
            长按:模拟按住一个元素,或者坐标
    
        def wait(self, ms=0):
            按住元素后的等待时间
    
        def move_to(self, el=None, x=None, y=None):
            移动手指到另外一个元素,或者坐标,注意这里坐标不是绝对坐标,是偏移量
            
        def release(self):
            释放手指
    
        def perform(self):
            执行前面的动作
    

      

    2.TouchAction里面有这几个动作:

    • 触摸 (tap)
    • 短按 (press)
    • 长按 (long_press)
    • 等待 (wait)
    • 移动到 (moveTo)
    • 释放 (release)
    • 执行 (perform)
  • 相关阅读:
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言|博客作业04
    C语言|博客作业02
    第二周作业
    第一周作业
    学期总结
    作业01
    C语言I博客作业09
  • 原文地址:https://www.cnblogs.com/123blog/p/12622325.html
Copyright © 2011-2022 走看看