zoukankan      html  css  js  c++  java
  • App自动化(2)--Python&Appium实现安卓手机九宫格解锁

    九宫格作为常见的手势密码,我们在使用的时候,是从起点开始,按住不放,然后滑动手指,直到最后一个点松开手指,如果与设置的手势密码匹配,则解锁成功。

    现在大多数九宫格作为一个元素存在,很难定位到每一个点。

    解决思路有两个,一是用指针定位每一个点;二是先获取元素坐标位置,再获取元素大小,然后切割图片,分别计算出每个点的坐标;

    本次笔记记录第一个解决思路:

    目的:创建一个Unlock类,按顺序传入九宫格的解锁数字即可实现主屏幕解锁

    模拟器:夜神

    1、坐标定位到每个点

    A、夜神模拟器开发者选项中开启指针位置

    B、找出九宫格每一个坐标的位置

    # 位置坐标
    position = [ [200, 800], [360, 800], [520, 800], [200, 960], [360, 960], [520, 960], [200, 1126], [360, 1126], [520, 1126] ]

    2、创建类,实现解锁

    class Unlock():
        def __init__(self, passwd, passwd1=[]):
            # 传入参数passwd,passwd1默认为空列表
            self.passwd = passwd
            self.passwd1 = passwd1
    
        def passwd(self):
            # 将传入的数字与position中的值对应,装入列表passwd1中
            for i in self.passwd:
                self.passwd1.append(position[i - 1])
            return self.passwd1
    
        def press(self):
            # 按住第一个按钮
            action.press(x=self.passwd1[0][0], y=self.passwd1[0][1])
    
        def move(self):
            # 滑动操作,循环方式控制次数
            for j in range(1, len(self.passwd1)):
                action.move_to(x=self.passwd1[j][0], y=self.passwd1[j][1])
    
        def release(self):
            # 释放
            action.release()
    
        def perform(self):
            # 提交
            action.perform()
    
        def unlock(self):
            self.passwd()
            self.press()
            self.move()
            self.release()
            self.perform()

    注意:实例化类以列表方式传值

    完整代码如下:

    # coding=utf-8
    '''
    Author:lc
    date:2019/4/24  20:53
    '''
    from appium import webdriver
    from appium.webdriver.common.touch_action import TouchAction
    from time import sleep
    desired_capabilities = {
        'platformName': 'Android',
        'deviceName': '127.0.0.1:62001',
        'platformVersion': '5.1.1',
        'unicodeKeyboard': 'true',
        'resetKeyboard': 'true',
        'appPackage': 'com.tencent.news',
        'appActivity': 'com.tencent.news.activity.SplashActivity'
    }
    
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_capabilities)
    sleep(10)
    # 滑动进入解锁页
    driver.swipe(300, 900, 300, 300)
    
    action = TouchAction(driver)
    position = [
        [200, 800], [360, 800], [520, 800],
        [200, 960], [360, 960], [520, 960],
        [200, 1126], [360, 1126], [520, 1126]
    ]
    
    '''九宫格解锁'''
    # 定义解锁类
    class Unlock():
        def __init__(self, passwd, passwd1=[]):
            # 传入参数passwd,passwd1默认为空列表
            self.passwd = passwd
            self.passwd1 = passwd1
    
        def passwd(self):
            # 将传入的数字与position中的值对应,装入列表passwd1中
            for i in self.passwd:
                self.passwd1.append(position[i - 1])
            return self.passwd1
    
        def press(self):
            # 按住第一个按钮
            action.press(x=self.passwd1[0][0], y=self.passwd1[0][1])
    
        def move(self):
            # 滑动操作,循环方式控制次数
            for j in range(1, len(self.passwd1)):
                action.move_to(x=self.passwd1[j][0], y=self.passwd1[j][1])
    
        def release(self):
            # 释放
            action.release()
    
        def perform(self):
            # 提交
            action.perform()
    
        def unlock(self):
            self.passwd()
            self.press()
            self.move()
            self.release()
            self.perform()
    但行好事,莫问前程
  • 相关阅读:
    HBase 5、Phoenix使用
    HBase 4、Phoenix安装和Squirrel安装
    HBase 3、HBase练习题
    HBase 2、HBase安装与初试牛刀
    HBase 1、HBase介绍和工作原理
    Hadoop 7、MapReduce执行环境配置
    Hadoop 6、第一个mapreduce程序 WordCount
    Hive 11、Hive嵌入Python
    Hive 12、Hive优化
    Hive 10、Hive的UDF、UDAF、UDTF
  • 原文地址:https://www.cnblogs.com/mingfan/p/10765228.html
Copyright © 2011-2022 走看看