Esempio n. 1
0
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
Esempio n. 2
0
# -*- 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)))
Esempio n. 3
0
# -*- 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)
Esempio n. 4
0
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))
Esempio n. 6
0
        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")
Esempio n. 7
0
def setUpModule():
    connect_device("Android://127.0.0.1:5037/DA08196340368")
    start_app('com.caibaopay.cashier')
Esempio n. 8
0
# 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()
Esempio n. 9
0
 def setUpClass(cls):
     from airtest.core.api import connect_device
     connect_device('Android:///HT7C51A04625')
     # cls.p = AndroidUiautomationPoco()
     cls.pocos = [AndroidUiautomationPoco() for _ in range(3)]
Esempio n. 10
0
# -*- 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)
Esempio n. 11
0
 def setUpClass(cls):
     from airtest.core.api import connect_device
     connect_device('Android:///HT7C51A04625')
     cls.poco = AndroidUiautomationPoco(use_airtest_input=True)
Esempio n. 12
0
 def setUp(self):
     logging.info('=====setUp====')
     ov = OpenView(self)
     connect_device(ov.get_phone_dev())
     self.driver = appium_desired()
Esempio n. 13
0
    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)
Esempio n. 14
0
    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)
Esempio n. 15
0
 def setUpClass(cls):
     connect_device('Android:///')
     cls.poco = StdPoco()
Esempio n. 16
0
 def setUpClass(cls):
     super(Case, cls).setUpClass()
     if not current_device():
         connect_device('Android:///')
Esempio n. 17
0
def d():
    device = connect_device("android:///")
    driver = AirtestPoco(device)
    yield driver
Esempio n. 18
0
 def stopApp(self,package,device):
     if G.DEVICE == None:
         connect_device(device)
     stop_app(package)
Esempio n. 19
0
 def __init__(self, dev_id):
     super(Air_Case_Handler, self).__init__()
     if deviceType.upper() == "WEB":
         pass
     else:
         self.dev = connect_device(dev_id)
Esempio n. 20
0
    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)
Esempio n. 21
0
 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)