Example #1
0
def app_restart():
    os.system('adb shell am force-stop com.eg.android.AlipayGphone')
    time.sleep(3)
    logTools.log('info', "启动app")
    os.system(
        'adb shell am start -n com.eg.android.AlipayGphone/com.eg.android.AlipayGphone.AlipayLogin activity'
    )
Example #2
0
def keyevent_by_num(num):
    try:
        logTools.log('info', "开始模拟按键{}".format(num))
        os.system('adb shell input keyevent {}'.format(num))
        time.sleep(1)
    except Exception:
        logTools.log('info', "keyevent_by_num error")
        traceback.print_exc()
        exit(-1)
Example #3
0
def tap_by_xy(x, y):
    try:
        logTools.log('info', "开始点击{} {}".format(x, y))
        os.system('adb shell input tap {} {}'.format(x, y))
        time.sleep(1)
    except Exception:
        logTools.log('info', "tap_by_xy error")
        traceback.print_exc()
        exit(-1)
Example #4
0
def swipe_by_2point(x1, y1, x2, y2):
    try:
        logTools.log('info', "开始滑动{} {} {} {} 300".format(x1, y1, x2, y2))
        os.system('adb shell input swipe {} {} {} {} 300'.format(
            x1, y1, x2, y2))
        time.sleep(1)
    except Exception:
        logTools.log('info', "swipe_by_2point error")
        traceback.print_exc()
        exit(-1)
Example #5
0
def recognition_img_txt(imgName):
    """
    将图片中文件识别出来

    """
    if os.path.isfile(imgName):
        os.system('/usr/local/bin/tesseract {} out -l chi_sim makebox'.format(imgName))
        logTools.log('info', "输出坐标文件 out.box")
    else:
        logTools.log('info', "screen.png not found")
Example #6
0
def _get_screen_size():
    """
    获取手机屏幕大小
    """
    size_str = os.popen('adb shell wm size').read()
    if not size_str:
        logTools.log('info', '请安装 ADB 及驱动并配置环境变量')
        sys.exit()
    m = re.search(r'(\d+)x(\d+)', size_str)
    #match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配,会扫描整个字符串并返回第一个成功的匹配,也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
    if m:
        return "{height}x{width}".format(height=m.group(2), width=m.group(1))
        #group(1)列出search时第一个括号匹配部分,group(2)列出search时第二个括号匹配部分
    return "1920x1080"
Example #7
0
def open_accordant_config():
    """
    调用配置文件
    """
    screen_size = _get_screen_size()
    config_file = "{path}/config/{screen_size}/config.json".format(
        path=sys.path[0], screen_size=screen_size)
    #sys.path[0] 是程序所在的目录
    if os.path.exists(config_file):
        with open(config_file, 'r') as f:
            logTools.log('info',
                         "Load config file from {}".format(config_file))
            #format对前面定义的{}进行赋值
            return json.load(f)
    else:
        with open('{}/config/default.json'.format(sys.path[0]), 'r') as f:
            logTools.log('info', "Load default config")
            return json.load(f)
Example #8
0
def check_screenshot(imgName):
    """
    检查获取截图的方式
    """
    global SCREENSHOT_WAY
    if os.path.isfile(imgName):
        try:
            os.remove(imgName)
        except Exception:
            pass
    if SCREENSHOT_WAY < 0:
        logTools.log('info', '暂不支持当前设备')
        sys.exit()
    pull_screenshot(imgName)
    try:
        Image.open('./{}'.format(imgName)).load()
        #无法正常打开图片时需要确定是否有windonw换行
        logTools.log('info', '采用方式 {} 获取截图'.format(SCREENSHOT_WAY))
    except Exception:
        SCREENSHOT_WAY -= 1
        check_screenshot(imgName)
Example #9
0
def dump_device_info():
    """
    显示设备信息
    """
    size_str = os.popen('adb shell wm size').read()
    device_str = os.popen('adb shell getprop ro.product.device').read()
    phone_os_str = os.popen(
        'adb shell getprop ro.build.version.release').read()
    density_str = os.popen('adb shell wm density').read()
    logTools.log(
        'info', """**********
Screen: {size}
Density: {dpi}
Device: {device}
Phone OS: {phone_os}
Host OS: {host_os}
Python: {python}
**********""".format(size=size_str.strip(),
                     dpi=density_str.strip(),
                     device=device_str.strip(),
                     phone_os=phone_os_str.strip(),
                     host_os=sys.platform,
                     python=sys.version))
Example #10
0
def screenshot_prepare():
    """
    打开app 
    """
    try:
        displayPowerState = os.popen(
            "adb shell dumpsys power | grep 'Display Power: state=' | awk -F '=' '{print $2}'"
        ).read().strip('\n')
        #print(displayPowerState)
        if displayPowerState == 'OFF':
            logTools.log('info', '唤醒屏幕')
            os.system('adb shell input keyevent 26')
        else:
            logTools.log('info', "屏幕已开启不需要唤醒")
        isStatusBarKeyguard = os.popen(
            "adb shell dumpsys window policy|grep isStatusBarKeyguard | awk -F '=' ' {print $3}'"
        ).read().strip('\n')
        #print(isStatusBarKeyguard)
        if isStatusBarKeyguard == 'true':
            time.sleep(2)
            logTools.log('info', "解锁屏保")
            #左右滑动才好解锁,并且延迟100ms启动
            os.system('adb shell input swipe 200 400 800 400 100')
            time.sleep(1)
            logTools.log('info', "输入密码")
            os.system('adb shell input text 95729')
        else:
            logTools.log('info', "屏幕已解锁不需要再次解锁")
        time.sleep(1)
        mFocusedActivity = os.popen(
            "adb shell dumpsys activity | grep 'mFocusedActivity' | awk '{print $4}' | awk -F '/' '{print $1}'"
        ).read().strip('\n')
        if mFocusedActivity == 'com.eg.android.AlipayGphone':
            logTools.log('info', "APP已启动,停止APP,等待重新启动")
            os.system('adb shell am force-stop com.eg.android.AlipayGphone')
        time.sleep(1)
        logTools.log('info', "启动app")
        os.system(
            'adb shell am start -n com.eg.android.AlipayGphone/com.eg.android.AlipayGphone.AlipayLogin activity'
        )
    except Exception:
        logTools.log('info', "screenshot_prepare error")
        traceback.print_exc()
        exit(-1)