Пример #1
0
class PerTest_QIPAIHALL_Backpack(TestCase):
    '''
    物品箱操作
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 5

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.backpack_Page = Backpack_Page()

    def run_test(self):
        '''
        测试步骤
        1、大厅点击物品箱入口
        2、点击兑换记录
        3、点击大厅同步标志,退出物品箱
        '''
        self.hall_page.wait_element("同步标志")

        #点击大厅物品箱入口
        self.start_step("点击大厅物品箱入口")
        self.common.sendTagBroadcast(EnumSceneName.Backpack,
                                     EnumSceneType.Start)

        try:
            #点击物品箱入口
            self.hall_page.get_element("物品箱", 0).click()
            time.sleep(2)
            self.backpack_Page.wait_element("同步标志")
            self.common.taskScreenShot("openBackpackPop.jpg")

            #查看物品箱兑换记录
            self.start_step("查看物品箱兑换记录")
            self.backpack_Page.get_element("兑换记录按钮", 0).click()
            self.backpack_Page.wait_element("兑换记录框同步标志")
            self.common.taskScreenShot("openBackpackPop.jpg")
            self.backpack_Page.get_element("兑换记录框关闭", 0).click()
        except:
            print "操作物品箱失败"
        finally:
            self.common.checkPopVisible(self.backpack_Page)
            self.hall_page.wait_element("同步标志")

        time.sleep(5)
        self.common.sendTagBroadcast(EnumSceneName.Backpack,
                                     EnumSceneType.Stop)
Пример #2
0
class PerTest_QIPAIHALL_SafeBox(TestCase):
    '''
    保险箱操作
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 5

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.safeBox_Page = Safebox_Page()

    def run_test(self):
        '''
        测试步骤
        1、大厅点击保险箱入口   每次进入都会先金进入银币tab,不用再单独天机银币tab
        3、点击金币保险箱
        4、退出
        '''
        self.hall_page.wait_element("同步标志")

        self.start_step("点击大厅保险箱入口")
        self.common.sendTagBroadcast(EnumSceneName.SafeBox,EnumSceneType.Start)

        try:
            #点击物品箱入口
            self.hall_page.get_element("保险箱",0).click()
            time.sleep(2)
            self.safeBox_Page.wait_element("同步标志")
            self.common.taskScreenShot("silverSafebox.jpg")

            #操作金币保险箱
            self.start_step("操作金条保险箱")
            self.safeBox_Page.get_element("金条tab",0).click()
            time.sleep(1)
            self.common.taskScreenShot("goldSafebox.jpg")
        except:
            self.common.platformLog("操作保险箱失败")

        finally:
            self.common.checkPopVisible(self.safeBox_Page)
            self.hall_page.wait_element("同步标志")

        time.sleep(5)
        self.common.sendTagBroadcast(EnumSceneName.SafeBox, EnumSceneType.Stop)
