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' )
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)
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)
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)
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")
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"
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)
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)
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))
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)