示例#1
0
def init_app(plat, package_name, app_path, sleep_time, serialno=None):
    dev = None
    if plat.lower().find('android') >= 0:
        if serialno:
            if re.search('127.0.0.1:\d+', serialno):
                dev = connect_device('Android:///{}?cap_method=JAVACAP&ori_method=ADBORI'.format(serialno))
            else:
                dev = connect_device('Android:///{}'.format(serialno))
        else:
            dev = connect_device('Android:///')
        wake()
        install_android_app(current_device().adb, app_path)
        stop_app(package_name)
        start_app(package_name)
        sleep(sleep_time / 1.5)
    elif plat == 'PC_editor':
        w = Windows()
        dev = UnityEditorWindow()
        w.keyevent('^P')  # Ctrl+P运行
        sleep(sleep_time / 2)
        dev.stop_app = w.app  # 用于获取进程id,结束进程用
    elif plat == 'PC_win':
        w = Windows()
        w.start_app(app_path)
        sleep(sleep_time)
        w.connect(process=w.app.process)
        dev = connect_device("Windows:///?class_name=UnityWndClass")
        dev.stop_app = w.app
    # elif plat == 'iOS':
    #     pass
    # elif plat == 'MAC_editor':
    #     pass
    return dev
示例#2
0
    def setUp(self):
        if not current_device():
            connect_device('Android:///')

        self.package_name = 'com.google.android.calculator'
        apk_path = self.R('res/app/com.google.android.calculator.apk')
        install_android_app(current_device().adb, apk_path)
        start_app(self.package_name)
示例#3
0
文件: App.py 项目: yajuntang/OTest
 def start_app(self, activity=None):
     """
     启动app
     :param activity: 启用的页面 only android
     :return:
     """
     self.check_device()
     start_app(self.app_name, activity)
示例#4
0
 def setUp(self):
     stop_app("com.gameholic.drawsomethingbyspider")
     clear_app("com.gameholic.drawsomethingbyspider")
     wake()
     home()
     start_app("com.gameholic.drawsomethingbyspider")
     sleep(7)
     self.poco = UnityPoco()
     print("handBook test start")
示例#5
0
 def setUp(self):
     stop_app("com.gameholic.drawsomethingbyspider")
     clear_app("com.gameholic.drawsomethingbyspider")
     wake()
     home()
     start_app("com.gameholic.drawsomethingbyspider")
     sleep(7)
     self.poco = UnityPoco()
     print("test reward level no coins start")
示例#6
0
文件: driver.py 项目: Wybxc/YiriAir
    def __init__(self, device, logging_level=logging.ERROR):
        logger = logging.getLogger("airtest")
        logger.setLevel(logging_level)

        auto_setup(__file__, devices=[device])

        start_app('com.tencent.qqlite')
        self.poco = AndroidUiautomationPoco(
            use_airtest_input=True, screenshot_each_action=False)

        self.normalize_qqlite()
示例#7
0
    def setUp(self):

        # connect_device("android:///")
        # self.poco1 = AndroidUiautomationPoco(force_restart=False)
        stop_app("com.gameholic.drawsomethingbyspider")
        clear_app("com.gameholic.drawsomethingbyspider")
        wake()
        home()
        start_app("com.gameholic.drawsomethingbyspider")
        sleep(7)
        self.poco = UnityPoco()
示例#8
0
文件: App.py 项目: yajuntang/OTest
def check_poco_service(stopped, client_thread):
    """
    每隔150 启动 poco_service
    :param stopped:
    :param client_thread:
    :return:
    """
    while not stopped:
        if client_thread is not None and client_thread.stopped:
            return
        time.sleep(150)
        start_app('com.netease.open.pocoservice', 'TestActivity')