Пример #3
0
class PerTest_QIPAIHALL_Setting(TestCase):
    '''
    设置界面显示
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 60

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.setting_page = Setting_Page()
        #通过xpath获取items,是完全返回  因此针对一页显示的item数进行操作
        self.helpItemCount = 5

    def run_test(self):
        '''
        测试用例
        操作步骤:
        1、关闭悬浮球(若已是关闭状态则先打开再关闭)
        2、静音关闭(若已是关闭状态则先打开再关闭)
        3、读牌打开(若已是打开状态则先关闭再打开)
        4、音效、音乐、聊天、震动、比赛围观打开(若已是打开状态则先关闭再打开)
        5、关于查看,四个标签操作步骤:关于--服务协议--隐私策略--版号申明  列表项均滑动  从版号申明往前一直到关于我们  然后点击返回按钮返回设置页面
        6、关于游戏帮助目前所打包不支持,暂不操作
        '''
        self.hall_page.wait_element("同步标志")
        self.common.sendTagBroadcast(EnumSceneName.Setting,
                                     EnumSceneType.Start)
        try:
            self.start_step("点击大厅设置入口")
            self.hall_page.get_element("设置").click()
            self.setting_page.wait_element("同步标志")
            self.common.taskScreenShot("openSettingPop.jpg")
            # 操作各切换按钮
            self.start_step("操作各切换按钮")
            self.common.switchBtn("浮动球开关", "浮动球状态", True)
            self.common.taskScreenShot("closeFloatBall.jpg")
            self.common.switchBtn("静音开关", "静音状态", True)
            self.common.switchBtn("读牌开关", "读牌状态", False)
            self.common.switchBtn("聊天开关", "聊天状态", False)
            self.common.switchBtn("震动开关", "震动状态", False)
            self.common.switchBtn("比赛围观开关", "比赛围观状态", False)

            # 查看关于弹框
            self.start_step("查看关于内容")
            self.setting_page.get_element("关于入口", 0).click()
            self.setting_page.wait_element("关于同步标志")
            self.common.taskScreenShot("setting_about_pop.jpg")
            self.setting_page.get_element("关于我们").click()
            time.sleep(1)
            self.setting_page.get_element("服务协议").click()
            time.sleep(1)
            self.setting_page.get_element("隐私策略").click()
            time.sleep(1)
            self.setting_page.get_element("版本声明").click()
            time.sleep(1)
            self.setting_page.get_element("退出关于", 0).click()

            #查看游戏帮忙
            self.start_step("查看游戏帮助")
            self.setting_page.get_element("游戏帮助入口").click()
            self.setting_page.wait_element("游戏帮助同步标志")
            self.common.taskScreenShot("setting_help_pop.jpg")
            tabList = self.setting_page.get_element("tab列表")
            tabItems = self.setting_page.get_elements("tabItem")
            self.start_step("切换tab,查看不同类型游戏帮助")
            for i in range(self.helpItemCount):
                if (tabItems[i] != None):
                    tabItems[i].click()
                    time.sleep(1)
            if (len(tabItems) > self.helpItemCount):
                self.start_step("滑动左侧tab列表")
                self.common.swipeList(tabList)
            self.setting_page.get_element("退出游戏帮助").click()

            # 退出设置弹框
            self.setting_page.get_element("退出设置", 0).click()
        except:
            self.common.platformLog("设置页面操作失败")
        finally:
            self.common.checkPopVisible(self.setting_page)
            self.hall_page.wait_element("同步标志")

        time.sleep(5)
        self.common.sendTagBroadcast(EnumSceneName.Setting, EnumSceneType.Stop)
Пример #4
0
class C27541_ChatOpoenWhenMyTurn(TestCase):
    '''
    打开聊天界面,输入聊天时轮到自己出牌,查看界面显示
    '''
    owner = "LukeJiang"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 15
    try_find_time = 5
    child_game_timeout = 5
    # game1500 鞍山麻将 -- 网络特么的有问题
    # game24 五狼腿 -- 网络特么的有问题
    # game23 托三批
    # 1502 三打一
    # game25 升级 -- 网络有问题
    # game2603 -- 五十k  -- 网络有问题
    # game203 -- 斗地主
    # 棋牌类没有准备按钮, 并且游戏结束后会自动跳出界面,忽略棋牌类游戏
    excluded_game = ['game20', 'game2002', 'game1500', 'game1502', 'game24', 'game23', 'game25', 'game2603']
    level = 0

    def init(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.setting_page = Setting_Page()
        self.game_page = Game_Page()
        self.person_info_page = Personinfo_Page()
        self.start_step("初始化driver")
        self.luadriver = self.common.setupdriver()
        self.start_step("关闭弹出框")
        self.common.closeactivity(self.luadriver)

    def log_info(self, msg):
        self.log.info(msg)

    def _restart_app(self):
        # 重启游戏
        # driver quite
        self.common.closedriver()
        # recreate driver
        self.init()

    def pre_test(self):
        self.log = Logger().get_logger()
        self.log_info("TestCase: 打开聊天界面,输入聊天时轮到自己出牌,查看界面显示")
        self.init()

    def run_test(self):
        self.common.switchserver()
        self.start_step("关闭弹出框")
        self.common.closeactivity(self.luadriver)
        time.sleep(15)
        self.kill_popup_windom()

        self.loop_current_page_game()
        self.log_info("第二页游戏")
        self.game_page.wait_element("右三角标", timesleep=1).click()
        self.loop_current_page_game()

    def _is_in_tray(self):
        is_in_tray = True
        chat_btn = None
        try:
            chat_btn = self.game_page.get_element("牌局开始时聊天按钮", timesleep=1)
        except:
            pass
        if chat_btn:
            chat_btn.click()
            chat_record = None
            try:
                chat_record = self.game_page.get_element("聊天记录")
            except:
                pass
            if chat_record:
                self.luadriver.keyevent(4)
                is_in_tray = False
        return is_in_tray

    def _cancel_tray(self):
        self.game_page.wait_element("房间内菜单").click()
        self.game_page.wait_element("托管").click()

    def loop_current_page_game(self):
        i = self.try_find_time
        game_list = []
        while i:
            game_list = self.game_page.get_game_list()
            if len(game_list) != 0:
                break
            i = i - 1
            time.sleep(1)
        if len(game_list) == 0:
            raise Exception("子游戏列表为空")

        for game in game_list:
            game_name = game.get_attribute('name')
            self.log_info("====准备进入子游戏:%s====" % game_name)
            if game_name in self.excluded_game:#['game20', 'game2002']:
                continue

            r_v = PHPInterface.set_match_config(game=int(game_name.replace("game", "")), basechiptype=0, playmode=0,
                                                roomlevel=12+self.level,
                                                baseconfig="BASE_CHIPS=>100,HIGH_LIMIT=>-1,HIGH_LIMIT_EXIT=>-1,SERVICE_FEE=>10,ADDROBOTFLAG=>1,ROBOT_MAX_NUMBER=>2",
                                                extraconfig="")
            self.log_info("设置场次接口返回值:%s" % str(r_v))

            if self.enter_game_room(game_name, find_in_elements=False, level=self.level):
                self.ready()
                # 游戏开始后
                while 1:
                    if not self.try_find_element("换桌"):
                        break
                    time.sleep(1)

                while 1:
                    try:
                        chat = self.try_find_element("牌局开始时聊天按钮", page_object=self.game_page)
                        if chat:
                            chat.click()
                        else:
                            chat = self.try_find_element("聊天", page_object=self.game_page)
                            if chat:
                                chat.click()
                        self.game_page.get_element("聊天记录", timesleep=1).click()
                        self.log_info("等到我出牌")
                        while 1:
                            my_turn = self.try_find_element("timer_light_1", find_in_elements=False)
                            if my_turn:
                                self.log_info("到我出牌")
                                break
                            else:
                                my_turn = self.try_find_element("prompt", find_in_elements=False)
                                if my_turn:
                                    self.log_info("到我出牌")
                                    break
                            time.sleep(1)
                        self.game_page.screenshot('my_turn_chat_%s.png' % game_name)
                        count = self._check_button_count()
                        if count != 3:
                            raise Exception("当前界面不对")
                        break
                    except:
                        pass
                self.luadriver.keyevent(4)
                self.wait_for_gameover()
            self.back_to_hall()

    def enter_game_room(self, target_gamename, find_in_elements=True, level=0, page_object=None):
        self.log_info("准备进入子游戏:%s" % target_gamename)
        # 在当前页中点击target子游戏
        child_game = None
        i = self.try_find_time
        while i:
            time.sleep(1)
            self.log_info("获取子游戏:%s" % target_gamename)
            try:
                if find_in_elements:
                    child_game = self.hall_page.get_element(target_gamename)  # self.luadriver.find_lua_element_by_name(target_gamename)
                else:
                    child_game = self.try_find_element(target_gamename, find_in_elements=False)#self.luadriver.find_lua_element_by_name(target_gamename)
            except:
                pass
            if child_game:
                break
            i = i - 1
        if child_game:
            self.log_info("点击子游戏:%s" % target_gamename)
            child_game.click()
        else:
            next_page = self.try_find_element("right_arrow", find_in_elements=False, try_time=self.try_find_time)#self.luadriver.find_lua_element_by_name("right_arrow")
            if next_page:
                next_page.click()
            time.sleep(1)
            if find_in_elements:
                child_game = self.hall_page.wait_element(target_gamename)
            else:
                child_game = self.try_find_element(target_gamename, find_in_elements=False)
            if child_game:
                child_game.click()

        if not child_game:
            raise Exception("获取不到子游戏")
        retry_btn = None
        try:
            retry_btn = self.game_page.get_element("重新获取1")
            self.luadriver.keyevent(4)
        except:
            pass
        if retry_btn:
            return False
        # 判断是否需要下载资源
        download_btn = None
        try:
            download_btn = self.game_page.get_element("资源下载-确定")
        except:
            pass
        room_showed = False
        if download_btn:
            download_btn.click()
            # 等待资源下载完成, 等待结束条件: 场次UI出现
            self.log_info("开始下载游戏")
            while 1:
                if self.element_exists("swf_view", find_in_elements=False):
                    break
                if self.element_exists("房间场次", find_in_elements=True, page_object=self.game_page):
                    room_showed = True
                    break
                time.sleep(1)
                #if self.game_page.wait_element("房间场次", timeout=60 * 10, frequency=1):
                    #break
        else:
            if not self.element_exists("swf_view", find_in_elements=False, try_time=self.try_find_time):
                room_showed = True

        if not room_showed:
            market_btns = self.try_find_elements("swf_view", find_in_elements=False, try_time=self.try_find_time)
            self.log_info("斗地主金银场次选择:%s" % str(market_btns))
            if len(market_btns) == 0:
                raise Exception("获取不到金银场次选择")
            market_btns[0].click()
            time.sleep(2)
            level_btns = self.game_page.wait_element("叫抢初级场").click()
            #self.log_info("斗地主初中高场次选择:%s" % str(level_btns))
            #if len(level_btns) == 0:
             #   raise Exception("获取不到初中高场次选择")
            #level_btns[0].click()
            return True
        else:
            level = "初级场" if level == 0 else "中级场" if level == 1 else "高级场"
            # 点击初级场
            self.log_info("点击%s" % level)
            self.game_page.wait_element(level).click()

            return True

    def element_exists(self, name, find_in_elements=True, try_time=1, page_object=None, timesleep=0.5):
        time.sleep(timesleep)
        target_element = None
        i = try_time
        while i:
            try:
                if find_in_elements:
                    target_element = page_object.get_element(name, timesleep=1)  # self.luadriver.find_lua_element_by_name(target_gamename)
                else:
                    target_element = self.luadriver.find_lua_element_by_name(name)
            except:
                pass
            if target_element:
                break
            i = i - 1
        if target_element:
            return True
        return False

    def try_find_element(self, name, find_in_elements=True, try_time=1, page_object=None):
        target_element = None
        i = try_time
        while i:
            try:
                if find_in_elements:
                    target_element = page_object.get_element(name, timesleep=1)  # self.luadriver.find_lua_element_by_name(target_gamename)
                else:
                    target_element = self.luadriver.find_lua_element_by_name(name)
            except:
                pass
            if target_element:
                break
            i = i - 1
        return target_element

    def try_find_elements(self, name, find_in_elements=True, try_time=1, page_object=None):
        target_elements = []
        i = try_time
        while i:
            try:
                if find_in_elements:
                    target_elements = page_object.get_elements(name, timesleep=1)  # self.luadriver.find_lua_element_by_name(target_gamename)
                else:
                    target_elements = self.luadriver.find_lua_elements_by_name(name)
            except:
                pass
            if target_elements:
                break
            i = i - 1
        return target_elements if target_elements != None else []

    def wait_for_hallstable(self):
        self.log_info("等待大厅稳定")
        end_time = time.time() + self.child_game_timeout * 60
        while 1:
            game_list = self.game_page.get_game_list()
            if len(game_list) != 0:
                break
            if time.time() > end_time:
                raise Exception("等待大厅超时")
            time.sleep(1)
        return True

    def back_to_hall(self, back_time=4):
        self.log_info("返回到大厅")
        for i in range(back_time):
            self.luadriver.keyevent(4)
            time.sleep(0.5)
        while 1:
            if self.wait_for_hallstable() and not self.element_exists("title", find_in_elements=False, try_time=2):
                break
            else:
                self.luadriver.keyevent(4)
        return True

    def ready(self):
        # 有准备的按准备
        self.log_info("有无准备按钮")
        i = self.try_find_time
        while i:
            ready_btn = None
            try:
                ready_btn = self.game_page.get_element("准备", timesleep=1)
            except:
                pass
            if ready_btn:
                self.log_info("点击准备按钮")
                ready_btn.click()
                # 新斗地主,准备按钮会在一瞬间消失,此时点击准备按钮会跑在(0,0)位置
                if self.element_exists("退出", page_object=self.game_page, timesleep=1):
                    self.log_info("点击准备按钮, 存在退出按钮")
                    self.luadriver.keyevent(4)
                break
            i = i - 1

    def wait_for_gameover(self):
        self.log_info("等待游戏结束")
        end_time = time.time() + self.child_game_timeout * 60
        jdz_has_clicked = False
        ddz_qf_clicked = False
        end_tag_showed = False
        close_btn_showed = False
        while 1:
            # 超时10分钟, 睡眠间隔2s
            ddz_gameover = self.try_find_element("ddz_gameover", find_in_elements=False)
            # ready_btn = self.game_page.wait_element("牌局结束标志", timeout=60 * self.child_game_timeout, frequency=2)
            if ddz_gameover:
                end_tag_showed = True
                self.log_info("ddz_gameover: 牌局已结束")
            close_btn = self.try_find_element("关闭按钮", page_object=self.hall_page)
            if close_btn:
                close_btn.click()
                close_btn_showed = True
                self.log_info("关闭按钮: 牌局已结束")
            if end_tag_showed or close_btn_showed:
                break
            share_btn = self.try_find_element("share_btn", find_in_elements=False)
            if share_btn:
                self.log_info("share_btn: 牌局已结束")
                self.try_find_element("close_btn", find_in_elements=False, try_time=3).click()
                close_btn_showed = True
                break
            if not jdz_has_clicked:
                jdz = self.try_find_element("callLordBtn", find_in_elements=False)
                if jdz:
                    jdz.click()
                    # 新斗地主,叫地主按钮会在一瞬间消失,此时点击准备按钮会跑在(0,0)位置
                    if self.element_exists("退出", page_object=self.game_page, timesleep=1):
                        self.log_info("点击叫地主, 存在退出按钮")
                        self.luadriver.keyevent(4)
                    jdz_has_clicked = True
                    self.log_info("点击叫地主")
            if not ddz_qf_clicked:
                qf = self.try_find_element("叫抢场1分", page_object=self.game_page)
                if qf:
                    qf.click()
                    self.log_info("点击抢分1分")
                    ddz_qf_clicked = True
                    if self.element_exists("退出", page_object=self.game_page, timesleep=1):
                        self.log_info("点击叫抢场1分, 存在退出按钮")
                        self.luadriver.keyevent(4)
            if time.time() > end_time:
                self.log_info("游戏超时")
                raise Exception("玩游戏超时")

    def _check_button_count(self):
        count = 0
        common_btn = None
        try:
            common_btn = self.luadriver.find_lua_element_by_name("commonTabBtn")
        except:
            pass
        face_btn = None
        try:
            face_btn = self.luadriver.find_lua_element_by_name("faceTabBtn")
        except:
            pass
        chat_record = None
        try:
            chat_record = self.luadriver.find_lua_element_by_name("chatRecordTabIcon")
        except:
            pass
        if common_btn:
            count = count + 1
        if face_btn:
            count = count + 1
        if chat_record:
            count = count + 1
        return count

    def post_test(self):
        self.log_info("post test")
        #self.common.deletefile(self.luadriver)
        self.luadriver.quit()

    def kill_popup_windom(self, backtime=4):
        # 每日签到
        popup = self.try_find_element("signupTips1", find_in_elements=False, try_time=2)
        if popup:
            self.log_info("每日签到存在")
            sign = self.try_find_element("rewardIcon", find_in_elements=False, try_time=2)
            if sign:
                sign.click()
                time.sleep(3)
                self.try_find_element("closeBtn", find_in_elements=False, try_time=2).click()
        # 问卷调查 暂时没法标识
        # 无条件back 4次
        for i in range(backtime):
            self.luadriver.keyevent(4)
            time.sleep(0.5)
        # 新手礼包
        reward = self.try_find_element("login_money_anim", find_in_elements=False, try_time=2)
        if reward:
            t = self.try_find_element("领新手礼包", page_object=self.hall_page)
            if t:
                t.click()
        while 1:
            if not self.try_find_element("exitGameView", find_in_elements=False, try_time=2):
                break
            else:
                self.luadriver.keyevent(4)
Пример #5
0
class PerTest_QIPAIHALL_Task(TestCase):
    '''
    任务场景
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 60

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.task_page = Task_Page()

    def run_test(self):
        '''
        任务场景测试步骤
        :return:
        '''
        self.hall_page.wait_element("同步标志")
        self.start_step("点击大厅任务入口")
        self.common.sendTagBroadcast(EnumSceneName.Task, EnumSceneType.Start)
        try:
            self.hall_page.get_element("任务", 0).click()
            self.task_page.wait_element("同步标志")
            self.task_page.wait_element("每日签到tab").click()
            time.sleep(2)
            self.common.taskScreenShot("qiandaoView.jpg")

            #若今日签到按钮存在,则点击
            try:
                #若按钮存在并签到成功,会直接跳转到补签页面
                self.task_page.get_element("签到按钮", 0).click()
                time.sleep(1)
            except:
                self.common.platformLog("今日签到按钮不存在or领取今日签到奖励失败")

            #查看购买补签卡界面
            self.start_step("购买补签卡界面")
            self.task_page.wait_element("获取补签卡").click()
            self.task_page.wait_element("补签卡购买框同步标志")
            self.common.taskScreenShot("buyBuqianPop.jpg")
            self.task_page.get_element("取消购买补签卡").click()
            time.sleep(1)

            #进行补签操作,目前没有实际进行补签操作  只是查看补签框
            # try:
            #     buItmes = self.task_page.get_elements("补签item")
            #     print "长度:"+len(buItmes)
            #     if(buItmes != None and len(buItmes) > 0):
            #         buItmes[0].click()
            #         self.task_page.wait_element("补签对话框标志")
            #         time.sleep(1)
            #         self.task_page.get_element("关闭补签对话框").click()
            #     else:
            #         print "!! buItmes != null and len(buItmes) > 0"
            # except:
            #     print "没有可补签项,或执行补签操作失败"

            #查看每日任务列表,若列表可滑动则进行滑动操作
            self.start_step("查看每日任务界面")
            self.task_page.get_element("每日任务tab").click()
            try:
                listView = self.task_page.wait_element("taskList")
                self.common.taskScreenShot("taskView.jpg")
                taskItems = self.task_page.get_elements("taskItem", 0)
                if (len(taskItems) > 4):
                    self.start_step("滑动每日任务列表")
                    self.common.swipeList(listView)
            except:
                self.common.platformLog("查看任务列表失败")

            #关闭每日任务弹框
            self.task_page.get_element("关闭按钮", 0).click()
        except:
            self.common.platformLog("操作任务场景失败")
        finally:
            self.common.checkPopVisible(self.task_page)
            self.hall_page.wait_element("同步标志")

        time.sleep(5)
        self.common.sendTagBroadcast(EnumSceneName.Task, EnumSceneType.Stop)
