def setup(debugmode: bool = False): """ setup project if cli give run command :param debugmode:Set logger level debug or not :return :bool """ signal.signal(signal.SIGINT, cancel_handler) signal.signal(signal.SIGTERM, cancel_handler) # LOG SET:DEBUG OR NOT if debugmode: set_root_logger_level(logging.DEBUG) else: set_root_logger_level(logging.INFO) ST.LOG_LEVLE = logging.INFO device, cycletime, plans = make_plan() grant_adb_permission(device) planmanager = pm() if not planmanager.set_plan(plans, cycletime): logger.info('无计划任务,直接终止') return False # Droid Connection if not device: logger.info('未定义目标设备,搜寻并返回可用android设备...') try: devices = ADB().devices(state="device") if len(devices) == 0: raise Exception except: logger.info('无可用android设备') ADB().kill_server() return False print(f'可用设备列表---》》》') for d in range(len(devices)): print(f"{d + 1}.{devices[d][0]}") num = int(input('输入希望链接的设备编码[1,2,3,4...]:')) try: device = devices[num - 1][0] except: logger.info('非法输入,选择第一个设备作为可用设备') device = devices[0][0] instance = connect_device(f'android:///{device}') else: logger.info(f"尝试链接设备[{device}]") try: instance = connect_device(device) except Exception as e: logger.error(f'连接发生错误({str(e)})') instance = None if instance: logger.info(f"连接成功,开始执行计划任务") planmanager.run_plans() logger.info('计划执行结束') if ST.MANUAL_CANCEL: return True try: ADB().disconnect() except: pass else: logger.error('连接失败') ADB().kill_server() return True
# -*- coding:utf-8 -*- from airtest.core.api import * from airtest import aircv from airtest.core.cv import Predictor from PIL import Image, ImageChops import cv2 import pytesseract pytesseract.pytesseract.tesseract_cmd = r'/usr/local/Cellar/tesseract/4.1.0/bin/tesseract' from poco.drivers.android.uiautomation import AndroidUiautomationPoco from airtest.core.api import connect_device dev2 = connect_device('Android:///57a1a1bd?cap_method=javacap&touch_method=adb') poco_2 = AndroidUiautomationPoco(dev2, use_airtest_input=True, screenshot_each_action=False) auto_setup(__file__) # setCurrentDevice(1)代表360 class Android_AVC2(): def __init__(self): self.interval = 2 # 当前设备(0:oppo ,1:360) def setCurrentDevice(self, device): set_current(device) # 启动avc def startAVC(self, packageName): start_app(packageName) # wait(Template(r"resource/images/tpl1568208771836.png", record_pos=(-0.002, -0.009), resolution=(1080, 1920)))
# -*- coding:utf-8 -*- from airtest.core.api import * from airtest import aircv from airtest.core.cv import Predictor from PIL import Image, ImageChops import cv2 import pytesseract pytesseract.pytesseract.tesseract_cmd = r'/usr/local/Cellar/tesseract/4.1.0/bin/tesseract' from poco.drivers.android.uiautomation import AndroidUiautomationPoco from airtest.core.api import connect_device dev1 = connect_device( 'Android:///433edc01?cap_method=javacap&touch_method=adb') poco_1 = AndroidUiautomationPoco(dev1, use_airtest_input=True, screenshot_each_action=False) auto_setup(__file__) # setCurrentDevice(0)代表oppo class Android_AVC(): def __init__(self): self.interval = 2 # 当前设备(0:oppo ,1:360) def setCurrentDevice(self, device): set_current(device)
def UnityEditorWindow(): dev = connect_device("Windows:///?class_name=UnityContainerWndClass&title_re=Unity.*") game_window = dev.app.top_window().child_window(title="UnityEditor.GameView") dev._top_window = game_window.wrapper_object() dev.focus_rect = (0, 40, 0, 0) return dev
def startApp(self,package,device): if G.DEVICE == None: connect_device(device) print("start_app(package)") print(start_app(package))
else: time.sleep(interval) @logwrap def try_log_screen(screen=None): """ Save screenshot to file Args: screen: screenshot to be saved Returns: None """ if not ST.LOG_DIR: return if screen is None: screen = G.DEVICE.snapshot() filename = "%(time)d.jpg" % {'time': time.time() * 1000} filepath = os.path.join(ST.LOG_DIR, filename) aircv.imwrite(filepath, screen) return filename if __name__ == "__main__": from airtest.core.api import connect_device from airtest.core.error import AdbError, InstallMultipleError dev = connect_device("android://10.252.60.147:5039/AAQKYTY9MVRGOFIV") dev.install_multiple_app("E://windows//Test.apk")
def setUpModule(): connect_device("Android://127.0.0.1:5037/DA08196340368") start_app('com.caibaopay.cashier')
# coding=utf-8 from poco.drivers.unity3d.test.tutorial.case import TutorialCase class ClickTutorial(TutorialCase): def runTest(self): self.poco('btn_start').click() if __name__ == '__main__': from airtest.core.api import connect_device connect_device('Android:///') import pocounit pocounit.main()
def setUpClass(cls): from airtest.core.api import connect_device connect_device('Android:///HT7C51A04625') # cls.p = AndroidUiautomationPoco() cls.pocos = [AndroidUiautomationPoco() for _ in range(3)]
# -*- encoding=utf8 -*- from airtest.core.api import * from poco.drivers.android.uiautomation import AndroidUiautomationPoco from airtest.core.api import connect_device auto_setup(__file__) device_1 = connect_device('android:///6b0a1e2') device_2 = connect_device('android:///emulator-5554') poco_1 = AndroidUiautomationPoco(device_1, use_airtest_input=True, screenshot_each_action=False) poco_2 = AndroidUiautomationPoco(device_2, use_airtest_input=True, screenshot_each_action=False) # poco_1(name="com.ss.android.ugc.aweme:id/bjc").wait_for_appearance() # poco_1(name="com.ss.android.ugc.aweme:id/bjc").wait(10).exists() poco_1(text="知乎").click() sleep(15) poco_1(name="com.zhihu.android:id/input").click() sleep(1) poco_1(name="com.zhihu.android:id/input").set_text("python") res_list = poco_1("com.zhihu.android:id/parent_fragment_content_id").offspring( "android.support.v7.widget.RecyclerView").child( "android.widget.LinearLayout") sleep(5)
def setUpClass(cls): from airtest.core.api import connect_device connect_device('Android:///HT7C51A04625') cls.poco = AndroidUiautomationPoco(use_airtest_input=True)
def setUp(self): logging.info('=====setUp====') ov = OpenView(self) connect_device(ov.get_phone_dev()) self.driver = appium_desired()
def __init__(self, device=None, using_proxy=True, force_restart=False, use_airtest_input=False, **options): # 加这个参数为了不在最新的pocounit方案中每步都截图 self.screenshot_each_action = True if options.get('screenshot_each_action') is False: self.screenshot_each_action = False self.device = device or current_device() if not self.device: self.device = connect_device("Android:///") self.adb_client = self.device.adb if using_proxy: self.device_ip = self.adb_client.host or "127.0.0.1" else: self.device_ip = self.device.get_ip_address() # save current top activity (@nullable) try: current_top_activity_package = self.device.get_top_activity_name() except AirtestError as e: # 在一些极端情况下,可能获取不到top activity的信息 print(e) current_top_activity_package = None if current_top_activity_package is not None: current_top_activity_package = current_top_activity_package.split('/')[0] # install ime self.ime = YosemiteIme(self.adb_client) # install self._instrument_proc = None self._install_service() # forward if using_proxy: p0, _ = self.adb_client.setup_forward("tcp:10080") p1, _ = self.adb_client.setup_forward("tcp:10081") else: p0 = 10080 p1 = 10081 # start ready = self._start_instrument(p0, force_restart=force_restart) if not ready: # 之前启动失败就卸载重装,现在改为尝试kill进程或卸载uiautomator self._kill_uiautomator() ready = self._start_instrument(p0) if current_top_activity_package is not None: current_top_activity2 = self.device.get_top_activity_name() if current_top_activity2 is None or current_top_activity_package not in current_top_activity2: self.device.start_app(current_top_activity_package, activity=True) if not ready: raise RuntimeError("unable to launch AndroidUiautomationPoco") if ready: # 首次启动成功后,在后台线程里监控这个进程的状态,保持让它不退出 self._keep_running_thread = KeepRunningInstrumentationThread(self, p0) self._keep_running_thread.start() endpoint = "http://{}:{}".format(self.device_ip, p1) agent = AndroidPocoAgent(endpoint, self.ime, use_airtest_input) super(AndroidUiautomationPoco, self).__init__(agent, **options)
def __init__(self, device=None, using_proxy=True, force_restart=False, use_airtest_input=False, **options): # 加这个参数为了不在最新的pocounit方案中每步都截图 self.screenshot_each_action = True if options.get('screenshot_each_action') is False: self.screenshot_each_action = False self.device = device or current_device() if not self.device: self.device = connect_device("Android:///") self.adb_client = self.device.adb if using_proxy: self.device_ip = self.adb_client.host or "127.0.0.1" else: self.device_ip = self.device.get_ip_address() # save current top activity (@nullable) current_top_activity_package = self.device.get_top_activity_name() if current_top_activity_package is not None: current_top_activity_package = current_top_activity_package.split( '/')[0] # install ime self.ime = YosemiteIme(self.adb_client) self.ime.start() # install self._instrument_proc = None self._install_service() # forward if using_proxy: p0, _ = self.adb_client.setup_forward("tcp:10080") p1, _ = self.adb_client.setup_forward("tcp:10081") else: p0 = 10080 p1 = 10081 # start if self._is_running('com.github.uiautomator'): warnings.warn( '{} should not run together with "uiautomator". "uiautomator" will be killed.' .format(self.__class__.__name__)) self.adb_client.shell( ['am', 'force-stop', 'com.github.uiautomator']) ready = self._start_instrument(p0, force_restart=force_restart) if not ready: # 启动失败则需要卸载再重启,instrument的奇怪之处 uninstall(self.adb_client, PocoServicePackage) self._install_service() ready = self._start_instrument(p0) if current_top_activity_package is not None: current_top_activity2 = self.device.get_top_activity_name() if current_top_activity2 is None or current_top_activity_package not in current_top_activity2: self.device.start_app(current_top_activity_package, activity=True) if not ready: raise RuntimeError("unable to launch AndroidUiautomationPoco") endpoint = "http://{}:{}".format(self.device_ip, p1) agent = AndroidPocoAgent(endpoint, self.ime, use_airtest_input) super(AndroidUiautomationPoco, self).__init__(agent, **options)
def setUpClass(cls): connect_device('Android:///') cls.poco = StdPoco()
def setUpClass(cls): super(Case, cls).setUpClass() if not current_device(): connect_device('Android:///')
def d(): device = connect_device("android:///") driver = AirtestPoco(device) yield driver
def stopApp(self,package,device): if G.DEVICE == None: connect_device(device) stop_app(package)
def __init__(self, dev_id): super(Air_Case_Handler, self).__init__() if deviceType.upper() == "WEB": pass else: self.dev = connect_device(dev_id)
def __init__(self, device=None, using_proxy=True, **options): if not device: try: # new version from airtest.core.api import connect_device, device as current_device if not current_device(): connect_device("Android:///") except ImportError: # old version from airtest.cli.runner import device as current_device from airtest.core.main import set_serialno if not current_device(): set_serialno() self.android = current_device() else: self.android = device self.adb_client = self.android.adb if using_proxy: self.device_ip = self.adb_client.host or "127.0.0.1" else: if new_airtest_api: self.device_ip = self.adb_client.get_ip_address() else: self.device_ip = get_ip_address(self.adb_client) # save current top activity (@nullable) current_top_activity_package = self.android.get_top_activity_name() if current_top_activity_package is not None: current_top_activity_package = current_top_activity_package.split( '/')[0] # install ime self.ime = YosemiteIme(self.adb_client) self.ime.start() # install self._instrument_proc = None self._install_service() # forward if using_proxy: p0, _ = self.adb_client.setup_forward("tcp:10080") p1, _ = self.adb_client.setup_forward("tcp:10081") else: p0 = 10080 p1 = 10081 # start if self._is_running('com.github.uiautomator'): warnings.warn( '{} should not run together with "uiautomator". "uiautomator" will be killed.' .format(self.__class__.__name__)) self.adb_client.shell( ['am', 'force-stop', 'com.github.uiautomator']) ready = self._start_instrument(p0) if not ready: # 启动失败则需要卸载再重启,instrument的奇怪之处 uninstall(self.adb_client, PocoServicePackage) self._install_service() ready = self._start_instrument(p0) if current_top_activity_package is not None: current_top_activity2 = self.android.get_top_activity_name() if current_top_activity2 is None or current_top_activity_package not in current_top_activity2: self.android.start_app(current_top_activity_package, activity=True) if not ready: raise RuntimeError("unable to launch AndroidUiautomationPoco") endpoint = "http://{}:{}".format(self.device_ip, p1) agent = AndroidPocoAgent(endpoint, self.ime) super(AndroidUiautomationPoco, self).__init__(agent, **options)
def setUpClass(cls): # u3d game 默认5001 # cocos2dx-lua 默认15004 connect_device('Android:///') # connect_device('Windows:///?class_name=UnityWndClass&title_re=Unity.*') cls.poco = StdPoco(15004)