示例#9
0
def restart_app_by_scan():
    try:
        stop_app("com.taobao.qianniu")  # 如果应用存在后台,先停止,保证能够进入千牛工作台首页
    finally:
        start_app('com.taobao.qianniu')  # 启动千牛工作台
    try:
        poco('com.taobao.qianniu:id/workbench_title_scan').click()
        poco('com.taobao.qianniu:id/btn_album').click()
        poco(name='显示根目录').click()
        poco(text='图库').click()
        poco(text='trade').click()
        poco('com.android.gallery3d:id/iv_thumbnail').click()
        poco(desc='确定').click()
    except PocoNoSuchNodeException:
        restart_app_by_scan()
示例#10
0
def connect_iOS():
    """
    连接 iOS 手机
    :return: 是否连接设备并启动了 app
    """

    try:
        iOS_device = 'IOS:http://127.0.0.1:8100'
        connect_device(iOS_device)
        Data.device_type = 'iOS'
        start_app(Data.iOS_package)
        return True
    except Exception as e:
        print('连接 iOS 失败:', e)
        return False
示例#11
0
def init_app(plat=SD.PLAT, package_name=SD.PACKAGE_NAME, app_path=SD.APP_PATH[SD.PLAT], sleep_time=SD.SLEEP_TIME,
             serialno=SD.SERIALNO):
    dev = None
    if plat == 'android':
        if SD.USE_ATX_SERVER2:
            atx_server2 = AtxServer2()
            device_info = atx_server2.get_usable_device_info()
            SD.UDID = device_info['udid']
            serialno = device_info['source']['remoteConnectAddress']
        if serialno and serialno.strip() != '':
            if re.search(r'127.0.0.1:\d+', serialno):
                logger.debug('模拟器用JAVACAP和ADBORI')
                dev = connect_device(f'Android:///{serialno}?cap_method=JAVACAP&ori_method=ADBORI')
            else:
                logger.debug(f'指定连接serialno: {serialno}')
                dev = connect_device(f'Android:///{serialno}')
        else:
            dev = connect_device('Android:///')
        wake()
        install_android_app(current_device().adb, app_path)
        stop_app(package_name)
        logger.debug(f'启动app:{package_name}')
        start_app(package_name)
        sleep(sleep_time / 1.5)
    elif plat == 'pc_editor':
        w = Windows()
        dev = UnityEditorWindow()
        w.keyevent('^P')  # Ctrl+P运行
        sleep(sleep_time / 2)
        dev.stop_app = w.app  # 用于获取进程id,结束进程用
    elif plat == 'pc_win':
        w = Windows()
        w.start_app(app_path)
        sleep(sleep_time)
        w.connect(process=w.app.process)
        dev = connect_device("Windows:///?class_name=UnityWndClass")
        dev.stop_app = w.app
    # elif plat == 'ios':
    #     pass
    # elif plat == 'mac_editor':
    #     pass
    return dev
示例#12
0
def connect_android():
    """
    连接 Android 手机
    :return: 是否连接设备并启动了 app
    """

    adb = ADB()
    device_list = adb.devices()
    if len(device_list) >= 1:
        try:
            androd_device = 'Android://127.0.0.1:5037/' + device_list[0][0]
            connect_device(androd_device)
            Data.device_type = 'android'
            start_app(Data.android_package)
            return True
        except Exception as e:
            print('连接 android 失败:', e)
            return False
    else:
        return False
示例#13
0
 def inner(*args, **kwargs):
     print(f"测试开始 {test_name}")
     start_case(test_name)
     from airtest.core.api import start_app, stop_app
     stop_app(app_package)
     start_app(app_package)
     recorder_queue.put(test_name)  # 这里启动监控
     result = None
     try:
         result = func(*args, **kwargs)
     except Exception as e:
         logger.error(e)
         logger.error(traceback.format_exc())
     recorder_queue.put(DefaultConfig.RECORD_CASE_END_MARK)
     time.sleep(1)
     stop_app(app_package)
     print(f"测试结束 {test_name}")
     stop_case(test_name)
     time.sleep(5)
     return result