Пример #6
0
class PerTest_QIPAIHALL_Mall(TestCase):
    '''
    商城操作
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 5

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.mall_Page = Mall_Page()

    def run_test(self):
        '''
        测试步骤
        1、大厅点击商城入口
        2、点击第一金条购买item,关闭购买框
        3、滑动金条购买列表
        4、切换到银币购买列表
        5、滑动银币购买列表
        6、切换到道具列表
        7、执行购买第一个道具操作,打开购买弹框后取消购买操作
        8、滑动道具列表
        9、切换到VIP页
        10、返回大厅
        不同类型的商品列表,共用listView和Item
        '''
        self.hall_page.wait_element("同步标志")

        self.start_step("点击大厅商城入口")
        self.common.sendTagBroadcast(EnumSceneName.Mall, EnumSceneType.Start)

        try:
            #点击商城
            self.hall_page.get_element("商城", 0).click()
            time.sleep(2)
            self.mall_Page.wait_element("同步标志")
            self.common.taskScreenShot("openMallPop.jpg")

            #购买金条(选择第一个item)并滑动金条列表
            self.start_step("购买金条")
            self.mall_Page.get_element("item0", 0).click()
            self.mall_Page.wait_element("金条购买框Flag")
            self.common.taskScreenShot("buyGoldPop.jpg")
            self.mall_Page.get_element("金条购买框关闭", 0).click()
            time.sleep(1)
            self.start_step("滑动金条列表")
            self.common.swipeList(self.mall_Page.get_element("物品列表"))

            #切换到银币页并滑动列表
            self.start_step("切换到银币Tab")
            self.mall_Page.get_element("银币Tab", 0).click()
            time.sleep(2)
            self.common.taskScreenShot("silverView.jpg")
            self.start_step("滑动银币列表")
            self.common.swipeList(self.mall_Page.get_element("物品列表"))

            #切换到道具页面,并查看购买道具框,最后滑动列表
            self.start_step("切换到道具Tab")
            self.mall_Page.get_element("道具Tab", 0).click()
            time.sleep(2)
            self.common.taskScreenShot("propView.jpg")
            self.start_step("购买道具")
            self.mall_Page.get_element("item0", 0).click()
            self.mall_Page.wait_element("道具购买框Flag")
            self.common.taskScreenShot("buyPropPop.jpg")
            self.mall_Page.get_element("道具购买框关闭", 0).click()
            time.sleep(1)
            self.start_step("滑动道具列表")
            self.common.swipeList(self.mall_Page.get_element("物品列表"))

            #切换到VIP
            self.start_step("切换到VIPTab")
            self.mall_Page.get_element("VIPTab", 0).click()
            time.sleep(2)
            self.common.taskScreenShot("vipView.jpg")

            #关闭商城弹框
            self.mall_Page.get_element("商城关闭", 0).click()

        except:
            self.common.platformLog("操作商城失败")

        finally:
            self.common.checkPopVisible(self.mall_Page)
            self.hall_page.wait_element("同步标志")

        time.sleep(5)
        self.common.sendTagBroadcast(EnumSceneName.Mall, EnumSceneType.Stop)
Пример #7
0
class C27363_Go_Broke(TestCase):
    '''
    携带银币不足最小房间下限时点击房间入场
    '''
    owner = "ShelleyZhang"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 30
    def pre_test(self):
        try:
            self.common = Common()
            self.hall_page = Hall_Page()
            self.yuepai_page = Yuepai_Page()
            self.game_page = Game_Page()
            self.start_step("获取mid")
            global mid
            mid = self.common.get_config_value("casecfg", "mid")
            # self.start_step("携带10银币")
            # self.common.set_coin(mid=mid,value='10')
            # 初始化Luadriver
            self.start_step("初始化driver")
            self.luadriver = self.common.setupdriver()
            # 每个用例都需要关闭活动,把这个放在初始化里面实现
            self.common.closeactivity(self.luadriver)
        except:
            self.hall_page.get_element("重连游戏").click()

    def bian_li(self,isChange=False):
        game_list = self.game_page.get_game_list()
        for i in range(len(game_list)):
        #得到大厅所有的游戏控件
            name = game_list[i].get_attribute("name")
            gameid = int(name[4:len(name)])
            gamecfg = PHPInterface.get_levelconfig(gameid, 0, 0, 12)
            # 获取场次配置信息
            low_limit = gamecfg.get("values", {"LOW_LIMIT": None}).get("LOW_LIMIT")
            # 初级场下限是%d
            self.common.set_coin(mid, low_limit -10)
            # 选取合适的银币数,少于入场下限
            self.common.switchserver()
            self.common.closeactivity(self.luadriver)
            if isChange and self.hall_page.element_is_exist("换页"):
                self.hall_page.wait_element("换页").click()
            game_list[i].click()
            time.sleep(4)
            try:
                self.game_page.game_is_download()
                #下载游戏
                time.sleep(2)
                self.hall_page.screenshot("%s_1.png" % game_list[i].get_attribute("name"))
                self.hall_page.wait_element("快速开始").click()
                self.hall_page.screenshot("%s_2.png" % game_list[i].get_attribute("name"))
                self.hall_page.wait_element("关闭对话框").click()
                if self.hall_page.wait_element("返回1") != None:
                    self.hall_page.wait_element("返回1").click()
            except:
                try:
                    self.hall_page.wait_element("重新获取").click()
                    self.hall_page.screenshot("%s_downloadfail.png" % game_list[i].get_attribute("name"))
                except:
                    self.log_info("重新获取元素並未存在")

    def run_test(self):
        '''
        测试用例
        '''
        self.start_step("等待页面加载完成")
        self.start_step("获取子游戏列表")
        self.bian_li()
        self.hall_page.wait_element("换页").click()
        self.bian_li(True)

    def post_test(self):
        '''
        测试用例执行完成后,清理测试环境
        '''
        self.common.recover_user(mid)
        self.common.closedriver()
Пример #8
0
class Common():
    def __init__(self):
        self.log = Logger().get_logger()

    def platformLog(self,*arg):
        logStr = ""
        for v in arg:
            if type(v) != str:
                v = str(v)
            logStr = logStr + " " + v
        self.log.info(logStr)

    def setupdriver(self,agrs={}):
        '''初始化driver
        luadriver 用于游戏操作,对应appium
        '''
        # 初始化Luadriver
        self.luaobj = LuaDriver()
        self.luaobj.creatLuaDriver(agrs)
        self.luadriver = self.luaobj.getLuaDriver()
        return self.luadriver

    def closedriver(self):
        '''关闭driver
        '''
        self.luaobj.closeLuadriver()

    def closefloatBall(self):
        self.hall_page = Hall_Page()
        self.setting_page = Setting_Page()
        self.hall_page.wait_element("设置").click()
        try:
            self.setting_page.wait_element("关闭浮动球").click()
        except:
            print "浮动球已经关闭"
        try:
            self.setting_page.wait_element("页面返回").click()
        except:
            print "已经关闭"

    def deletefile(self,driver):
        print "----删除自动登录文件----"
        config = ConfigHelper(constant.cfg_path)
        package =config.getValue('appium', 'apppackage')
        command = "shell rm -r /mnt/sdcard/."+package+"/dict/lastLoginInfo.dat"
        print command
        try:
            driver.adb(command)
        except:
            print "命令执行失败"
        command1 = "shell rm -r /mnt/sdcard/."+package+"/dict/1lastLoginInfo.dat"
        print command1
        try:

            driver.adb(command1)
        except:
            print "命令执行失败"
        command2 = "shell rm -r /mnt/sdcard/."+package+"/dict/2lastLoginInfo.dat"
        try:
            driver.adb(command2)
        except:
            print "命令执行失败"
        print command2

    def closeactivity(self,luadriver):
        '''
       关闭活动页面
       '''
        self.hall_page = Hall_Page()
        time.sleep(20)
        # try:
        #     if(self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")')!=None):
        #         self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")').click()
        # except:
        #     print "未出现允许按钮"

        self.hall_page.wait_element("头像",90)
        # try:
        #     if(self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")')!=None):
        #         self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")').click()
        # except:
        #     print "未出现允许按钮"
        try:
            self.hall_page.wait_element("新手任务",8).click()
        except:
            print "未出现新手任务按钮"
        try:
            self.hall_page.wait_element("确认登陆",2).click()
        except:
            print "未出现登陆按钮"
        try:
            self.hall_page.wait_element("立即升级绑定账号",2).click()
            self.sign_page.wait_element("关闭1",2).click()
        except:
            print "未出现立即升级绑定账号按钮"

        #2017-9-27 JessicZeng  增加关闭版本升级框
        try:
            self.hall_page.wait_element("资源下载-取消",2).click()
        except:
            print "未出现版本升级框"


        self.closeActivityBtn()
        # try:
        #     luadriver.find_element_by_name("允许").click()
        # except:
        #     print "未出现按钮"


    def closeactivity_switchserver(self,luadriver):
        '''
        关闭活动页面,切换到指定服,然后再关闭弹出的活动页面
        :param luadriver:
        :param switchserver:
        :return:
        '''
        self.closeactivity(luadriver)
        self.switchserver_init()
        self.closeactivity(luadriver)

    def switchserver(self):
        '''
        根据cfg文件切换正式服,测试服,预发布服
        @return:
        '''
        self.hall_page = Hall_Page()
        env = self.get_config_value('casecfg', 'env')
        if env=='0':
            try:
                self.hall_page.wait_element("正式服").click()
            except:
                print "切换到正式服失败"
        elif env =='1':
            try:
                self.hall_page.wait_element("测试服").click()
            except:
                print "切换到测试服失败"
        elif env =='2':
            try:
                self.hall_page.wait_element("预发布").click()
            except:
                print "切换到预发布失败"
        else:
            try:
                self.hall_page.wait_element("预发布").click()
            except:
                print "切换到预发布服失败"
    time.sleep(5)

    def switchserver_init(self):
        '''
        根据cfg文件切换正式服,测试服,预发布服
        @return:
        '''
        self.hall_page = Hall_Page()
        env = self.get_config_value('casecfg', 'env')
        if self.hall_page.element_is_exist("测试按钮"):
            self.hall_page.wait_element("测试按钮").click()
            if self.hall_page.element_is_exist("切换环境"):
                self.hall_page.wait_element("切换环境").click()
                if env == '0':
                    try:
                        # while self.hall_page.element_is_exist("正式1", 2):
                            self.hall_page.get_element("正式1").click()
                    except:
                        print "切换到正式服失败"
                elif env == '1':
                    try:
                        # while self.hall_page.element_is_exist("测试1",2):
                            self.hall_page.get_element("测试1").click()
                    except:
                        print "切换到测试服失败"
                elif env == '2':
                    try:
                        # while self.hall_page.element_is_exist("预发布1", 2):
                            self.hall_page.get_element("预发布1").click()
                    except:
                        print "切换到预发布失败"
                else:
                    try:
                        # while self.hall_page.element_is_exist("预发布1", 2):
                            self.hall_page.get_element("预发布1").click()

                    except:
                        print "切换到预发布服失败"
            else:
                self.hall_page.wait_element("关闭测试页面").click()
                if env=='0':
                    try:
                        self.hall_page.wait_element("正式服").click()
                    except:
                        print "切换到正式服失败"
                elif env =='1':
                    try:
                        self.hall_page.wait_element("测试服").click()
                    except:
                        print "切换到测试服失败"
                elif env =='2':
                    try:
                        self.hall_page.wait_element("预发布").click()
                    except:
                        print "切换到预发布失败"
                else:
                    try:
                        self.hall_page.wait_element("预发布").click()
                    except:
                        print "切换到预发布服失败"
            time.sleep(15)

    def closeActivityBtn(self):
        '''
        关闭活动弹框
        :return:
        '''
        self.sign_page = Sign_Page()
        self.hall_page = Hall_Page()
        try:
            self.hall_page.wait_element("新手任务",6).click()
        except:
            print "未出现新手任务按钮"
        i = 0
        while (i < 5):
            i += 1
            try:
                self.sign_page.wait_element("关闭1",3).click()
            except:
                print "关闭对话框"

    def switchnetwork(self, luadriver, network):
        '''
        测试用例运行过程中切换网络
        '''
        if(network == '无网络'):
            print "设置为无网络状态"
            luadriver.set_network_connection(ConnectionType.NO_CONNECTION)
        if(network == 'WIFI模式'):
            print "设置为WIFI模式"
            luadriver.set_network_connection(ConnectionType.WIFI_ONLY)
        if(network == '数据网络'):
            print "设置为数据网络模式"
            luadriver.set_network_connection(ConnectionType.DATA_ONLY)
        if(network == '飞行模式'):
            print "设置为飞行模式"
            luadriver.set_network_connection(ConnectionType.AIRPLANE_MODE)
        if(network == '全部网络打开模式'):
            print "设置为全部网络打开模式"
            luadriver.set_network_connection(ConnectionType.ALL_NETWORK_ON)

    def network_connect(self):
        '''
        2个线程的方式启动网络
        '''
        # print self.luadriver.network_connection
        if self.luadriver.network_connection != 2:
            t1 = threading.Thread(target=self.switch_network)
            t2 = threading.Thread(target=self.closebtn)
            t1.start()
            t2.start()
            t1.join()
            t2.join()

    def switch_network(self):
        '''
        测试用例运行过程中切换网络
        '''
        cmd = "shell am start -n com.example.unlock/.Unlock"
        print "adb start:" + str(time.time())
        self.luadriver.adb(cmd)
        print "adb end:" + str(time.time())

    def closebtn(self):
        time.sleep(1)
        print "closebtn" + str(time.time())
        try:
            self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("确定|允许")').click()
            print "close1" + str(time.time())
        except:
            print "1" + str(time.time())
        try:
            self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("确定|允许")').click()
            print "close2" + str(time.time())
        except:
            print "2" + str(time.time())
        try:
            self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("确定|允许")').click()
            print "close3" + str(time.time())
        except:
            print "3" + str(time.time())

    def swipeelement(self,element1,element2):
        # swipe_startx = element1.location['x']+element1.size['width']/2
        # swipe_starty = element1.location['y']+element1.size['height']/2
        swipe_startx = element1.location['x']
        swipe_starty = element1.location['y']
        # swipe_endx = element2.location['x']+element1.size['width']/2
        # swipe_endy = element2.location['y']+element1.size['height']/2
        swipe_endx = element2.location['x']
        swipe_endy = element2.location['y']
        print swipe_startx, swipe_starty, swipe_endx, swipe_endy
        self.luadriver.swipe(swipe_startx, swipe_starty, swipe_endx, swipe_endy,1000)

    def get_user(self):
        '''
        获取账号信息
        '''
        global user_info
        user_info = user_util.gimme_afree_account()
        while user_info ==None:
            time.sleep(5)
            user_info = user_util.gimme_afree_account()
        return user_info

    def release_user(self,user):
        '''
        释放用户
        '''
        print "release"
        print user
        try:
            user_util.release_account(user)
        except:
            print "release user fail"

    def get_cid(self):
        '''获取用户cid'''
        self.personinfo_page = Personinfo_Page()
        self.personinfo_page.wait_element("头像").click()
        cid = self.personinfo_page.wait_element("账号ID").get_attribute('text')
        print "获取的用户cid为: %s" % cid
        self.personinfo_page.wait_element("关闭").click()
        if (self.personinfo_page.element_is_exist("关闭")):  # 如果弹破产弹框,则关闭
            self.personinfo_page.wait_element("关闭").click()
        return cid

    def get_mid(self):
        cid = self.get_cid()
        time.sleep(3)
        config = ConfigHelper(constant.cfg_path)
        region = config.getValue('casecfg', 'region')
        mid = PHPInterface.get_mid(cid, region)
        print "用户mid为:%s" % mid
        return mid

    def set_coin(self,mid,value):
        # 获取用户银币信息
        result_userinfo = PHPInterface.get_user_info(mid)
        myuser_info = json.loads(result_userinfo)
        coin = myuser_info.get('result', {'coin': None}).get('coin')
        AddMoney = int(value) - int(coin)
        result = PHPInterface.add_money(mid, AddMoney)
        print "用户银币数为:%s" % AddMoney,"加金币执行结果:",result

    def set_crystal(self,mid,value):
        # 设置金条数据
        result_userinfo = PHPInterface.get_user_info(mid)
        myuser_info = json.loads(result_userinfo)
        crystal = myuser_info.get('result', {'crystal': None}).get('crystal')  # 获取当前金条值
        print "用户金条数为:%s" % crystal
        AddMoney = int(value) - int(crystal)
        PHPInterface.add_crystal(mid, AddMoney)

    def loginuser(self,user,passwd):
        self.login_page = Login_Page()
        self.setting_page = Setting_Page()
        self.hall_page = Hall_Page()
        time.sleep(6)
        self.setting_page.wait_element("切换账号").click()
        time.sleep(2)
        try:
            self.setting_page.wait_element("继续登录").click()
        except:
            print "不需要继续切换"
        try:
            self.setting_page.wait_element("删除历史账号").click()
        except:
            print "无历史账号"
        time.sleep(1)
        self.setting_page.wait_element("手机号码").send_keys(user)
        time.sleep(1)
        self.setting_page.wait_element("密码").send_keys(passwd)
        time.sleep(1)
        self.setting_page.wait_element("确认登陆").click()
        time.sleep(10)
        self.hall_page.wait_element("同步标志")
        time.sleep(1)

    def get_idle_userinfo_and_mid(self):
        '''
        获取一个空闲账号的mid
        :return:
        '''
        user_info = self.get_user()
        print user_info
        UserCID = user_info.get('cid')
        config = ConfigHelper(cfg_path)
        region = config.getValue('casecfg', 'region')
        UserMID = PHPInterface.get_mid(UserCID, region)
        mid_and_userinfo = {}
        mid_and_userinfo['userinfo'] = user_info
        mid_and_userinfo['mid'] = UserMID
        return mid_and_userinfo

    def unlock(self):
        #解锁
        self.luadriver.adb("shell am start -n com.example.unlock/.Unlock")
        time.sleep(4)
        self.luadriver.keyevent(3)  # home
        time.sleep(3)
        self.luadriver.adb("shell am start -n com.example.unlock/.Unlock")
        self.luadriver.keyevent(3)  # home
        time.sleep(3)
        print "读配置,拉起游戏"
        config=ConfigHelper(constant.cfg_path)
        self.luadriver.start_activity(config.getValue('appium','apppackage'), config.getValue('appium','appactivity'))

    def get_config_value(self,section,key):
        #从cfg.ini文件获取配置项的值
        config = ConfigHelper(constant.cfg_path)
        value =config.getValue(section, key)
        return value

    def set_config_value(self,section,key,value):
        #设置cfg.ini文件获取配置项的值
        config = ConfigHelper(constant.cfg_path)
        config.modifConfig(section, key,value)
        return True

    def recover_user(self,mid):
        #初始化用户
        self.set_coin(mid,'10000')
        self.set_crystal(mid,"0")
        PHPInterface.set_vip(mid,"-1")
        self.set_safeBoxMoney(mid,0,0)
        self.set_safeBoxMoney(mid,0,1)

    def random_str(self,len):
        '''生成随机字符'''
        str = ""
        for i in range(len):
            str += (random.choice("safsdfsdfoewrweorewcvmdfadfdsafdskafaklvoreiutwuerpmvcmvasieqwoejandfsxmndje"))
        return str

    def set_safeBoxMoney(self,mid, money, money_type):
        #money_type=0银币,1为金条
        safeBoxInfo = PHPInterface.get_safebox(mid)
        if money_type == 0:
            safeBoxMoney=int(safeBoxInfo.get("safebox"))
        else:
            safeBoxMoney = int(safeBoxInfo.get("crystalsafebox"))
                
        if safeBoxMoney - money > 0:
            PHPInterface.withdraw_safebox(mid, safeBoxMoney - money, money_type)
            if money_type ==0:
                PHPInterface.add_money(mid, -(safeBoxMoney - money))
            else:
                PHPInterface.add_crystal(mid, -(safeBoxMoney - money))            
        else:
            if money_type ==0:
                PHPInterface.add_money(mid, money - safeBoxMoney)
            else:
                PHPInterface.add_crystal(mid, money - safeBoxMoney)
            
            PHPInterface.deposit_safebox(mid, money - safeBoxMoney, money_type)

    def room_set_cheat(self, game_list, switch=1):
        for i in range(len(game_list)):
            gameId = filter(lambda ch: ch in '0123456789', game_list[i].get_attribute("name"))
            if switch == 1:
                print "设置子游戏:%s 标准场为作弊场" % gameId
            else:
                print "设置子游戏:%s 标准场为非作弊场" % gameId
            for i in range(4):
                PHPInterface.set_cheat(gameid=gameId, playmode=i, switch=switch)

    def set_robot(self,gameid,level=12,robotflag=0):
        '''
        设置机器人开关
        '''
        gamecfg = PHPInterface.get_levelconfig(gameid, 0, 0, level)
        robotflag1 = gamecfg.get('values', {'ADDROBOTFLAG': None}).get('ADDROBOTFLAG')
        if (robotflag1 != robotflag):
            result = PHPInterface.set_robot_flag(gameid, 0, 0, level, robotflag=robotflag)
            print result
        return True

    def checkPopVisible(self,driver,page,flagElName="同步标志"):
        '''
        根据page同步标志判断弹框是否存在,直至元素不存在或者操作次数操作3次
        :param page: 操作页
        :param flagElName: 同步标志元素name
        :return:
        '''
        cnt = 0
        while cnt < 3:
            try:
                page.get_element(flagElName)
                if driver != None :
                    driver.keyevent(4)
                    print "关闭弹框",page
            except:
                break
            cnt = cnt + 1
Пример #9
0
class PerTest_QIPAIHALL_Rank(TestCase):
    '''
    排行榜操作
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 5
    global rank_item_count
    rank_item_count = 4

    #一页显示item个数

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.rankPage = Rank_Page()

    def run_test(self):
        '''
        测试步骤
        排行榜内容会重置,当关闭或切换tab后回到默认位置  eg。关闭后再打开默认显示今日内容   切换到新tag后,list index变为0
        操作步骤:
        1、检测同步标志是否出现
        2、点击第一个item,操作加好友   然后关闭用户信息弹框回到排行榜页面
        3、点击第二个item,操作举报(不良头像,然后点击举报按钮)
        4、滑动列表到底
        5、切换到富豪榜,滑动一页数据
        6、切换到昨日排行榜,滑动昨日之富豪榜一页数据
        7、切换tab到昨日收益榜  滑动一页数据
        8、关闭弹框,返回大厅
        '''
        self.hall_page.wait_element("同步标志")

        #点击排行榜大厅入口,进入排行榜
        self.start_step("点击大厅排行榜入口")
        self.common.sendTagBroadcast(EnumSceneName.Rank, EnumSceneType.Start)

        try:
            self.hall_page.get_element("排行榜", 0).click()
            time.sleep(2)
            self.rankPage.wait_element("同步标志")
            self.common.taskScreenShot("openRankPop.jpg")
            headEls = self.rankPage.get_elements("用户头像")
            # 查看排行第一的用户信息,并执行加好友操作
            if len(headEls) >= 1:
                self.start_step("查看rank1的用户信息,并加为好友")
                headEls[0].click()
                self.rankPage.wait_element("用户信息框同步标志")
                self.common.taskScreenShot("playerInfoPop.jpg")
                time.sleep(1)
                self.rankPage.get_element("加好友", 0).click()
                time.sleep(1)
                self.rankPage.get_element("用户信息框关闭按钮", 0).click()

            # 查看排行第二的用户信息,并执行举报操作
            if len(headEls) >= 2:
                self.start_step("查看rank2的用户信息,并执行查看举报弹框然后取消举报")
                headEls[1].click()
                self.rankPage.wait_element("用户信息框同步标志")
                time.sleep(1)
                self.rankPage.get_element("举报", 0).click()
                time.sleep(1)
                self.common.taskScreenShot("reportOtherpop.jpg")
                self.rankPage.wait_element("色情昵称").click()
                time.sleep(1)
                self.rankPage.get_element("取消举报", 0).click()

            # 滑动今日收益排行榜,并滑动到底
            self.start_step("滑动今日收益榜,并滑动到底")
            self.common.taskScreenShot("todayIncomeRank.jpg")
            self.swipeListView(True)

            # 切换到昨日富豪榜,并将列表滑动一页
            self.start_step("滑动一页昨日富豪榜")
            self.rankPage.get_element("日期", 0).click()
            time.sleep(1)
            self.common.taskScreenShot("yesterdayRegalRank.jpg")
            # 当文字发生改变时,表示切换成功
            while self.rankPage.get_element("日期文字").get_attribute(
                    "text") == '昨日':
                None
                self.swipeListView(False)

            # 返回大厅
            self.rankPage.get_element("返回大厅", 0).click()
        except:
            self.common.platformLog("排行榜操作失败")
        finally:
            self.common.checkPopVisible(self.rankPage)
            self.hall_page.wait_element("同步标志")

        time.sleep(5)
        self.common.sendTagBroadcast(EnumSceneName.Rank, EnumSceneType.Stop)

    def swipeListView(self, loop):
        '''
        滑动指定列表
        :param listName:  列表元素名
        :param itemName:  列表item元素名
        :param loop:  是否循环滑动到底
        :return:
        '''
        listView = None
        itemViews = None
        try:
            listView = self.rankPage.get_element("排行榜列表")
            # itemViews = self.rankPage.get_elements("排行榜item")
        except:
            self.common.platformLog("排行榜指定列表元素不存在,结束列表滑动测试")
            return

        cnt = 1
        while cnt < 10:
            # for item in itemViews:
            #     Common.printStr("item x y:",item.location["x"]," ",item.location["y"])
            # self.com.swipeList(listView)
            # if loop == False:
            #     break
            # itemViews = self.rankPage.get_elements("排行榜item")
            self.common.swipeList(listView)
            if loop == False:
                break
            cnt = cnt + 1
            time.sleep(0.2)
        time.sleep(1)
