示例#1
0
class PerTest_QIPAIHALL_Exchange(TestCase):
    '''
    兑换奖品场景
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 60

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.exchange_page = Exchange_Page()

    def run_test(self):
        '''
        测试用例
        '''
        self.hall_page.wait_element("同步标志")
        self.common.sendTagBroadcast(EnumSceneName.ExchangeRwd, EnumSceneType.Start)
        self.start_step("点击大厅兑换奖品入口")
        self.hall_page.wait_element("兑换奖品").click()
        try:
            self.exchange_page.wait_element("同步标志")
            self.common.taskScreenShot("openExchangePop.jpg")

            #循环点击tab
            self.start_step("循环点击tab,查看可兑换物品")
            tabs = self.exchange_page.get_elements("tabItem")
            for tab in tabs:
                tab.click()
                time.sleep(1)

            #显示兑换窗口
            try:
                self.start_step("查看兑换弹框,未实际兑换")
                self.exchange_page.get_element("兑换按钮").click()
                self.exchange_page.wait_element("兑换窗口同步标志")
                self.common.taskScreenShot("exchangeTips.jpg")
                time.sleep(1)
                self.exchange_page.get_element("兑换窗口关闭").click()
            except:
                self.common.platformLog("操作兑换对话框失败")

            #显示兑换记录
            self.start_step("查看兑换记录")
            self.exchange_page.get_element("兑奖记录").click()
            time.sleep(1)
            self.common.taskScreenShot("exchangeRecord.jpg")

            self.exchange_page.get_element("返回").click()
        except:
            self.common.platformLog("操作exchange对话框失败")
        finally:
            self.common.checkPopVisible(self.exchange_page)
            self.hall_page.wait_element("同步标志")

        time.sleep(2)
        self.common.sendTagBroadcast(EnumSceneName.ExchangeRwd, EnumSceneType.Stop)
示例#2
0
class RunTest(object):
    '''批量执行测试用例,通过模块名来执行,如args=cases
    '''
    def __init__(self, device):
        self.device = device
        self.isDebug = False

    def runtest(self, args):
        '''
        args参数为数组类型
        '''
        test_conf = TestCaseSettings(args)
        #读配置
        config = ConfigHelper(constant.cfg_path)
        report_formal = config.getValue('report', 'reportFormal')
        if report_formal == 'XMLReport':
            runner = TestRunner(XMLTestReport(self.device))
        else:
            runner = TestRunner(EmptyTestReport(lambda tc: StreamResult()))
        print test_conf
        runner.run(test_conf)

    def initEnv(self):
        '''
        初始化整个测试环境
        创建driver,整个项目共用的driver
        删除文件(data文件和性能结果文件)
        获取启动完成时间
        启动性能采集apk
        关闭页面上的系统弹框和活动页面
        :return:
        '''
        self.common = Common()
        self.common.platformLog("runtest.initEnv 初始化整个测试环境")
        self.common.setupdriver()
        self.common.deletefile()
        self.common.getResumeTime()
        self.common.startCollectApp()
        if (self.isDebug):
            time.sleep(10)
        else:
            self.common.closeActivity()

    def clearEnv(self):
        self.common.platformLog("runtest.clearEnv 测试完成,清理测试环境")
        self.common.sendStopServiceBroad()
        self.common.closedriver()
示例#3
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("保险箱").click()
            time.sleep(2)
            self.safeBox_Page.wait_element("同步标志")
            self.common.taskScreenShot("silverSafebox.jpg")

            #操作金币保险箱
            self.start_step("操作金条保险箱")
            self.safeBox_Page.get_element("金条tab").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(2)
        self.common.sendTagBroadcast(EnumSceneName.SafeBox, EnumSceneType.Stop)
示例#4
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()
示例#5
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("商城").click()
            time.sleep(2)
            self.mall_Page.wait_element("同步标志")
            self.common.taskScreenShot("openMallPop.jpg")

            #购买金条(选择第一个item)并滑动金条列表
            self.start_step("购买金条")
            self.mall_Page.get_element("item0").click()
            self.mall_Page.wait_element("金条购买框Flag")
            self.common.taskScreenShot("buyGoldPop.jpg")
            self.mall_Page.get_element("金条购买框关闭").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").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").click()
            time.sleep(2)
            self.common.taskScreenShot("propView.jpg")
            self.start_step("购买道具")
            self.mall_Page.get_element("item0").click()
            self.mall_Page.wait_element("道具购买框Flag")
            self.common.taskScreenShot("buyPropPop.jpg")
            self.mall_Page.get_element("道具购买框关闭").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").click()
            time.sleep(2)
            self.common.taskScreenShot("vipView.jpg")

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

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

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

        time.sleep(2)
        self.common.sendTagBroadcast(EnumSceneName.Mall, EnumSceneType.Stop)
示例#6
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("排行榜").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("加好友").click()
                time.sleep(1)
                self.rankPage.get_element("用户信息框关闭按钮").click()

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

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

            # 切换到今日富豪榜,并将列表滑动一页
            self.start_step("滑动一页今日富豪榜")
            self.rankPage.get_element("富豪榜").click()
            time.sleep(1)
            self.common.taskScreenShot("todayRegalRank.jpg")
            self.swipeListView(False)

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

            # 切换到今日富豪榜,并将列表滑动一页
            self.start_step("滑动一页昨日收益榜")
            self.rankPage.get_element("收益榜").click()
            time.sleep(1)
            self.common.taskScreenShot("yesterdayIncomeRank.jpg")
            self.swipeListView(False)

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

        time.sleep(2)
        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.common.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)
示例#7
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()
示例#8
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.wait_element("任务").click()
            self.task_page.wait_element("同步标志")
            self.task_page.get_element("每日签到tab").click()
            time.sleep(2)
            self.common.taskScreenShot("qiandaoView.jpg")

            #若今日签到按钮存在,则点击
            try:
                #若按钮存在并签到成功,会直接跳转到补签页面
                self.task_page.get_element("签到按钮").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")
                if (len(taskItems) > 4):
                    self.start_step("滑动每日任务列表")
                    self.common.swipeList(listView)
            except:
                self.common.platformLog("查看任务列表失败")

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

        time.sleep(2)
        self.common.sendTagBroadcast(EnumSceneName.Task, EnumSceneType.Stop)
示例#9
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.wait_element("设置").click()
            time.sleep(2)
            self.setting_page.wait_element("同步标志")
            self.common.taskScreenShot("openSettingPop.jpg")
            # 操作各切换按钮
            self.start_step("操作各切换按钮")
            self.switchBtn("浮动球开关", "浮动球状态", True)
            self.common.taskScreenShot("closeFloatBall.jpg")
            self.switchBtn("静音开关", "静音状态", True)
            self.switchBtn("读牌开关", "读牌状态", False)
            self.switchBtn("聊天开关", "聊天状态", False)
            self.switchBtn("震动开关", "震动状态", False)
            self.switchBtn("比赛围观开关", "比赛围观状态", False)

            # 查看关于弹框
            self.start_step("查看关于内容")
            self.setting_page.get_element("关于入口").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("退出关于").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("退出设置").click()
        except:
            self.common.platformLog("设置页面操作失败")
        finally:
            self.common.checkPopVisible(self.setting_page)
            self.hall_page.wait_element("同步标志")

        time.sleep(2)
        self.common.sendTagBroadcast(EnumSceneName.Setting, EnumSceneType.Stop)

    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)
示例#10
0
class PerTest_QIPAIHALL_Userinfo(TestCase):
    '''
    玩家个人信息框操作
    '''
    owner = "JessicZeng"
    status = EnumStatus.Design
    priority = EnumPriority.High
    timeout = 5

    def pre_test(self):
        self.common = Common()
        self.hall_page = Hall_Page()
        self.personinfo_page = Personinfo_Page()

    def run_test(self):
        '''
        操作步骤:
        1、点击大厅个人信息框入口
        2、修改昵称
        3、修改性别
        4、修改城市
        5、查看VIP特权,然后返回个人信息框
        6、切换账号(可能造成前后两次结果有差异主要是切换账号后可能有签到框)
        7、结束测试
        :return:
        '''
        self.hall_page.wait_element("同步标志")
        self.start_step("点击大厅玩家信息框入口")
        self.common.sendTagBroadcast(EnumSceneName.UserInfo,
                                     EnumSceneType.Start)
        try:
            self.hall_page.wait_element("打开个人信息框")
            self.hall_page.wait_element("头像").click()
            time.sleep(2)
            self.personinfo_page.wait_element("同步标志")
            time.sleep(1)
            self.common.taskScreenShot('openUserInfo_pop.jpg')

            #设置用户昵称,修改后点击其他地方来保存修改
            self.start_step("修改昵称")
            nickName = self.common.random_str(6)
            self.personinfo_page.wait_element("设置用户名").send_keys(nickName)
            self.personinfo_page.wait_element("同步标志").click()
            self.common.taskScreenShot('modifyNick.jpg')

            #修改玩家性别,女改男,男改女  get_attribute('selected')
            self.start_step("修改性别")
            enGirl = self.personinfo_page.wait_element("女")
            if (enGirl.get_attribute('selected')):
                self.common.platformLog("点击性别男")
                self.personinfo_page.wait_element("男").click()
            else:
                self.common.platformLog("点击性别女")
                self.personinfo_page.wait_element("女").click()
            self.common.taskScreenShot('modifySex.jpg')

            #修改城市,海南和四川来回切换  若当前为四川则切换为海南  反之亦然
            self.start_step("修改城市")
            cityNameStr = self.personinfo_page.get_element("城市").get_attribute(
                'text')
            self.personinfo_page.wait_element("城市").click()
            element1 = self.personinfo_page.wait_element("海南")  # 海南
            element2 = self.personinfo_page.wait_element("四川")  # 四川
            if cityNameStr.find('四川') != -1:
                self.common.moveElement(element1, element2)
            else:
                self.common.moveElement(element2, element1)
            time.sleep(2)
            self.personinfo_page.wait_element("同步标志").click()
            self.common.taskScreenShot('modifyCity.jpg')

            #查看VIP特权
            self.start_step("查看VIP特权")
            self.personinfo_page.get_element("了解VIP特权").click()
            time.sleep(2)
            self.common.taskScreenShot('VIPPrivilege.jpg')
            try:
                self.personinfo_page.wait_element("特权同步标志")
                self.personinfo_page.wait_element("返回个人资料").click()
            except:
                self.common.platformLog("VIP特权页面显示失败,结束玩家信息框测试")

            self.personinfo_page.get_element("关闭").click()
            #切换账号,用已有账号登录  登录成功后会直接返回大厅并切换账号
            # time.sleep(2)
            # self.start_step("切换账号")
            # try:
            #     self.personinfo_page.get_element("切换账号").click()
            #     self.personinfo_page.wait_element("继续登录").click()
            #     self.personinfo_page.wait_element("登录框title")
            #     self.personinfo_page.wait_element("账号").send_keys("18676676262")
            #     self.personinfo_page.wait_element("密码").send_keys("zrf.870208")
            #     self.personinfo_page.wait_element("确认登录").click()
            #     self.hall_page.wait_element("同步标志")
            # except:
            #     print "切换账号失败,直接退回到大厅"
            #     while (self.personinfo_page.is_exist("同步标志")):
            #         self.common.closePop()
            # finally:
            #     self.common.closeActivity()
        except:
            self.common.platformLog("操作个人信息框失败")
        finally:
            self.common.checkPopVisible(self.personinfo_page)
            self.hall_page.wait_element("同步标志")

        time.sleep(2)
        self.common.sendTagBroadcast(EnumSceneName.UserInfo,
                                     EnumSceneType.Stop)