示例#14
0
 def login(self, username, password):
     self.poco1 = AndroidUiautomationPoco()
     if self.poco1(text="Sign in").exists():
         self.poco1(text="Sign in").click()
         sleep(1.0)
         self.poco1("android.widget.LinearLayout").offspring("android.widget.RelativeLayout").child("android.widget.LinearLayout").child("android.widget.LinearLayout").child("android.widget.LinearLayout").child("android.widget.ImageView").click()
         sleep(1)
         self.poco1(text="Username").click()
         sleep(1)
         text(username)
         sleep(1)
         self.poco1("android.widget.LinearLayout").offspring("android.widget.RelativeLayout").child("android.widget.LinearLayout").child("android.widget.LinearLayout")[2].child("android.widget.EditText").click()
         sleep(1)
         #有的手机text()方法不起作用
         shell("input keyboard text %s"%password)
         shell("input keyevent 4")
         sleep(1)
         self.poco1("android.widget.LinearLayout").offspring("android.widget.RelativeLayout").child("android.widget.LinearLayout").child("android.widget.LinearLayout")[3].child("android.widget.TextView").click()
         sleep(7)
     else:
         print("登录弹框未出现")
         start_app("com.gameholic.drawsomethingbyspider")
示例#15
0
def runTest():
    stop_app("com.gameholic.drawsomethingbyspider")
    clear_app("com.gameholic.drawsomethingbyspider")
    wake()
    home()
    start_app("com.gameholic.drawsomethingbyspider")
    sleep(7)
    permissionClick()
    autoUpdate()
    login("wn10001", "z123456")
    waitLogin()
    sleep(5)
    poco = UnityPoco()


    #进入商店
    poco("Shop").click()
    sleep(1)
    #关闭购买去广告提示弹框

    if poco("BitchPopup").child("Image").child("Image").exists():
        print("弹出支付去广告成功")
        poco("Button").child("Text").click()
        if not poco("BitchPopup").child("Image").child("Image").exists():
            print("关闭弹框成功")
        sleep(1)
    #关闭商店
    poco("Return").click()
    sleep(1)
    if not poco(text="Limited").exists():
        print("退出商店成功")
    poco("Shop").click()
    sleep(1)
    #关闭购买去广告提示弹框
    if poco("BitchPopup").child("Image").child("Image").exists():
        print("弹出支付去广告成功")
        poco("Button").child("Text").click()
        sleep(1)
    #切换标签和购买
    #切换所有标签
    poco(text="Gift").click()
    sleep(1)
    if poco("PropName").get_text() == "Marvellous Gift":
        print("切换礼物标签成功")
    poco("Text (2)").click()
    sleep(1)
    if poco("PropName").get_text() == "Speed-up":
        print("切换到道具标签成功")
    poco(text="Diamonds").click()
    sleep(1)
    if poco(text="Super Gems Pack").get_text() == "Super Gems Pack":
        print("切换钻石标签成功")
    poco(text="Limited").click()
    sleep(1)
    if not poco("PropName").exists():
        print("切换到礼包标签成功")
    poco(text="Monster").click()    
    sleep(1)
    if poco(text="Green Fluffy").get_text() == "Green Fluffy":
        print("切换到怪物标签成功")
    #滑动列表
    poco(texture="monster_A1_1").wait_for_appearance()
    poco(texture="monster_A1_1").click()
    beforSwipe = poco(texture="monster_A1_1").get_position()
    
    poco.swipe([300.0/576, 850.0/1024],[300.0/576, 150.0/1024])
    sleep(2)
    afterSwipe = poco(texture="monster_A1_1").get_position()
    if beforSwipe != afterSwipe:
        print("滑动列表成功")
    else:
        print("滑动列表失败")
    #滑动回顶部
    poco.swipe([300.0/576, 150.0/1024],[300.0/576, 850.0/1024])
    sleep(2)
    #购买逻辑
    poco("Tree").child("ShopProp(Clone)")[0].child("BuyIt").child("Text").click()
    sleep(2)
    buyConfirm = poco("lable").get_text()
    if buyConfirm == "Confirm to purchase":
        print("打开确认购买弹框成功")
    #取消购买
    poco(text="Cancel").click()
    sleep(1)
    if not poco(text="Confirm to purchase").exists():
        print("取消购买成功")
    #wn10001购买怪物成功
    buy()
    #切换到钻石标签查看sdk调出
    poco(text="Diamonds").click()
    sleep(1)
    if poco(text="Super Gems Pack").get_text() == "Super Gems Pack":
        print("切换钻石标签成功")
    buy()

    #完成测试
    stop_app("com.gameholic.drawsomethingbyspider")
    sleep(2.0)
    snapshot(msg="app stopped")
    print("shop finish test")