Пример #10
0
class kick_base(TestCase):
    '''
    房间内踢人脚本基类
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 30
    global mid
    global kickCard_cnt

    #各游戏对应id   203:斗地主,20:干瞪眼,7:血流成河, 2002:双扣  23:拖三批(七人焖鸡、斗鸡)
    #              2601:葫芦岛麻将   2603:K十五  25:升级  3:斗牛
    #20:预发布环境有不能正常玩牌的子游戏,不进行测试
    #23、3:每局游戏时间太短不足以操作玩家头像
    global global_black_list
    global_black_list = ["game20", "game23", "game3"]

    # 为True,本地调试时不执行关闭活动弹框逻辑
    global isDebug
    isDebug = False

    def pre_test(self):
        self.start_step("初始化环境")
        self.common = Common()
        self.hall_page = Hall_Page()
        self.game_page = Game_Page()
        self.yuepai_page = Yuepai_Page()
        self.backpack_page = Backpack_Page()
        self.start_step("初始化driver")
        global mid
        mid = self.common.get_config_value("casecfg", "mid")

        self.luadriver = self.common.setupdriver()

        if isDebug != True:
            self.common.closeactivity(self.luadriver)
        else:
            time.sleep(10)

    def wait_login_suc(self):
        '''等待大厅登录成功标志加载完成'''
        end_time = time.time() + 120
        while True:
            try:
                if self.hall_page.element_is_exist("登录成功标志", 1):
                    self.common.platformLog("大厅登录成功")
                    return True
                elif self.hall_page.element_is_exist("重连游戏", 1):
                    self.hall_page.get_element("重连游戏").click()
                    time.sleep(2)
                elif self.hall_page.element_is_exist("重新登陆", 1):
                    self.hall_page.get_element("重新登陆").click()
                    time.sleep(2)
            except:
                self.common.platformLog("等待大厅登录成功过程中,获取元素失败")
                return False
            if time.time() > end_time:
                self.common.platformLog("大厅未在指定时间内登录成功")
                return False

    def changeServer(self):
        '''
        子游戏返回列表后通过切换环境,来确保每次都重新登录  避免某些接口设置不生效
        默认从正式环境切换到当前测试环境
        :return:
        '''
        try:
            self.hall_page.wait_element("正式服").click()
            self.common.closeactivity(self.luadriver)
        except:
            print "切换到正式服失败"
        self.common.switchserver()
        self.common.closeactivity(self.luadriver)

    def set_PlayerData(self, VIPType, kickCnt):
        '''
        设置玩家VIP及踢人卡数量,由于有界面操作   只能放在进入大厅成功后调用
        :param VIPCnt: 是否有VIP
        :param kickCnt: 踢人卡张数  踢人卡id为36  None:则是不设置踢人卡数量
        :return:
        '''
        self.start_step("设置玩家数据")

        if PHPInterface.set_vip(mid, VIPType) == 0:
            self.common.platformLog("接口设置VIP信息失败")
            return False
        else:
            self.common.platformLog("设置VIP状态成功")

        #目前道具接口有问题,设置为0   会返回失败  当设置数量为0时,强制返回True
        status = False
        if PHPInterface.add_props(mid, 36, kickCnt) == 0 and kickCnt != 0:
            self.common.platformLog("设置踢人卡数量失败")
            status = False
        else:
            global kickCard_cnt
            kickCard_cnt = kickCnt
            status = True
        self.common.platformLog("测试开始前设置被测玩家初始数据", mid, VIPType, kickCnt,
                                "设置VIP和踢人卡结果:", status)
        return status

    def check_player_data(self, VIPType, kickCnt):
        '''
        检测当前用户数据是否与设置一致,若不一致则切换测试环境来刷新用户数据
        :param VIPType:
        :param kickCnt:
        :return:
        '''
        need_change = False
        if (VIPType in [4, 5, 6]
                and self.hall_page.element_is_exist("vip标识", 1)):  #有VIP标识
            pass
        elif (VIPType == -1
              and self.hall_page.element_not_exist("vip标识", 1)):  #无VIP标识
            pass
        else:
            need_change = True

        if need_change == False and kickCnt != self.get_KickCnt():
            need_change = True

        if need_change == True:
            self.changeServer()
            if self.wait_login_suc():
                self.common.platformLog("切换测试环境后,大厅登录成功")
                return True
            else:
                self.common.platformLog("切换测试环境后,大厅登录失败")
                return False
        else:
            self.common.platformLog("玩家VIP和踢人卡数量正确,不需切换环境")
            return True

    def wait_in_game(self):
        '''
        等待牌局开始,超过60s 则返回失败,停止后续测试操作
        :param gamePage  避免重复new
        :return: True:牌局中   False:未在牌局中
        '''
        gamePage = Game_Page()
        cnt = 0
        isIn = False
        while cnt < 30:
            if self.el_not_exist(gamePage, "房间标志"):
                isIn = False
                break
            if self.el_not_exist(gamePage, "换桌") and self.el_not_exist(
                    gamePage, "准备"):
                isIn = True
                print "牌局已经开始"
                break
            cnt += 1
            time.sleep(1)
        self.common.platformLog("牌局是否进行中:", isIn)
        return isIn

    def el_not_exist(self, page, el_name):
        '''
        判断元素不存在
        :param element:
        '''
        try:
            if (page.get_element(el_name) == None):
                return True
            else:
                return False
        except:
            return True

    def set_Robot(self,
                  gameid,
                  basechiptype=0,
                  playmode=1,
                  roomlevel=1,
                  robotflag=0):
        #七人焖鸡默认的七人玩法,对应的playmod是3  其余游戏均为0
        if gameid == '23':
            playmode = 3
        return PHPInterface.set_robot_flag(gameid, basechiptype, playmode,
                                           roomlevel, robotflag)

    def get_KickCnt(self):
        '''
        :return: 踢人卡张数  默认为None  表示获取踢人卡失败
        '''
        self.start_step("获取玩家物品箱踢人卡数量")
        self.common.platformLog("开始获取踢人卡*************")
        kick_cnt = 0
        try:
            self.hall_page.get_element("物品箱").click()
            self.backpack_page.wait_element("物品箱同步标志")
            item_namesEl = self.backpack_page.get_elements("item名称")
            item_cntsEl = self.backpack_page.get_elements("item数量")
            # 获取两个元素列表成功
            index = 0
            for el in item_namesEl:
                if el.get_attribute('text') == "踢人卡":
                    kick_cnt = int(item_cntsEl[index].get_attribute('text'))
                    break
                index += 1
        except:
            self.common.platformLog("打开物品箱获取踢人卡数量失败")
        finally:
            self.common.checkPopVisible(self.luadriver, self.backpack_page)
            self.hall_page.wait_element("同步标志")
        self.common.platformLog("从物品箱获取到的踢人卡数量", kick_cnt)
        return kick_cnt

    def loop_GameList(self,
                      testFunc,
                      isNext,
                      VIPType,
                      kickCnt,
                      def_black_list=None):
        game_list = self.game_page.get_game_list()
        for gameElement in game_list:
            try:

                gameId = gameElement.get_attribute("name")
                self.common.platformLog("当前测试子游戏:", gameId)

                #判断该子游戏是否是可测游戏
                if def_black_list != None:
                    black_list = def_black_list
                else:
                    black_list = global_black_list
                if black_list != None and gameId in black_list:
                    self.common.platformLog(gameId, "该子游戏不符合用例前置条件,不进行测试")
                    continue

                #若从子游戏返回大厅后登录大厅失败,结束测试
                if self.wait_login_suc():
                    self.common.platformLog("登录大厅成功")
                else:
                    self.assert_equal("登录大厅失败,停止后续所有测试步骤", True, False)
                    self.hall_page.screenshot("登录大厅失败.png")
                    break

                #根据条件设置玩家数据
                global kickCard_cnt
                if self.set_PlayerData(VIPType, kickCnt) == False:
                    self.assert_equal(gameId + "设置玩家VIP信息失败", True, False)
                    continue
                else:
                    time.sleep(2)
                    self.hall_page.wait_element("可点击标志", 2).click()
                    time.sleep(1)
                    if self.check_player_data(VIPType, kickCnt) == False:
                        self.assert_equal(gameId + "玩家数据不匹配切换环境后,登录失败,退出该用例测试",
                                          True, False)
                        break

                if isNext and self.hall_page.element_is_exist("右三角", 3):
                    self.hall_page.get_element("右三角").click()
                    time.sleep(1)

                self.common.platformLog("点击大厅子游戏入口")
                time.sleep(1)
                gameElement.click()
                if (self.game_page.game_is_download() == False):
                    self.log_info("下载游戏ID:%s 失败" % gameId)
                    self.game_page.screenshot(gameId + "_下载子游戏失败.png")
                    try:
                        self.hall_page.wait_element("关闭对话框").click()
                    except:
                        self.common.platformLog("关闭弹框")
                    continue

                self.start_step("开启机器人")

                if self.set_Robot(
                        re.search('\d+', gameId).group(), 0, 0, 12, 1):
                    self.common.platformLog("开始机器人成功")
                else:
                    self.assert_equal(gameId + "开启机器人失败", True, False)
                    return 0

                try:
                    self.start_step("点击入口进入房间")
                    if self.game_page.element_is_exist("新房间类型", 2):
                        gameType_Els = self.game_page.get_elements("新房间类型")
                        gameType_Els[0].click()
                    elif self.game_page.element_not_exist("广播", 2):
                        gameType_tabEls = self.game_page.game_play_way()
                        gameType_tabEls[0][1].click()  # 确保进入的是普通场

                    #点击房间场次,进入房间
                    if self.game_page.element_is_exist("新初级场场次", 2):
                        self.game_page.get_element("新初级场场次").click()
                    elif self.game_page.element_is_exist("房间场次", 2):
                        self.game_page.get_element("房间场次").click()
                except:
                    self.assert_equal(gameId + "大厅进入房间失败", True, False)
                    self.game_page.screenshot(game_id + "_大厅进入房间失败" + ".png")

                try:
                    self.start_step("开始具体子游戏操作:" + gameId)
                    testFunc(gameId)
                except:
                    self.game_page.screenshot(game_id + "_房间内操作子游戏失败" + ".png")
                    self.assert_equal(gameId + "房间内操作子游戏失败", True, False)
            except:
                self.assert_equal(gameId + "子游戏循环操作失败", True, False)
            finally:
                while True:
                    if self.hall_page.element_is_exist("排行榜", 5):
                        break
                    self.luadriver.back()

    def run_test_base(self, stepFunc, VIPType, kickCnt, def_black_list=None):
        '''

        :param VIPType:  VIP类型
        :param kickCnt:  踢人卡数量
        :param stepFunc: 具体测试步骤方法
        :param def_black_list: 自定义子游戏黑名单
        :return:
        '''
        self.start_step("等待页面加载完成")
        # 若从子游戏返回大厅后登录大厅失败,结束测试
        if self.wait_login_suc():
            self.common.platformLog("run_test_base登录大厅成功")
        else:
            self.assert_equal("run_test_base登录大厅失败,停止后续所有测试步骤", True, False)
            self.hall_page.screenshot("登录大厅失败.png")
            return 0

        time.sleep(8)
        self.loop_GameList(stepFunc, False, VIPType, kickCnt, def_black_list)
        try:
            self.hall_page.wait_element("右三角").click()
            time.sleep(8)
            self.loop_GameList(stepFunc, True, VIPType, kickCnt,
                               def_black_list)
        except:
            self.common.platformLog("没有右三角按钮")

    def post_test(self):
        #     '''
        #     测试用例执行完成后,清理测试环境
        #     设置VIP为过期状态,踢人卡数量为0
        #     '''
        self.start_step("清理测试环境")
        self.set_PlayerData(-1, 0)
        self.common.set_coin(mid, '10000')
        self.common.closedriver()
