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.源码可以在这个路径找到:Lib\site-packages\appium\webdriver\common\touch_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)
posted @ 2020-04-02 18:56  吃个鱼丸  阅读(492)  评论(0编辑  收藏  举报