示例#16
0
def poco(request, driver_class):
    # connect_device()
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco

    case_name = request.node._nodeid
    airtestlog = request.config.getoption("airtestlog")
    if airtestlog:
        split_path = request.module.__file__.split(PROJ_NAME)
        log_parentdir = split_path[0] + PROJ_NAME + '\\' + GL.REPORT_DIR
        if not os.path.exists(log_parentdir):
            os.mkdir(log_parentdir)
        jkbuildid = request.config.getoption("--jkbuildid")
        jkjobname = request.config.getoption("--jkjobname")

        if jkbuildid != -1 and jkjobname:
            logdir = os.path.join(log_parentdir, jkjobname)
            if not os.path.exists(logdir):
                os.mkdir(logdir)
            logdir = os.path.join(logdir, jkbuildid)
            if not os.path.exists(logdir):
                os.mkdir(logdir)
        else:
            logdir = log_parentdir
        #log_subdir = request.module.__name__+' '+request.function.__name__
        logdir = os.path.join(logdir, request.module.__name__)
        if not os.path.exists(logdir):
            os.mkdir(logdir)
        logdir = os.path.join(logdir, request.function.__name__)
        if not os.path.exists(logdir):
            os.mkdir(logdir)
        print('    logdir: ', logdir)
        #request.logdir=logdir
        G.LOGGING.debug('logdir: %s' % logdir)
        set_logdir(logdir)

    airtesthtml = request.config.getoption("airtesthtml")
    if airtesthtml and airtestlog:
        from airtest.report.report import custom_report
        from airttest_settings import jk_server, static_server
        case_info = {"name": case_name, "desc": request.node.function.__doc__}

        if jkbuildid != -1 and jkjobname:
            #'http://xx.xx.x.x:8080/jenkins/job/JOBNAME/ws/report/JOBNAME/'
            print('jk jk_server: ', jk_server)
            #jk_logdir=logdir.split(PROJ_NAME)[1]
            #print('jk log dir: ',jk_logdir)
            #online_report=jk_server+'/job/'+jkjobname+'ws'+jk_logdir.replace('\\','/')+'/'
            online_path = jk_server + '/job/' + jkjobname + '/ws/'
            static_root = jk_server + '/job/' + jkjobname + '/ws/files/statics/'
        else:
            online_path = None
            static_root = None

    startapp = request.config.getoption("startapp")
    print('startapp: ', startapp)
    print('type(startapp): ', type(startapp))
    if startapp == True or startapp == 'True':
        clear_app(APP_PACKAGE)
        print('conftest: start app')
        start_app(APP_PACKAGE)

    poco = AndroidUiautomationPoco(use_airtest_input=True,
                                   screenshot_each_action=True)
    yield poco

    #yield driver_class

    def dr_finalizer():
        stopapp = request.config.getoption("stopapp")
        if stopapp == True or stopapp == 'True':
            stop_app(APP_PACKAGE)
            clear_app(APP_PACKAGE)
            print()
            print('conftest: stop app')

        if airtesthtml and airtestlog:
            custom_report(case_info,
                          logdir,
                          online_path=online_path,
                          proj_name=PROJ_NAME,
                          static_root=static_root)

    request.addfinalizer(dr_finalizer)
示例#17
0
 def startApp(self,package,device):
     if G.DEVICE == None:
         connect_device(device)
     print("start_app(package)")
     print(start_app(package))