Пример #11
0
class logout_base(TestCase):
    '''
    牌局开始后物理返回基类
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 30

    global isDebug
    isDebug = False

    def wait_in_game(self):
        '''
        等待牌局开始,超过60s 则返回失败,停止后续测试操作
        :param gamePage  避免重复new
        :return: True:牌局中   False:未在牌局中
        '''
        gamePage = Game_Page()
        cnt = 0
        isIn = False
        while cnt < 30:
            if self.el_not_exist(gamePage,"房间标志"):
                isIn = False
                break;
            if self.el_not_exist(gamePage, "换桌") and self.el_not_exist(gamePage, "准备"):
                isIn = True
                break
            cnt += 1
            time.sleep(1)
        self.common.platformLog("牌局是否进行中:", isIn)
        return isIn

    def el_not_exist(self,page, el_name):
        '''
        判断元素不存在
        :param element:
        '''
        try:
            if (page.get_element(el_name) == None):
                return True
            else:
                return False
        except:
            return True

    def set_Robot(self, gameid, basechiptype=0, playmode=1, roomlevel=1, robotflag=0):
        #七人焖鸡默认的七人玩法,对应的playmod是3  其余游戏均为0
        if gameid == '23':
            playmode = 3
        return PHPInterface.set_robot_flag(gameid,basechiptype,playmode,roomlevel,robotflag)

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.game_page = Game_Page()
        self.yuepai_page = Yuepai_Page()
        self.start_step("初始化driver")

        global mid
        mid = self.common.get_config_value("casecfg", "mid")
        self.common.set_coin(mid, 10000)

        self.luadriver = self.common.setupdriver()
        if isDebug != True:
            self.common.closeactivity(self.luadriver)
        else :
            time.sleep(15)
        self.common.platformLog("开始设置游戏币")


    def loop_GameList(self,testFunc,isNext = False, black_list = None):
        self.common.platformLog("开始循环子游戏")
        game_list = self.game_page.get_game_list()
        for gameElement in game_list:
            try:

                gameId = gameElement.get_attribute("name")
                self.common.platformLog("当前测试子游戏:",gameId)
                if black_list != None and gameId in black_list :
                    self.common.platformLog(gameId,"该游戏玩牌异常,不进行测试")
                    continue
                self.common.platformLog("点击大厅子游戏入口")

                if self.hall_page.element_is_exist("登录成功标志", 90):
                    self.common.platformLog("登录大厅成功")
                else:
                    self.assert_equal("登录大厅失败", True, False)
                    self.hall_page.screenshot("登录大厅失败.png")
                    return 0

                time.sleep(1)
                if isNext and self.hall_page.element_is_exist("右三角",3):
                    self.hall_page.get_element("右三角").click()
                    time.sleep(1)

                gameElement.click()
                if (self.game_page.game_is_download() == False):
                    self.log_info("下载游戏ID:%s 失败" % gameId)
                    self.game_page.screenshot(gameId + "_open_failed.png")
                    try:
                        self.hall_page.wait_element("关闭对话框").click()
                    except:
                        self.common.platformLog("关闭弹框")
                    continue

                self.start_step("开启机器人")

                if self.set_Robot(re.search('\d+', gameId).group(), 0, 0, 12, 1) :
                    self.common.platformLog("开始机器人成功")
                else :
                    self.assert_equal(gameId + "开启机器人失败", True, False)
                    return 0

                # 适应斗地主新界面,进入房间
                try:
                    self.start_step("点击入口进入房间")
                    #选择房间类型
                    if self.game_page.element_is_exist("新房间类型", 2):
                        gameType_Els = self.game_page.get_elements("新房间类型")
                        gameType_Els[0].click()
                    elif self.game_page.element_not_exist("广播",2):
                        gameType_tabEls = self.game_page.game_play_way()
                        if gameType_tabEls != None and len(gameType_tabEls) > 0 :
                            gameType_tabEls[0][1].click()  # 确保进入的是普通场

                    #点击房间场次,进入房间
                    if self.game_page.element_is_exist("新初级场场次", 2):
                        self.game_page.get_element("新初级场场次").click()
                    elif self.game_page.element_is_exist("房间场次", 2):
                        self.game_page.get_element("房间场次").click()
                except:
                    self.assert_equal(gameId + "大厅进入房间失败", True, False)
                    self.game_page.screenshot(game_id + "大厅进入房间失败" + ".png")

                try:
                    self.start_step("开始具体子游戏操作:" + gameId)
                    testFunc(gameId)
                except:
                    self.game_page.screenshot(game_id + "房间内操作子游戏失败" + ".png")
                    self.assert_equal(gameId + "房间内操作子游戏失败", True, False)

            except:
                self.assert_equal(gameId + "子游戏循环操作失败", True, False)
            finally:
                while True:
                    if self.hall_page.element_is_exist("排行榜", 5):
                        break
                    self.luadriver.back()

    def run_test_base(self,stepFunc,black_list):
        '''

        :param VIPType:  VIP类型
        :param kickCnt:  踢人卡数量
        :param stepFunc: 具体测试步骤方法
        :return:
        '''
        self.start_step("等待页面加载完成")
        if self.hall_page.element_is_exist("登录成功标志", 90):
            self.common.platformLog("登录大厅成功")
        else:
            self.assert_equal("登录大厅失败", True, False)
            self.hall_page.screenshot("登录大厅失败.png")
            return 0
        time.sleep(8)
        self.loop_GameList(stepFunc,False, black_list)
        try:
            self.hall_page.wait_element("右三角").click()
            time.sleep(8)
            self.loop_GameList(stepFunc,True, black_list)
        except:
            self.common.platformLog("没有右三角按钮")

    def post_test(self):
        #     '''
        #     测试用例执行完成后,清理测试环境
        #     '''
        self.common.recover_user(mid)
        self.common.closedriver()
Пример #12
0
class Common():

    def setupdriver(self,agrs={}):
        '''初始化driver
        luadriver 用于游戏操作,对应appium
        '''
        # 初始化Luadriver
        self.luaobj = LuaDriver()
        self.luaobj.creatLuaDriver(agrs)
        self.luadriver = self.luaobj.getLuaDriver()
        return self.luadriver

    def closedriver(self):
        '''关闭driver
        '''
        self.luaobj.closeLuadriver()

    def closefloatBall(self):
        self.hall_page = Hall_Page()
        self.setting_page = Setting_Page()
        self.hall_page.wait_element("设置").click()
        time.sleep(2)
        try:
            self.setting_page.wait_element("关闭浮动球").click()
        except:
            print "浮动球已经关闭"
        time.sleep(3)
        try:
            self.setting_page.wait_element("页面返回").click()

        except:
            print "已经关闭"
        time.sleep(2)

    def deletefile(self,driver):
        print "----删除自动登录文件----"
        config = ConfigHelper(constant.cfg_path)
        package =config.getValue('appium', 'apppackage')
        #正式服
        command = "shell rm -r /mnt/sdcard/."+package+"/dict/lastLoginInfo.dat"
        # command = "shell rm -r /mnt/sdcard/.com.boyaa.engineqpsc/dict/lastLoginInfo.dat"
        print command
        try:
            driver.adb(command)
        except:
            print "命令执行失败"
        #预发布  1lastLoginInfo.dat
        command1 = "shell rm -r /mnt/sdcard/."+package+"/dict/1lastLoginInfo.dat"
        print command1
        try:

            driver.adb(command1)
        except:
            print "命令执行失败"
        # 预发布  2lastLoginInfo.dat
        command2 = "shell rm -r /mnt/sdcard/."+package+"/dict/2lastLoginInfo.dat"
        try:
            driver.adb(command2)
        except:
            print "命令执行失败"
        print command2

    def closeactivity(self,luadriver):
        '''
       关闭活动页面
       '''
        self.hall_page = Hall_Page()
        time.sleep(1)
        # try:
        #     if(self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")')!=None):
        #         self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")').click()
        # except:
        #     print "未出现允许按钮"

        self.hall_page.wait_element("头像",90)
        # try:
        #     if(self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")')!=None):
        #         self.luadriver.find_element_by_android_uiautomator('new UiSelector().textMatches("允许")').click()
        # except:
        #     print "未出现允许按钮"
        try:
            self.hall_page.wait_element("新手任务",6).click()
        except:
            print "未出现新手任务按钮"
        try:
            self.hall_page.wait_element("确认登陆",6).click()
        except:
            print "未出现登陆按钮"
        try:
            self.hall_page.wait_element("立即升级绑定账号",6).click()
            self.sign_page.wait_element("关闭1").click()
        except:
            print "未出现立即升级绑定账号按钮"
        self.closeActivityBtn()
        # try:
        #     luadriver.find_element_by_name("允许").click()
        # except:
        #     print "未出现按钮"


    def closeactivity_switchserver(self,luadriver):
        '''
        关闭活动页面,切换到指定服,然后再关闭弹出的活动页面
        :param luadriver:
        :param switchserver:
        :return:
        '''
        self.closeactivity(luadriver)
        self.switchserver()
        self.closeactivity(luadriver)

    def switchserver(self):
        '''
        根据cfg文件切换正式服,测试服,预发布服
        @return:
        '''
        self.hall_page = Hall_Page()
        env = self.get_config_value('casecfg', 'env')
        if self.hall_page.element_is_exist("测试按钮"):
            self.hall_page.wait_element("测试按钮").click()
            if self.hall_page.element_is_exist("切换环境"):
                self.hall_page.wait_element("切换环境").click()
                if env == '0':
                    try:
                        while self.hall_page.element_is_exist("正式1", 2):
                            self.hall_page.get_element("正式1").click()
                    except:
                        print "切换到正式服失败"
                elif env == '1':
                    try:
                        while self.hall_page.element_is_exist("测试1",2):
                            self.hall_page.get_element("测试1").click()
                    except:
                        print "切换到测试服失败"
                elif env == '2':
                    try:
                        while self.hall_page.element_is_exist("预发布1", 2):
                            self.hall_page.get_element("预发布1").click()
                    except:
                        print "切换到预发布失败"
                else:
                    try:
                        while self.hall_page.element_is_exist("预发布1", 2):
                            self.hall_page.get_element("预发布1").click()
                    except:
                        print "切换到预发布服失败"
            else:
                self.hall_page.wait_element("关闭测试页面").click()
                if env=='0':
                    try:
                        self.hall_page.wait_element("正式服").click()
                    except:
                        print "切换到正式服失败"
                elif env =='1':
                    try:
                        self.hall_page.wait_element("测试服").click()
                    except:
                        print "切换到测试服失败"
                elif env =='2':
                    try:
                        self.hall_page.wait_element("预发布").click()
                    except:
                        print "切换到预发布失败"
                else:
                    try:
                        self.hall_page.wait_element("预发布").click()
                    except:
                        print "切换到预发布服失败"
            time.sleep(5)

    def closeActivityBtn(self):
        '''
        关闭活动弹框
        :return:
        '''
        self.hall_page = Hall_Page()
        self.sign_page = Sign_Page()
        i = 0
        while (i < 4):
            i += 1
            try:
                self.sign_page.wait_element("关闭1").click()
                time.sleep(1)
            except:
                try:
                    self.sign_page.wait_element("关闭1").click()
                    time.sleep(1)
                except:
                    print "关闭对话框"


    def closeactivity_switchserver_reservenotice(self,luadriver,switchserver):#切换服务器但保留公告页面
        self.hall_page = Hall_Page()
        self.sign_page = Sign_Page()
        time.sleep(15)
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            print "未出现按钮"
        time.sleep(5)
        try:
            self.hall_page.wait_element("确认登陆").click()
        except:
            print "未出现登陆按钮"
        i = 0
        while (i < 3):
            i += 1
            try:
                self.sign_page.wait_element("关闭1").click()
                time.sleep(1)
            except:
                try:
                    self.sign_page.wait_element("关闭1").click()
                    time.sleep(1)
                except:
                    print "关闭对话框"
        try:
            self.hall_page.wait_element("新手任务").click()
            time.sleep(2)
        except:
            print "未出现新手任务按钮"
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            print "未出现按钮"
        try:
            self.hall_page.wait_element(switchserver).click()
            time.sleep(1)
        except:
            print "未出现%s按钮"%switchserver
        time.sleep(15)
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            "未出现按钮"
        time.sleep(2)

    def switchnetwork(self,luadriver, network):
        '''
        测试用例运行过程中切换网络
        '''
        if(network == '无网络'):
            print "设置为无网络状态"
            luadriver.set_network_connection(ConnectionType.NO_CONNECTION)
            # print luadriver.network_connection
        if(network == 'WIFI模式'):
            print "设置为WIFI模式"
            luadriver.set_network_connection(ConnectionType.WIFI_ONLY)
        if(network == '数据网络'):
            print "设置为数据网络模式"
            luadriver.set_network_connection(ConnectionType.DATA_ONLY)
        if(network == '飞行模式'):
            print "设置为飞行模式"
            luadriver.set_network_connection(ConnectionType.AIRPLANE_MODE)
        if(network == '全部网络打开模式'):
            print "设置为全部网络打开模式"
            luadriver.set_network_connection(ConnectionType.ALL_NETWORK_ON)


    def isloginuser(self,luadriver):
        '''
        判断是否是注册账号登陆,如果不是则切换到注册账号
        :param user:
        :param passwd:
        :return:
        '''
        self.login_page = Login_Page()
        self.setting_page = Setting_Page()
        self.hall_page = Hall_Page()
        # # 每个用例都需要关闭活动,把这个放在初始化里面实现
        # self.closeactivity(luadriver)
        self.hall_page.wait_element("头像").click()
        time.sleep(6)
        try:
            if(self.setting_page.wait_element("立即升级").get_attribute('text') != u"立即升级"):
                return True
            else:
                return False
        except:
            return False

    def loginuser(self,user,passwd):
        self.login_page = Login_Page()
        self.setting_page = Setting_Page()
        self.hall_page = Hall_Page()
        time.sleep(6)
        self.setting_page.wait_element("切换账号").click()
        time.sleep(2)
        try:
            self.setting_page.wait_element("继续登录").click()
        except:
            print "不需要继续切换"
        try:
            self.setting_page.wait_element("删除历史账号").click()
        except:
            print "无历史账号"
        time.sleep(1)
        self.setting_page.wait_element("手机号码").send_keys(user)
        time.sleep(1)
        self.setting_page.wait_element("密码").send_keys(passwd)
        time.sleep(1)
        self.setting_page.wait_element("确认登陆").click()
        time.sleep(10)
        self.hall_page.wait_element("同步标志")
        time.sleep(1)

    def swipeelement(self,element1,element2):
        # element1_size_width = element1.size['width']
        # element1_size_height = element1.size["height"]
        # element1_1_x = element1.location["x"]
        # element1_1_y = element1.location["y"]
        # swipe_startx = element1.location['x']+element1.size['width']/2
        # swipe_starty = element1.location['y']+element1.size['height']/2
        swipe_startx = element1.location['x']
        swipe_starty = element1.location['y']
        # swipe_endx = element2.location['x']+element1.size['width']/2
        # swipe_endy = element2.location['y']+element1.size['height']/2
        swipe_endx = element2.location['x']
        swipe_endy = element2.location['y']
        print swipe_startx, swipe_starty, swipe_endx, swipe_endy
        self.luadriver.swipe(swipe_startx, swipe_starty, swipe_endx, swipe_endy,1000)

    def restart(self):
        self.luaobj = LuaDriver()
        self.luaobj.closeLuadriver()
        self.luaobj.creatLuaDriver()
        self.luadriver = self.luaobj.getLuaDriver()
        self.closeActivityBtn()
        return self.luadriver

    def random_str(self,len):
        '''生成随机字符'''
        str = ""
        for i in range(len):
            str += (random.choice("safsdfsdfoewrweorewcvmdfadfdsafdskafaklvoreiutwuerpmvcmvasieqwoejandfsxmndje"))
        return str

    def getdata(self,string):
        string1 = string.encode('gbk')
        print type(string1)
        data = filter(str.isdigit, string1)
        print data
        return data

    def closeactivityprepublish(self, luadriver):
        self.hall_page = Hall_Page()
        self.sign_page = Sign_Page()
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            "未出现按钮"
        time.sleep(5)
        try:
            self.hall_page.wait_element("立即升级绑定账号").click()
            time.sleep(1)
            self.sign_page.wait_element("关闭1").click()
        except:
            print "未出现立即升级绑定账号按钮"
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            "未出现按钮"
        try:
            self.hall_page.wait_element("确认登陆").click()
        except:
            "未出现登陆按钮"
        self.closeActivityBtn()
        try:
            self.hall_page.wait_element("新手任务").click()
            time.sleep(2)
        except:
            print "未出现新手任务按钮"
        try:
            self.hall_page.wait_element("预发布").click()
        except:
            "未出现预发布按钮"
        time.sleep(5)
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            "未出现按钮"
        time.sleep(5)
        try:
            luadriver.find_element_by_name("允许").click()
        except:
            "未出现按钮"
        time.sleep(2)
        try:
            self.hall_page.wait_element("立即升级绑定账号").click()
            time.sleep(1)
            self.sign_page.wait_element("关闭1").click()
        except:
            print "未出现立即升级绑定账号按钮"
        self.closeActivityBtn()

    def get_user(self):
        '''
        获取账号信息
        @return:
        '''
        global user_info
        user_info = user_util.gimme_afree_account()
        while user_info ==None:
            time.sleep(5)
            user_info = user_util.gimme_afree_account()
        return user_info

    def release_user(self,user_mid):
        print "release"
        print user_mid
        try:
            user_util.release_account(user_mid)
        except:
            print "release user fail"

    def get_cid(self):
        '''获取用户cid'''
        self.personinfo_page = Personinfo_Page()
        # self.start_step("获取用户mid")
        self.personinfo_page.wait_element("头像").click()
        time.sleep(6)
        cid = self.personinfo_page.wait_element("账号ID").get_attribute('text')
        print "获取的用户cid为: %s" % cid
        self.game_page.wait_element("关闭对话框").click()
        time.sleep(3)
        if (self.game_page.element_is_exist("关闭对话框")):  # 如果弹破产弹框,则关闭
            self.game_page.wait_element("关闭对话框").click()
            time.sleep(3)
        return cid

    def addmoney(self,mid):
        '''
        破产账号充值
        :return:
        '''
        user_info = PHPInterface.get_user_info(mid)  # 获取玩家信息
        coin = eval(user_info).get('result', {'coin': None}).get('coin')  # 获取当前银币值
        print coin
        AddMoney = 10000 - coin
        print AddMoney
        PHPInterface.add_money(mid, AddMoney)  # 将银币值设为60000

    def get_safebox_money(self):
        '''从保险箱取出全部存款'''
        self.safebox_page = Safebox_Page()
        # self.start_step("从保险箱取出所有存款")
        self.hall_page.wait_element("保险箱").click()
        time.sleep(2)
        self.safebox_page.wait_element("取出").click()
        if (self.safebox_page.element_is_exist("确定---保险箱")):
            slider = self.safebox_page.wait_element("滚动条")
            addgoldbtn = self.safebox_page.wait_element("增加金条/银条数目")
            x = slider.location['x']
            y = slider.location['y']
            x1 = addgoldbtn.location['x']
            y1 = addgoldbtn.location['y']
            self.luadriver.swipe(x, y, x1, y1)
            self.safebox_page.wait_element("确定---保险箱").click()
            time.sleep(2)
            self.luadriver.keyevent(4)
        else:
            print ("保险箱没有银币存款")
            time.sleep(2)
            self.luadriver.keyevent(4)

    def get_safebox_crystal(self):
        '''从保险箱取出全部金条'''
        self.safebox_page = Safebox_Page()
        self.hall_page.wait_element("保险箱").click()
        time.sleep(2)
        self.safebox_page.wait_element("金条保险箱").click()
        time.sleep(2)
        self.safebox_page.wait_element("取出").click()
        if (self.safebox_page.element_is_exist("确定---保险箱")):
            slider = self.safebox_page.wait_element("滚动条")
            addgoldbtn = self.safebox_page.wait_element("增加金条/银条数目")
            x = slider.location['x']
            y = slider.location['y']
            x1 = addgoldbtn.location['x']
            y1 = addgoldbtn.location['y']
            self.luadriver.swipe(x, y, x1, y1)
            self.safebox_page.wait_element("确定---保险箱").click()
            time.sleep(2)
            self.luadriver.keyevent(4)
        else:
            print ("保险箱没有金条存款")
            self.luadriver.keyevent(4)

    def get_game_list(self):
        '''
        获取当前界面子游戏列表名
        :return: 游戏列表名
        '''
        self.game_page = Game_Page()
        elements = self.game_page.get_elements("子游戏列表")
        print len(elements)
        #去重,同时去除game0(约牌,比赛场)和game-1(更多游戏)
        elementsblack = ["game0","game-1"]
        game_list = []
        for i in range(len(elements)):
            name =elements[i].get_attribute("name")
            print name
            if name not in elementsblack:
                elementsblack.append(name)
                game_list.append(elements[i])
        print len(game_list)
        return game_list

    def get_config_value(self,section,key):
        #从cfg.ini文件获取配置项的值
        config = ConfigHelper(constant.cfg_path)
        value =config.getValue(section, key)
        return value

    def get_cid(self):
        '''获取用户cid'''
        self.personinfo_page = Personinfo_Page()
        self.personinfo_page.wait_element("头像").click()
        cid = self.personinfo_page.wait_element("账号ID").get_attribute('text')
        print "获取的用户cid为: %s" % cid
        self.personinfo_page.wait_element("关闭").click()
        if (self.personinfo_page.element_is_exist("关闭")):  # 如果弹破产弹框,则关闭
            self.personinfo_page.wait_element("关闭").click()
        return cid

    def get_mid(self):
        cid = self.get_cid()
        time.sleep(3)
        config = ConfigHelper(constant.cfg_path)
        region = config.getValue('casecfg', 'region')
        mid = PHPInterface.get_mid(cid, region)
        print "用户mid为:%s" % mid
        return mid

    def set_coin(self,mid,value):
        # 获取用户银币信息
        result_userinfo = PHPInterface.get_user_info(mid)
        myuser_info = json.loads(result_userinfo)
        coin = myuser_info.get('result', {'coin': None}).get('coin')
        AddMoney = int(value) - int(coin)
        result = PHPInterface.add_money(mid, AddMoney)
        # print "用户银币数为:%s" % AddMoney

    def set_crystal(self,mid,value):
        # 设置金条数据
        result_userinfo = PHPInterface.get_user_info(mid)
        myuser_info = json.loads(result_userinfo)
        crystal = myuser_info.get('result', {'crystal': None}).get('crystal')  # 获取当前金条值
        print "用户金条数为:%s" % crystal
        AddMoney = int(value) - int(crystal)
        PHPInterface.add_crystal(mid, AddMoney)

    def set_config_value(self,section,key,value):
        #设置cfg.ini文件获取配置项的值
        config = ConfigHelper(constant.cfg_path)
        config.modifConfig(section, key,value)
        return True

    def recover_user(self,mid):
        #初始化用户
        self.set_coin(mid,'10000')
        self.set_crystal(mid,"0")
        PHPInterface.set_vip(mid,"-1")
        self.set_safeBoxMoney(mid,0,0)
        self.set_safeBoxMoney(mid,0,1)

    def set_safeBoxMoney(self, mid, money, money_type):
        # money_type=0银币,1为金条
        safeBoxInfo = PHPInterface.get_safebox(mid)
        if money_type == 0:
            safeBoxMoney = int(safeBoxInfo.get("safebox"))
        else:
            safeBoxMoney = int(safeBoxInfo.get("crystalsafebox"))

        if safeBoxMoney - money > 0:
            PHPInterface.withdraw_safebox(mid, safeBoxMoney - money, money_type)
            if money_type == 0:
                PHPInterface.add_money(mid, -(safeBoxMoney - money))
            else:
                PHPInterface.add_crystal(mid, -(safeBoxMoney - money))
        else:
            if money_type == 0:
                PHPInterface.add_money(mid, money - safeBoxMoney)
            else:
                PHPInterface.add_crystal(mid, money - safeBoxMoney)

            PHPInterface.deposit_safebox(mid, money - safeBoxMoney, money_type)