示例#18
0
def tests_runner(main_script, file_config):
    # читаем конфиг из config-файла
    package, data_config = read_data_from_config(file_config)
    gl_report = []

    # на сколько я понял это каждый раз открывает новое соединение
    
    '''
    # подключаемся к девайсу
    if run_on_emulator: # для эмулятора
        init_device(platform='Android', cap_method='JAVACAP', ori_method='ADBORI')
    else: # для девайса
        init_device(platform='Android')
        log('Init Device')
    '''
    init_device(platform='Android')
    dev = device()
    poco = UnityPoco()

    # вроде всё готово для тестов:
    t0 = time.time();
    out('Cases::tests_runner()... started')
    
    # выставляем значения по умолчанию потому что предыдущего теста не было
    last_test_stop_app = False
    need_wake = True
    # for line in data_csv:
    for line in data_config:
        # из config-файла
        test_id, f_wake, f_stop_before, f_clear_app, f_push_saves, \
        f_start_app, f_stop_after = parse_line_from_config(line)
    
        if need_wake:
            f_wake = True
            need_wake = False
    
        if last_test_stop_app:
            f_stop_before = True
            f_start_app = True
            last_test_stop_app = False
    
        # создаём логирование
        log_path = 'report(' + test_id + ')'
        set_logdir(log_path)
    
        #  пробуждаем устройство
        if f_wake: 
            wake()
            
        #  останавливаем приложение
        if f_stop_before: 
            stop_app(package);
            time.sleep(1)

        #  отчистить даные приложения            
        if f_clear_app: 
            clear_app(package)
            
        #  подсовываем сэйвы
        if f_push_saves != '': 
            push_my_saves(f_push_saves, package)
            
        #  стартуем приложение
        if f_start_app: 
            start_app(package)
            time.sleep(10)
            poco = UnityPoco()

        # запускаем тест
        tt0 = time.time();
        result, runned = test_runner(dev, poco, test_id)
        dtt = time.time() - tt0
        print('test: ' + test_id + '; ' + \
              'runned: ' + str(runned) + '; ' + \
              'result: ' + str(result) + '; ' + \
              'time(sec): ' + str(int(dtt)))
        print('-----------------------')
        if not result:
            last_test_stop_app = True
            f_stop_after = True
        gl_report.append([test_id, runned, result, dtt])
        
        #  останавливаем приложение
        if f_stop_after: 
            last_test_stop_app = True
            stop_app(package)
            
        # далее обязательная секция чтобы сгенерить отчёт
        report_path = get_log_path(main_script, log_path)
        print(report_path)
        simple_report(main_script, report_path, output='report(' + test_id + ').html')

    t1 = time.time()
    out('Cases::tests_runner()... complete (' + str(t1 - t0) + ' sec)')

    # заключительный репорт gl_report
    log_path = 'report'
    set_logdir(log_path)

    for gl_data in gl_report:
        txt = gl_data[0] + ' '
        prop = ''
        if not gl_data[1]:
            prop += 'тест не найден'
        else:
            txt += '(' + str(int(gl_data[3])) + ' sec)'
            if not gl_data[2]:
                prop += 'тест не пройден'
        out(txt, prop)

    # далее обязательная секция чтобы сгенерить отчёт
    report_path = get_log_path(main_script, log_path)
    print(report_path)
    simple_report(main_script, report_path, output='global_report.html')
 def setUpClass(cls):
     super(CalculatorCase, cls).setUpClass()
     cls.package_name = 'com.google.android.calculator'
     apk_path = cls.R('res/app/com.google.android.calculator.apk')
     install_android_app(current_device().adb, apk_path)
     start_app(cls.package_name)
 def test_my(self, ios_poco):
     """ 测试'我的' """
     start_app(self.PACKAGENAME)
     self.page = MainPage(ios_poco)
     self.page.my()
     assert self.page.poco("立即登录")
示例#21
0
 def _start_app(self,package:Key, activity=None):
     '''
     启动指定app
     :return:
     '''
     start_app(package.value, activity)
示例#22
0
def init_app(package: str):
    if package_opened(package):
        stop_app(package)
    start_app(package)
示例#23
0
def setUpModule():
    connect_device("Android://127.0.0.1:5037/DA08196340368")
    start_app('com.caibaopay.cashier')