Пример #13
0
class Common():
    def __init__(self):
        self.log = Logger().get_logger()
        self.resolution = None
        self.hall_page = Hall_Page()
        self.sign_page = Sign_Page()
        self.setting_page = Setting_Page()

    def setupdriver(self, agrs={}):
        '''
        luadriver 用于游戏操作,对应appium
        始化必然会执行到的逻辑
        全局共用driver  其余地方都是通过singleGlobalVar.get("luaDriver")获取
        '''
        self.platformLog("---------setupdriver---------")
        # 初始化Luadriver
        self.luaobj = LuaDriver()
        self.luaobj.creatLuaDriver(agrs)
        singleGlobalVar.set_map("luaDriver", self.luaobj.getLuaDriver())

    def closedriver(self):
        '''关闭driver
        '''
        singleGlobalVar.get("luaDriver").quit()

    def checkPopVisible(self, page, flagElName="同步标志"):
        '''
        根据page同步标志判断弹框是否存在,直至元素不存在或者操作次数操作3次
        :param page: 操作页
        :param flagElName: 同步标志元素name
        :param closeElName:关闭弹框元素name
        :return:
        '''
        cnt = 0
        while cnt < 3:
            print "cnt:" + str(cnt)
            try:
                page.get_element(flagElName)
                if singleGlobalVar.get("luaDriver") != None:
                    singleGlobalVar.get("luaDriver").keyevent(4)
            except:
                break
                print "该pop已关闭"
            cnt = cnt + 1

    def deletefile(self):
        driver = singleGlobalVar.get("luaDriver")
        self.platformLog("deleteFile  开始测试前删除配置及性能相关文件")
        config = ConfigHelper(constant.cfg_path)
        package = config.getValue('appium', 'apppackage')

        #正式服
        command = "shell rm -r /mnt/sdcard/." + package + "/dict/lastLoginInfo.dat"
        self.platformLog(command)
        try:
            driver.adb(command)
        except:
            self.platformLog("删除正式服上次登录配置文件失败")

        #预发布  1lastLoginInfo.dat
        command1 = "shell rm -r /mnt/sdcard/." + package + "/dict/1lastLoginInfo.dat"
        self.platformLog(command1)
        try:

            driver.adb(command1)
        except:
            self.platformLog("删除预发布1lastLoginInfo.dat失败")

        # 预发布  2lastLoginInfo.dat
        command2 = "shell rm -r /mnt/sdcard/." + package + "/dict/2lastLoginInfo.dat"
        self.platformLog(command2)
        try:
            driver.adb(command2)
        except:
            self.platformLog("删除预发布1lastLoginInfo.dat失败")

        #删除性能测试结果文件
        delCsvCmd = "shell rm -r /mnt/sdcard/" + package + "_result.csv"
        self.platformLog(delCsvCmd)
        try:
            driver.adb(delCsvCmd)
        except:
            self.platformLog("删除性能测试文件失败")

        #minicap截图文件夹
        delMinicapCmd = "shell rm -rf /mnt/sdcard/minicap_screen"
        self.platformLog(delMinicapCmd)
        try:
            driver.adb(delMinicapCmd)
        except:
            self.platformLog("删除minicap截图文件夹失败")

        mkdirCmd = "shell mkdir /mnt/sdcard/minicap_screen"
        self.platformLog(mkdirCmd)
        try:
            driver.adb(mkdirCmd)
        except:
            self.platformLog("新建minicap截图文件夹失败")

    def closeActivity(self):
        '''
        关闭进入大厅各种弹框
        :return:
        '''
        self.hall_page = Hall_Page()
        self.sign_page = Sign_Page()

        #关闭首先出现的新手任务按钮
        try:
            self.hall_page.wait_element("新手任务", 5).click()
        except:
            print "未出现新手任务按钮"

        try:
            self.hall_page.wait_element("确认登陆", 5).click()
        except:
            print "未出现确认登陆按钮"

        try:
            self.hall_page.wait_element("立即升级绑定账号", 5).click()
            self.sign_page.wait_element("关闭1").click()
        except:
            print "未出现立即升级绑定账号按钮"

        #添加破产奖励领取,由于目前只能在正式服测试  导致所有接口不能用   先领取破产奖励,避免弹框对其他场景影响
        try:
            self.hall_page.wait_element("破产领奖按钮", 5).click()
            self.platformLog("领取破产奖励")
        except:
            print "没有破产按钮"

        self.closeActivityBtn(False)

    def closeActivityBtn(self, checkNewer=True):
        '''
        关闭活动弹框(同时切换服务器、重新登录进入大厅也是用该函数关闭活动弹框)
        @:param checkNewer 是否检测新手任务按钮
        :return:
        '''
        if checkNewer:
            try:
                self.hall_page.wait_element("新手任务", 5).click()
            except:
                print "未出现新手任务按钮"

        i = 0
        while (i < 5):
            i += 1
            try:
                self.sign_page.wait_element("关闭1", 2).click()
            except:
                print "sign_page关闭1按钮操作失败"

    def moveElement(self, startEl, endEl):
        '''
        滑动元素  将元素从位置1滑动到位置2  以元素中心位置进行滑动
        :param element1:  滑动开始元素名
        :param element2:  滑动结束元素名
        :return:
        '''
        swipe_startx = startEl.location['x'] + startEl.size['width'] / 2
        swipe_starty = startEl.location['y'] + startEl.size['height'] / 2

        swipe_endx = endEl.location['x'] + endEl.size['width'] / 2
        swipe_endy = endEl.location['y'] + endEl.size['height'] / 2
        singleGlobalVar.get("luaDriver").swipe(swipe_startx, swipe_starty,
                                               swipe_endx, swipe_endy, 1000)

    def swipeList(self, listEl, dir=EnumDirection.Up, devPos=20):
        '''
        滑动列表  以中心点进行滑动
        :param listEl: 需进行滑动的列表元素
        :param dir:滑动方向  EnumDirection.Up Down Left Right
        :param devPos:滑动偏移值
        :return:
        '''
        driver = singleGlobalVar.get("luaDriver")
        elLocation = listEl.location
        elSize = listEl.size
        startX = elLocation['x']
        centerX = elLocation['x'] + elSize['width'] / 2
        endX = elLocation['x'] + elSize['width'] - devPos
        startY = elLocation['y']
        centerY = elLocation['y'] + elSize['height'] / 2
        endY = elLocation['y'] + elSize['height'] - devPos
        if dir == EnumDirection.Up:
            driver.swipe(centerX, endY, centerX, startY)
        elif dir == EnumDirection.Down:
            driver.swipe(centerX, startY, centerX, endY)
        elif dir == EnumDirection.Left:
            driver.swipe(endX, centerY, startX, centerY)
        elif dir == EnumDirection.Right:
            driver.swipe(startX, centerY, endX, centerY)

        time.sleep(1)

    def closefloatBall(self):
        '''
        关闭浮动球,先判断浮动球是否显示中
        :return:
        '''
        try:
            self.hall_page.wait_element("同步标志")
            self.hall_page.get_element("设置").click()
            self.switchBtn("浮动球开关", "浮动球状态", True)
        except:
            self.platformLog("浮动球已关闭or关闭失败")
        finally:
            self.checkPopVisible(self.setting_page)

    def switchBtn(self, pName, cName, close):
        '''
        用于操作切换按钮(主要是设置框浮动球类按钮操作)
        若当前状态和要求一致,则操作切换元素两次  否则只点击一次
         @:param  pName:切换元素名
         @:param  cName:切换元素的按钮名  直接取【2】有问题  改为先取列表然后从list取index为2的元素
         @:param  close:是否需要关闭
        :return:
        '''
        # print "需要操作的开关名:"+pName + " 是否隐藏:"+ str(close)
        parentEl = None
        childEl = None
        isClose = False
        try:
            parentEl = self.setting_page.wait_element(pName)
        except:
            print "获取parentEl失败,退出切换按钮设置"
            return
        try:
            elList = self.setting_page.get_elements(cName)
            if len(elList) > 2:
                childEl = elList[2]
            else:
                return
        except:
            print "获取childEl失败,退出切换按钮设置"
            return

        parentX = parentEl.location['x']
        parentWidth = parentEl.size['width']
        childX = childEl.location['x']
        childWidth = childEl.size['width']

        if ((childX + childWidth / 2) < (parentX + parentWidth / 2)):
            isClose = True
        else:
            isClose = False
        if isClose == close:
            parentEl.click()
            time.sleep(0.5)
            parentEl.click()
            time.sleep(0.5)
        else:
            parentEl.click()
            time.sleep(0.5)

    #从26个大小写字母及数字从随机生成指定长度的字符串
    def random_str(self, len):
        '''生成随机字符'''
        str = ""
        resourceStr = string.ascii_letters + string.digits
        for i in range(len):
            str += (random.choice(resourceStr))
        return str

    def addmoney(self, mid):
        '''
        破产账号充值
        :return:
        '''
        user_info = PHPInterface.get_user_info(mid)  # 获取玩家信息
        coin = eval(user_info).get('result', {
            'coin': None
        }).get('coin')  # 获取当前银币值
        print coin
        AddMoney = 10000 - coin
        print AddMoney
        PHPInterface.add_money(mid, AddMoney)  # 将银币值设为60000

    def getResolution(self):
        '''
        获取分辨率
        :return: 直接返回的是minicap截图需要的分辨率参数 游戏会自动设置横屏,所以width>height
        '''
        if (self.resolution == None):
            screenWidth = singleGlobalVar.get(
                "luaDriver").get_window_size()['width']
            screenHeigth = singleGlobalVar.get(
                "luaDriver").get_window_size()['height']
            self.resolution = str(screenWidth) + "x" + str(
                screenHeigth) + "@" + str(screenWidth) + "x" + str(
                    screenHeigth)

        return self.resolution

    def taskScreenShot(self, fileName):
        '''
        由于appium截图效率问题,改为stf平台的minicap进行截图,其中-P如下:
        The format of the -P argument is: {RealWidth}x{RealHeight}@{VirtualWidth}x{VirtualHeight}/{Orientation}. The "virtual" size is the size of the desired projection.
        The orientation argument tells minicap what the current orientation of the device is (in degrees),
        可执行minicap命令:
        adb shell LD_LIBRARY_PATH=/data/local/tmp exec /data/local/tmp/minicap -P 720x1280@720x1280/90 -s >/sdcard/minicap_1504612944860.jpg
        :param page:  元素所在page页
        :param fileName: 截图保存的文件名
        :return:
        '''
        driver = singleGlobalVar.get("luaDriver")
        try:
            broadcastType = "com.boyaa.stf.screenShot"
            cmd_send = "shell am broadcast -a " + broadcastType + " --es sShotName " + fileName
            self.platformLog(cmd_send)
            driver.adb(cmd_send)
        except:
            self.platformLog("通知apk截图时间失败")

        try:
            cmd_pre = "shell LD_LIBRARY_PATH=/data/local/tmp exec /data/local/tmp/minicap -P "
            cmd_minicap = cmd_pre + self.getResolution(
            ) + "/0 -s >/mnt/sdcard/minicap_screen/" + fileName
            self.platformLog(cmd_pre)
            driver.adb(cmd_minicap)
        except:
            self.platformLog("调用minicap截图失败")

    @staticmethod
    def printStr(*info):
        '''
        打印log,自动将所有传入非字符串类型转换为字符串然后打印出来
        '''
        logStr = ""
        for v in info:
            if type(v) != str:
                v = str(v)
            logStr = logStr + v
        timeStamp = str(datetime.datetime.now())
        print timeStamp + " " + logStr

    def getResumeTime(self):
        '''
        获取游戏启动完成时间,目前是头像元素出现的时间
        :return:
        '''
        time.sleep(2)
        self.platformLog("-------------getResumeTime----------")
        try:
            self.hall_page.wait_element("启动完成标志", 180, 0.1)
            # utc = '%.2f' % (time.time())
            print "apk start completely"
            self.platformLog("apk start completely")
        except:
            self.platformLog("获取标志app成功成功元素失败")

    def startCollectApp(self):
        '''
        启动性能采集apk
        :return:
        '''
        self.platformLog("startCollectApp start pmonitor apk")
        config = ConfigHelper(constant.cfg_path)
        #性能采集apk acticity
        apkName = config.getValue('appium', 'collectApkName')
        # 被测apk packageName
        testAPKName = config.getValue('appium', 'apppackage')
        # 最终生成结果文件在手机中目录
        resultFilePath = "/mnt/sdcard/" + testAPKName + "_result.csv"

        # SDK 17后由于权限问题,需要加--user 0
        startCmd = "shell am start --user 0 -n " + apkName + " --es packageName " + testAPKName + " --es filePath " + resultFilePath
        self.platformLog(startCmd)
        singleGlobalVar.get("luaDriver").adb(startCmd)

    def platformLog(self, msg):
        logStr = ""
        for v in msg:
            if type(v) != str:
                v = str(v)
            logStr = logStr + v
        self.log.info(logStr)

    def sendTagBroadcast(self, tagName, tagType):
        '''
        向性能采集apk发送场景广播
        :param tagName:
        :param tagType:
        :return:
        '''
        #广播类型
        broadcastType = "com.boyaa.stf.UIScript"
        cmd_send = "shell am broadcast -a " + broadcastType + " --es tagName " + tagName + " --es tagType " + tagType
        self.platformLog(cmd_send)
        singleGlobalVar.get("luaDriver").adb(cmd_send)

    def sendStopServiceBroad(self):
        self.platformLog("sendStopServiceBroad")
        # 广播类型
        broadcastType = "com.boyaa.stf.stopService"
        cmd_send = "shell am broadcast -a " + broadcastType
        singleGlobalVar.get("luaDriver").adb(cmd_send)