Пример #1
0
    def pay_confirm_operate(self):
        """支付确认页 操作"""
        direct = self.direct_buy_button()  # 直接购买 按钮
        if GetAttribute().get_enabled(direct) == 'true':
            direct.click()  # 点击 直接购买 按钮

            if self.wait_check_pay_confirm_page():  # 支付确认 页面检查点
                print('------------------------------')
                print('支付确认页:')
                self.st_icon()  # 学生头像
                self.st_name()  # 学生name
                self.st_phone()  # 手机号

                self.online_services_operate()  # 在线客服

                unit = self.price_unit()  # 货币单位
                print(unit, self.price_info())  # 价格
                self.card_hint()  # 卡的类型说明

                print('-----------------')
                self.pay_type()  # 支付方式
                icon = self.pay_icon()  # icon

                wechat_check = self.wechat_pay_check()  # 微信单选框
                if GetAttribute().get_checked(wechat_check) == 'false':
                    print('❌❌❌ Error - 未默认选中 微信支付')

                for k in range(1, len(icon)):
                    self.pay_mode(k)  # 支付方式
                print('-----------------')

                self.pay_delay_tips()  # 支付延迟 说明
                self.parent_replace_operate()  # 家长代付
Пример #2
0
    def parent_replace_operate(self):
        """家长代付页 操作"""
        parent = self.parent_pay_check()  # 家长代付 单选框
        parent.click()
        self.confirm_pay_button()  # 确认支付 按钮
        if self.wait_check_replace_page():  # 家长代付页 检查点
            print('------------------------------')
            print('家长代付页:')

            wechat_tab = self.wechat_replace_pay()  # 微信代付
            if GetAttribute().get_selected(wechat_tab) == 'false':
                print('❌❌❌ Error - 未默认选中 微信代付')
            else:
                ali_tab = self.ali_replace_pay()  # 支付宝代付
                print(ali_tab.text)
                ali_tab.click()  # 切换到 支付宝代付
                if GetAttribute().get_selected(
                        self.ali_replace_pay()) == 'false':
                    print('❌❌❌ Error - 未选中 支付宝代付')

            self.card_type()  # 卡的类型
            unit = self.price_unit(2)  # 货币单位
            print(unit, self.price_info())  # 价格

            if self.qr_code_judge():
                self.qr_code_hint()  # xx扫描二维码付款

            if not self.pay_finish_tips():  # 支付完成 提示
                print("❌❌❌ Error - 无支付完成 提示")
            self.pay_statement()  # 收款公司说明

            self.pay_finish_operate()  # 支付结果页
 def test_medal_tip(self):
     """测试勋章弹框"""
     if self.home.wait_check_home_page():
         self.home.screen_swipe_up(0.5, 0.9, 0.2, 1000)
         self.home.check_more()[1].click()
         if self.library.wait_check_test_label_page('我的阅读'):
             self.medal.medal_icon().click()
             if self.medal.wait_check_medal_page():
                 medals = self.medal.medals()
                 for x in medals:
                     if self.medal.wait_check_medal_page():
                         if GetAttribute().get_selected(x) == 'false':
                             x.click()
                             if not self.medal.wait_check_medal_img_page():
                                 self.base_assert.except_error('点击置灰勋章未发现弹框')
                             else:
                                 print(self.medal.medal_content(), '\n')
                                 self.home.click_blank()
                         else:
                             x.click()
                             if not GameCommonEle().wait_check_punch_share_page():
                                 self.base_assert.except_error('点亮勋章点击后未进入分享页面')
                             else:
                                 GameCommonEle().share_page_operate()
                 if self.medal.wait_check_medal_page():
                     self.medal.click_back_up_button()
                 if LibraryPage().wait_check_test_label_page('我的阅读'):
                     self.medal.click_back_up_button()
                 if self.home.wait_check_home_page():
                     print('返回主页面')
Пример #4
0
 def question_judge(self, var):
     """元素 resource-id属性值是否为题目"""
     value = GetAttribute().get_resource_id(var)
     if value == self.id_type() + "question":
         return True
     else:
         return False
Пример #5
0
 def option_selected(self, index):
     """获取所有选项 - 四个选项selected属性"""
     time.sleep(1)
     ele = self.driver \
         .find_elements_by_id(self.id_type() + "tv_char")[index]
     value = GetAttribute().get_selected(ele)
     return value
Пример #6
0
    def next_button_judge(self, var):
        """‘下一题’按钮 状态判断"""
        item = self.driver \
            .find_element_by_id(self.id_type() + "fab_submit")  # ‘下一题’按钮
        value = GetAttribute().get_enabled(item)

        if value != var:  # 测试 下一步 按钮 状态
            print('❌❌❌ 下一步按钮 状态Error', value)
    def options_statistic(self, count):
        """选择对错统计"""
        time.sleep(1)
        ele = []  # 四个选项selected属性值为true的个数

        options = self.option_button()  # 四个选项
        for j in range(len(options)):  # 统计答案正确与否
            if GetAttribute().get_selected(options[j]) == 'true':  # 错误答案
                ele.append(j)
            if GetAttribute().get_description(options[j]) == 'true':  # 正确答案
                ele.append(j)

        if ele[0] == ele[1]:  # 如果选项的selected属性为true的作业数为1,说明答对了,则+1
            count += 1
            print('回答正确:', options[ele[0]].text)
        else:  # ele[0] != ele[1]
            print('回答错误T/F:%s、%s' %
                  (options[ele[1]].text, options[ele[0]].text))
Пример #8
0
 def judge_word_is_star(self, i):
     """判断单词是否被标星"""
     if GetAttribute().get_selected(
             self.star_button()) == 'true':  # 判断但是标星是否被标注
         print('单词已标星')
         if i == 3:
             self.star_button().click()  # 取消标星
     else:
         self.base_assert.except_error("❌❌❌ Error--此题未被标星")
Пример #9
0
 def judge_word_is_star(self, i):
     """判断单词是否被标星"""
     if GetAttribute().selected(
             self.star_button()) == 'true':  # 判断但是标星是否被标注
         print('单词已标星')
         if i == 3:
             self.click_star()  # 取消标星
     else:
         print("★★★ Error--此题未被标星")
Пример #10
0
    def buy_page_direct_operate(self):
        """购买页 操作 -- 直接购买"""
        if self.wait_check_pay_page():  # 购买页 检查点
            print('------------------------------')
            print('购买页:')
            self.st_icon()  # 学生头像
            self.st_name()  # 学生name
            self.st_phone()  # 手机号

            self.buy_hint()  # 购买提示
            self.hint_info()  # 提分版 权力

            self.online_services_operate()  # 在线客服

            if self.wait_check_pay_page():
                check = self.check_button()  # 单选框
                for i in range(len(check)):
                    if GetAttribute().get_checked(check[i]) == 'true':
                        if i != 3:
                            print('❌❌❌ Error - 未默认选中 年卡')
                        else:
                            check[0].click()  # 选择季卡
                            if GetAttribute().get_checked(
                                    self.check_button()[0]) == 'true':
                                self.current_card()  # 左下角 目前选中的卡
                            else:
                                print('❌❌❌ Error - 未选中 月卡')

                card = self.card_name()  # 卡的类型
                price = self.card_price()  # 卡的价格

                if len(check) != len(card) != len(price) != 4:
                    print('❌❌❌ Error - 卡的个数有误', len(check), len(card),
                          len(price))
                else:
                    print('--------------------')
                    for j in range(len(card)):
                        print(card[j].text, price[j].text)
                    print('--------------------')

                self.buy_agreement()  # 购买协议

                self.pay_confirm_operate()  # 支付确认页
Пример #11
0
 def setUp(cls):
     """启动应用"""
     cls.result = unittest.TestResult()
     cls.base_assert = ExpectingTest(cls, cls.result)
     cls.login = LoginPage()
     cls.home = HomePage()
     cls.van = VanclassPage()
     cls.detail = VanclassDetailPage()
     cls.get = GetAttribute()
     BasePage().set_assert(cls.base_assert)
Пример #12
0
    def sentence_strengthen_result_operate(self, mine_answer):
        """强化炼句结果页处理"""
        right_answer = {}
        right_count = 0
        for x in range(len(mine_answer)):
            if x != len(mine_answer) - 1:
                index_num = x + 1
            else:
                index_num = x
                self.screen_swipe_up(0.5, 0.9, 0.4, 1000)
            while not self.wait_check_sentence_container_by_content_desc(
                    index_num):
                self.screen_swipe_up(0.5, 0.9, 0.85, 500)
            mine_done_answer = mine_answer[str(x)]
            right_wrong_icon = self.group_sentence_right_wrong_icon(x)
            sentence_hint_explain = self.group_hint_explain(x)
            page_sentence_answer = self.group_answer_sentence(x)
            print('解释:', sentence_hint_explain)
            print('句子:', page_sentence_answer)

            reform_right_ans, reform_mine_ans = self.get_right_and_mine_answer(
                page_sentence_answer)
            if '(' in page_sentence_answer:
                right_answer[str(len(right_answer))] = reform_right_ans
                if mine_done_answer != reform_mine_ans:
                    self.base_assert.except_error('输入的答案与页面展示的不一致 ' +
                                                  mine_done_answer)

                if GetAttribute().get_selected(right_wrong_icon) == 'true':
                    self.base_assert.except_error('我的答案与正确答案不一致,但是图标显示正确!' +
                                                  mine_done_answer)
                else:
                    print('图标验证正确')
            else:
                right_count += 1
                if GetAttribute().get_selected(right_wrong_icon) == 'false':
                    self.base_assert.except_error('我的答案与正确答案一致,但是图标显示不正确!' +
                                                  mine_done_answer)
                else:
                    print('图标验证正确')
            print('-' * 30, '\n')
        print('错题再练答案:', right_answer)
        return right_answer, right_count, len(mine_answer)
    def sentence_listen_link_result_operate(self, mine_answer):
        """听音连句结果页处理"""
        right_answer = {}
        right_count = 0
        for x in range(len(mine_answer)):
            if x != len(mine_answer) - 1:
                index_num = x + 1
            else:
                index_num = x
                self.screen_swipe_up(0.5, 0.9, 0.4, 1000)
            while not self.wait_check_sentence_container_by_content_desc(index_num):
                self.screen_swipe_up(0.5, 0.9, 0.8, 500)
            mine_done_answer = mine_answer[str(x)]
            self.group_sentence_speck_icon(x).click()
            right_wrong_icon = self.group_sentence_right_wrong_icon(x)
            page_answer = self.group_right_answer(x).split('答案: ')[1].strip()
            page_mine_answer = self.group_mine_answer(x).split('我的: ')[1].strip()
            sentence_explain = self.group_sentence_explain(x)

            print(sentence_explain,
                  "答案:" + page_answer,
                  '我的:' + page_mine_answer,
                  sep='\n')

            if mine_done_answer != page_mine_answer:
                self.base_assert.except_error('做题答案与页面展示的不一致 ' + page_mine_answer)

            if page_answer != page_mine_answer:
                if GetAttribute().get_selected(right_wrong_icon) == 'true':
                    self.base_assert.except_error('我的答案与正确答案不一致,但是图标显示正确!' + page_answer)
                else:
                    print('图标验证正确')
                right_answer[str(len(right_answer))] = page_answer
            else:
                right_count += 1
                if GetAttribute().get_selected(right_wrong_icon) == 'false':
                    self.base_assert.except_error('我的答案与正确答案一致,但是图标显示不正确!' + page_answer)
                else:
                    print('图标验证正确')
            print('-'*30, '\n')
        print('错题再练答案:', right_answer)
        return right_answer, right_count, len(mine_answer)
Пример #14
0
    def reading_operate(self):
        """《阅读理解》 游戏过程"""
        if self.wait_check_page():
            if self.wait_check_play_page():
                timestr = []  # 获取每小题的时间

                drag = self.dragger()  # 拖动按钮
                loc = self.get_element_bounds(drag)  # 获取按钮坐标
                size = self.options_view_size()  # 获取整个选项页面大小
                self.driver.swipe(loc[2], loc[3], loc[2], loc[3] + size-10, 1000)  # 拖拽按钮到最底部,以便测试Aa

                self.font_operate()  # Aa文字大小切换按钮 状态判断 及 切换操作

                loc = self.get_element_bounds(drag)  # 获取按钮坐标
                y = loc[3] - size * 4 / 3
                if loc[3] - size * 4 / 3 < 0:
                    y = 0
                self.driver.swipe(loc[2], loc[3], loc[2], y, 1000)  # 向上拖拽

                rate = self.rate()
                for i in range(int(rate)):
                    Homework().rate_judge(rate, i)  # 测试当前rate值显示是否正确
                    Homework().next_button_operate('false')  # 下一题 按钮 状态判断 加点击

                    question = self.question_num().text  # 题目
                    if i != 0:
                        for step in range(0, 5):
                            if int(self.get_first_num()) == i+1:  # 正好
                                question = self.question_num().text
                                break
                            elif int(self.get_first_num()) > i+1:  # 上拉拉过了
                                self.screen_swipe_down(0.5, 0.7, 0.9, 1000)
                                if int(self.get_first_num()) == i+1:  # 正好
                                    question = self.question_num().text
                                    break
                                elif int(self.get_first_num()) < i+1:  # 下拉拉过了
                                    self.screen_swipe_up(0.5, 0.9, 0.8, 1000)  # 滑屏

                    options = self.option_button(question)
                    options[0][random.randint(0, len(options[0])) - 1].click()  # 随机点击选项
                    time.sleep(1)
                    for j in range(len(options[0])):
                        if GetAttribute().get_selected(options[1][j]) == 'true':
                            print('我的答案:', options[1][j].text)
                            break

                    if i != int(rate) - 1:
                        self.screen_swipe_up(0.5, 0.9, 0.5, 1000)

                    timestr.append(self.time())  # 统计每小题的计时控件time信息
                    print('---------------------------')

                Homework().next_button_operate('true')  # 下一题 按钮 状态判断 加点击
                Homework().now_time(timestr)  # 判断游戏界面 计时功能控件 是否在计时
    def sentence_change_result_operate(self, mine_answer):
        """句型转换结果页处理"""
        right_answer = {}
        right_count = 0
        for x in range(len(mine_answer)):
            if x != len(mine_answer) - 1:
                index_num = x + 1
            else:
                index_num = x
                self.screen_swipe_up(0.5, 0.9, 0.4, 1000)
            while not self.wait_check_sentence_container_by_content_desc(
                    index_num):
                self.screen_swipe_up(0.5, 0.9, 0.85, 500)
            mine_done_answer = mine_answer[str(x)]
            right_wrong_icon = self.group_sentence_right_wrong_icon(x)
            sentence_question = self.group_question(x)
            page_answer = self.group_answer_sentence(x)
            page_mine_answer = self.group_mine_answer(x)
            print(sentence_question, '\n', "答案:", page_answer, '\n', '我的:',
                  page_mine_answer)
            if mine_done_answer != page_mine_answer:
                self.base_assert.except_error('做题答案与页面展示的不一致 ' +
                                              page_mine_answer)

            if page_answer != page_mine_answer:
                if GetAttribute().get_selected(right_wrong_icon) == 'true':
                    self.base_assert.except_error('我的答案与正确答案不一致,但是图标显示正确!' +
                                                  page_answer)
                else:
                    print('图标验证正确')
                right_answer[str(len(right_answer))] = page_answer
            else:
                right_count += 1
                if GetAttribute().get_selected(right_wrong_icon) == 'false':
                    self.base_assert.except_error('我的答案与正确答案一致,但是图标显示不正确!' +
                                                  page_answer)
                else:
                    print('图标验证正确')
            print('-' * 30, '\n')
        print('错题再练答案:', right_answer)
        return right_answer, right_count, len(mine_answer)
Пример #16
0
    def image_choice_result_operate(self, mine_answer=None):
        """听音选图结果页面处理"""
        right_answer = {}
        right_count = 0
        for x in range(len(mine_answer)):
            if x == len(mine_answer) - 1:
                index_num = x + 1
                self.screen_swipe_up(0.5, 0.9, 0.4, 1000)
            else:
                index_num = x + 2

            while not self.wait_check_ques_text_by_index(index_num):
                self.screen_swipe_up(0.5, 0.9, 0.8, 500)
            question = self.get_ques_text_by_index(str(x + 1))
            print('问题:', question)
            images = self.get_images_by_index(x)
            mine_done_answer = mine_answer[str(x)]
            print('我的答案:', mine_done_answer)
            for img in images:
                img_content = img.get_attribute('contentDescription')
                if mine_done_answer in img_content:
                    if GetAttribute().get_selected(img) == 'false':
                        self.base_assert.except_error('选择答案后,结果页显示未选中')
                    if 'true' in img_content:
                        print('正确答案:', img_content)
                        right_answer[str(
                            len(right_answer))] = img_content.split(
                                '##')[0].strip()
                        right_count += 1
                else:
                    if GetAttribute().get_selected(img) == 'true':
                        self.base_assert.except_error('未选此选项,结果页显示被选中')

                    if 'true' in img_content:
                        print('正确答案:', img_content)
                        right_answer[str(
                            len(right_answer))] = img_content.split(
                                '##')[0].strip()
            print('-' * 30, '\n')
        print('再练一遍答案:', right_answer)
        return right_answer, right_count, len(mine_answer)
    def flash_copy_game_operate(
        self,
        fq,
        half_exit,
        star_list=None,
    ):
        star_words = [] if fq == 1 else star_list
        if self.wait_check_copy_page():
            total_num = self.rest_bank_num()
            for x in range(total_num):
                self.click_voice()
                self.rate_judge(total_num, x)
                copy_word = self.copy_word()
                print('单词:', copy_word)
                if half_exit:
                    if x == 1:
                        self.click_back_up_button()
                        self.tips_operate()
                        break

                if x % 2 == 0:  # 奇数题
                    if fq == 1:  # 若为第一次
                        self.star_button().click()  # 标星
                        star_words.append(copy_word)
                        print('加入标星单词')
                    else:  # 若为第二次 校验是否被标星
                        if GetAttribute().get_selected(
                                self.star_button()) == 'true':
                            print('标星校验正确')
                        else:
                            self.base_assert.except_error('单词已标星但标星按钮未被选中')

                self.copy_input().click()
                time.sleep(1)
                if x == 1:
                    random_str = random.sample(string.ascii_lowercase,
                                               4)  # 随机输入错误单词,
                    for j, s in enumerate(random_str):
                        Keyboard().keyboard_operate(s, j)
                    print('输入单词:', ''.join(random_str))

                    if self.copy_word() != copy_word:  # 验证是否跳转到下一题
                        self.base_assert.except_error('输入错误单词可以进入下一题')

                    for y in range(4):  # 清除输入的单词
                        Keyboard().games_keyboard('backspace')
                    time.sleep(1)

                for j, s in enumerate(list(copy_word)):  # 输入抄写单词
                    Keyboard().keyboard_operate(s, j)
                time.sleep(3)
                print('-' * 30, '\n')
            return total_num, star_words
    def hint_ele_operate(self, value):
        self.next_btn_judge('false', self.fab_commit_btn)  # 下一题 按钮 判断加 点击操作
        if self.wait_check_tv_word_or_random_page():  # 默写模式 - 字母未全部消除
            print('❌❌❌ Error - 单词拼写 默写模式 - 字母未全部消除')

        hint = self.hint_btn()  # 提示按钮
        if GetAttribute().get_enabled(hint) == 'true':
            hint.click()  # 点击 提示按钮
            if GetAttribute().get_enabled(self.hint_btn()) != 'false':
                print('❌❌❌ Error - 点击后提示按钮enabled属性错误')

            if self.wait_check_tv_word_or_random_page():  # 出现首字母提示
                first_word = self.spell_word().text[::2]
                if first_word == value[0]:
                    print('点击提示出现首字母提示', first_word)
                else:
                    print('点击提示出现首字母提示', first_word)
            else:
                print("❌❌❌ Error - 首字母提示未出现")
        else:
            print('❌❌❌ Error - 提示按钮enabled属性错误')
Пример #19
0
    def word_game_result_check_operate(self, mine_answer):
        """单词类游戏结果页处理"""
        right_answer = {}
        right_count = 0
        value_is_explain = self.value_is_explain(mine_answer)
        for x in range(len(mine_answer)):
            if x != len(mine_answer) - 1:
                index_num = x + 1
            else:
                index_num = x
                self.screen_swipe_up(0.5, 0.9, 0.4, 1000)
            while not self.wait_check_word_container_by_index_and_id(
                    index_num):
                self.screen_swipe_up(0.5, 0.9, 0.85, 500)
            result_explain = self.group_explain(x)
            result_word = self.group_word(x)
            result_word_voice = self.group_word_voice(x)
            result_icon = self.group_right_wong_icon(x)
            check_answer = result_explain if value_is_explain else result_word
            print('解释:', result_explain)
            print('单词:', result_word)

            result_word_voice.click()

            if mine_answer[str(x)].lower() != check_answer.lower():
                if GetAttribute().get_selected(result_icon) == 'true':
                    self.base_assert.except_error('单词与我输入的不一致,但图标显示正确\n')
                else:
                    print('图标标识正确\n')
                right_answer[str(len(right_answer))] = check_answer
            else:
                right_count += 1
                if GetAttribute().get_selected(result_icon) == 'false':
                    self.base_assert.except_error('单词与我输入一致,但图标显示错误\n')
                else:
                    print('图标标识正确\n')
        print('错题再练答案:', right_answer)
        return right_answer, right_count, len(mine_answer)
    def flash_card_game_operate(self, fq, half_exit, star_list=None):
        """图书馆、作业内闪卡游戏过程"""
        star_words = [] if fq == 1 else star_list
        if self.wait_check_flash_study_page():
            total_num = self.rest_bank_num()
            for x in range(0, total_num):
                self.rate_judge(total_num, x)  # 待完成数校验
                self.next_btn_judge('true', self.fab_next_btn)  # 下一步按钮状态检验
                self.click_voice()
                word = self.study_word()
                print('单词:', word)

                if half_exit:
                    if x == 1:
                        self.click_back_up_button()
                        self.tips_operate()

                if not self.wait_check_explain_page():  # 验证页面是否默认选择英汉模式
                    self.base_assert.except_error('未发现单词解释,页面没有默认选择英汉模式' +
                                                  word)
                else:
                    print('解释:', self.study_word_explain().text)  # 单词解释

                if self.wait_check_sentence_page():
                    print("句子:", self.study_sentence())  # 句子
                    print("句子解释:", self.study_sentence_explain())  # 句子解释
                    print("推荐老师:", self.author())  # 推荐老师

                self.change_model_btn().click()  # 切换全英模式
                if self.wait_check_explain_page():  # 校验翻译是否出现
                    self.base_assert.except_error('切换至全英模式依然存在解释' + word)

                self.change_model_btn().click()  # 切换回英汉模式

                if x % 2 == 0:  # 第一次,部分单词点击标星按钮
                    if fq == 1:
                        self.star_button().click()
                        star_words.append(word)
                        print('加入标星单词')
                    else:
                        if GetAttribute().get_selected(
                                self.star_button()) == 'true':
                            print('标星校验正确')
                        else:
                            self.base_assert.except_error('单词已标星但标星按钮未被选中')

                print('-' * 20, '\n')
                self.fab_next_btn().click()
                time.sleep(2)
            return total_num, star_words
Пример #21
0
 def judge_word_is_familiar(self, familiar, word, i, familiar_add):
     """判断单词是否被标熟"""
     if word in familiar:
         if GetAttribute().get_selected(self.familiar_button()) == 'true':
             self.base_assert.except_error("❌❌❌ Error-- 此题未被标熟")
             self.familiar_button().click()
             self.tips_operate()
             familiar_add.append(word)
         else:
             print('单词已标熟')
     else:
         if i == 2 or i == 4:
             self.familiar_button().click()
             self.tips_operate()
             familiar_add.append(word)
Пример #22
0
 def judge_word_is_familiar(self, familiar, word, i, familiar_add):
     """判断单词是否被标熟"""
     if word in familiar:
         if GetAttribute().selected(self.familiar_button()) == 'true':
             print("★★★ Error-- 此题未被标熟")
             self.click_familiar()
             self.tips_operate()
             familiar_add.append(word)
         else:
             print('单词已标熟')
     else:
         if i == 2 or i == 4:
             self.click_familiar()
             self.tips_operate()
             familiar_add.append(word)
Пример #23
0
    def result_img(self):
        """图片 选项"""
        ele = self.driver \
            .find_elements_by_xpath("//android.support.v7.widget.RecyclerView/*")  # 包括 句子+选项

        count = []
        option = []
        for i in range(len(ele)):
            if GetAttribute().get_class_name(
                    ele[i]) == 'android.widget.LinearLayout':
                count.append(i)

        count.append(len(ele))
        for j in range(len(count) - 1):
            option.append(count[j + 1] - count[j] - 1)
        return option
    def cancel_or_add_star(self, total, star_words, cancel=False):
        """添加或取消标星"""
        word_list = []
        while True:
            words = self.result_words()
            for i, w in enumerate(words):
                if w.text in word_list:
                    continue
                else:
                    if i == len(words) - 1:
                        self.screen_swipe_up(0.5, 0.8, 0.72, 1000)
                    result_word = w.text
                    word_list.append(result_word)
                    voice_btn = self.word_voice(
                        result_word) or self.sentence_voice(result_word)
                    voice_btn.click()
                    word_explain = self.word_explain(
                        result_word) or self.sentence_explain(result_word)
                    word_star = self.word_star(
                        result_word) or self.sentence_star(result_word)

                    if cancel:
                        print('单词:', result_word)
                        print('解释', word_explain.text)
                        if GetAttribute().get_selected(word_star) == 'true':
                            word_star.click()
                            print('取消标星')
                            star_words.remove(result_word)
                        print('-' * 20, '\n')
                    else:
                        if i == 2 or i == 4:
                            print('单词:', result_word, end='\t')
                            word_star.click()
                            print('添加标星')
                            star_words.append(result_word)
                            print('-' * 20, '\n')

            if len(word_list) != total:
                self.screen_swipe_up(0.5, 0.8, 0.3, 1000)
            else:
                break
        self.screen_swipe_down(0.5, 0.2, 0.8, 1000)
Пример #25
0
    def check_position_change(self):
        if self.wait_check_keyboard_page():
            self.hide_keyboard_btn().click()

        self.screen_swipe_down(0.5, 0.2, 0.9, 1000)
        if GetAttribute().get_checked(self.font_large()) == 'false':
            self.base_assert.except_error('页面未默认选择中等字体')

        # 依次点击Aa,并获取第一个填空的X轴位置,比较大小
        large_size = self.rich_text().size

        self.font_middle().click()
        time.sleep(1)
        middle_size = self.rich_text().size

        self.font_great().click()
        time.sleep(1)
        great_size = self.rich_text().size

        if large_size['height'] < middle_size['height']:
            self.base_assert.except_error('大字体变中等字体未发生变化')
        if great_size['height'] < large_size['height']:
            self.base_assert.except_error('超大字变大字体未发生变化')
    def word_match_result_operate(self, mine_answer):
        """连连看结果页处理"""
        for x in range(len(mine_answer)):
            if x != len(mine_answer) - 1:
                index_num = x + 1
            else:
                index_num = x
                self.screen_swipe_up(0.5, 0.9, 0.4, 1000)
            while not self.wait_check_word_container_by_index_and_id(
                    index_num):
                self.screen_swipe_up(0.5, 0.9, 0.85, 500)
            result_explain = self.group_explain(x)
            result_word = self.group_word(x)
            self.group_word_voice(x).click()
            result_icon = self.group_right_wong_icon(x)
            print('解释:', result_explain)
            print('单词:', result_word)

            if GetAttribute().get_selected(result_icon) == 'false':
                self.base_assert.except_error('单词判断状态为错误!' + result_word)
            else:
                print('图标标识正确\n')

        return {}, len(mine_answer), len(mine_answer)
Пример #27
0
 def __init__(self):
     self.get = GetAttribute()
Пример #28
0
class Cloze(BasePage):
    """完形填空"""
    def __init__(self):
        self.get = GetAttribute()

    @teststeps
    def wait_check_page(self):
        """以“title:完形填空”的xpath-index为依据"""
        locator = (By.XPATH,
                   "//android.widget.TextView[contains(@text,'完形填空')]")
        try:
            WebDriverWait(self.driver, 20,
                          0.5).until(lambda x: x.find_element(*locator))
            return True
        except:
            return False

    @teststeps
    def wait_check_play_page(self):
        """以“rate”的ID为依据"""
        locator = (By.XPATH,
                   "//android.widget.TextView[contains(@resource-id,'{}rate')]"
                   .format(self.id_type()))
        try:
            WebDriverWait(self.driver, 20,
                          0.5).until(lambda x: x.find_element(*locator))
            return True
        except:
            return False

    @teststep
    def rate(self):
        """获取作业数量"""
        rate = self.driver \
            .find_element_by_id(self.id_type() + "rate").text
        return rate

    @teststep
    def font_middle(self):
        """第一个Aa"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "font_middle")

        return ele

    @teststep
    def font_large(self):
        """第二个Aa"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "font_large")
        return ele

    @teststep
    def font_great(self):
        """第三个Aa"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "font_great")
        return ele

    @teststep
    def dragger_button(self):
        """拖动按钮"""
        num = self.driver \
            .find_element_by_id(self.id_type() + "dragger")
        return num

    @teststeps
    def question(self):
        """题目"""
        num = self.driver \
            .find_element_by_id(self.id_type() + "question").text
        return num

    @teststeps
    def option_button(self, var):
        """选项"""
        ele = self.driver \
            .find_elements_by_xpath("//android.widget.TextView[contains(@text, '%s')]"
                                    "/following-sibling::android.widget.LinearLayout/android.widget.LinearLayout"
                                    "/android.widget.LinearLayout/android.widget.TextView" % var)
        item = []
        content = []
        for i in range(0, len(ele), 2):
            item.append(ele[i])
            content.append(ele[i + 1])
        print('选项个数:', len(item), len(content))
        return item, content

    @teststeps
    def option_content(self):
        """选项 内容"""
        ele = self.driver \
            .find_elements_by_id(self.id_type() + "tv_item")
        return ele

    @teststep
    def time(self):
        """获取作业时间"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "time").text
        return ele

    def options_view_size(self):
        """获取整个选项页面大小"""
        num = self.driver.find_element_by_id(self.id_type() + "option")
        var = num.size
        return var['height']

    @teststep
    def input_text(self):
        """输入框"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "cl_content")
        return ele

    @teststeps
    def get_input_bounds(self):
        """获取 输入框坐标"""
        ele = self.input_text()  # 输入框
        content = self.get.get_description(ele)
        item_x = re.match(".*\[(.*)\].*\[", content)  # x值
        item_y = re.match(".*\[(.*)\].*", content)  # y值
        x = item_x.group(1).split(',')  # 所有输入框y值的列表
        y = item_y.group(1).split(',')  # 所有输入框x值的列表
        size = ele.size
        return x, y, size

    @teststeps
    def get_result(self):
        """获取 输入框 的结果"""
        ele = self.input_text()  # 输入框
        content = self.get.get_description(ele)
        value = re.match("\\[(.+?)\\]", content)  # answer
        answer = value.group(1).split(',')  # 所有输入框值的列表
        print(answer)
        return answer

    @teststeps
    def cloze_operate(self):
        """《完形填空》 游戏过程"""
        if self.wait_check_page():
            if self.wait_check_play_page():
                result = []
                timestr = []  # 获取每小题的时间
                rate = self.rate()

                self.font_operate()  # Aa文字大小切换按钮 切换 及状态统计

                drag = self.dragger_button()  # 拖拽 拖动按钮
                loc = self.get_element_bounds(drag)
                size = self.options_view_size()  # 获取整个选项页面大小

                y = loc[3] - size * 4 / 3
                if loc[3] - size * 4 / 3 < 0:
                    y = 0
                self.driver.swipe(loc[2], loc[3], loc[2], y, 1000)  # 向上拖拽

                for i in range(int(rate)):
                    Homework().rate_judge(rate, i)  # 测试当前rate值显示是否正确
                    Homework().next_button_operate('false')  # 下一题 按钮 判断加 点击操作

                    if i == 4:
                        self.screen_swipe_up(0.5, 0.5, 0.25, 1000)

                    num = self.question()  # 题目
                    if int(re.sub("\D", "", num)) == i:  # 如果一次没滑动,再滑一次
                        self.screen_swipe_left(0.9, 0.8, 0.1, 2000)
                        num = self.question()  # 题目
                    print(num)

                    options = self.option_button(num)  # 四个选项
                    options[0][random.randint(0, len(options[0])) -
                               1].click()  # 随机点击选项
                    time.sleep(1)
                    for j in range(len(options[0])):
                        if self.get.get_selected(options[0][j]) == 'true':
                            print('选择的答案:', options[1][j].text)
                            result.append(options[1][j].text)
                            break

                    timestr.append(self.time())  # 统计每小题的计时控件time信息
                    self.screen_swipe_left(0.9, 0.8, 0.1, 2000)

                    if i == int(
                            rate) - 1:  # 最后一小题:1、测试滑动页面是否可以进入结果页   2、拖拽 拖动按钮
                        if not ResultPage().wait_check_result_page(
                                2):  # 结果页检查点
                            drag = self.dragger_button()  # 拖拽 拖动按钮
                            loc = self.get_element_bounds(drag)
                            self.driver.swipe(loc[2], loc[3], loc[2],
                                              loc[3] + size - 10,
                                              1000)  # 拖拽按钮到底部
                        else:
                            print('❌❌❌ Error - 滑动页面进入了结果页')

                    time.sleep(1)
                    print('================')

                time.sleep(1)
                content = self.get_result()  # 测试 是否答案已填入文章中
                if len(content) != len(result):
                    print('❌❌❌ Error -获取到的答案不一致', result, content)
                else:
                    for k in range(len(result)):
                        if content[k][
                                0] == ' ':  # 由于填入content-desc的数据会自动加一个空格,故去掉
                            content[k] = content[k][1:]
                        if content[k] != result[k]:
                            print('❌❌❌ Error - 填入的答案与选择的答案不一致', result[k],
                                  content[k])

                Homework().next_button_operate('true')  # 下一题 按钮 状态判断 加点击
                Homework().now_time(timestr)  # 判断游戏界面 计时功能控件 是否在计时

    @teststeps
    def font_operate(self):
        """Aa文字大小切换按钮 状态判断 及 切换操作"""
        x = []
        y = []
        middle = self.font_middle()  # first
        large = self.font_large()  # second
        great = self.font_great()  # third

        i = 0
        j = 0
        while i < 3:
            bounds = self.get_input_bounds()  # 获取输入框坐标
            print(self.get.get_checked(middle), self.get.get_checked(large),
                  self.get.get_checked(great))

            if self.get.get_checked(middle) == 'false':
                if self.get.get_checked(large) == 'false':
                    x.insert(2, bounds[0][0])
                    y.insert(2, bounds[1][0])
                    print('当前选中的Aa按钮为第3个:', bounds[0][0], bounds[1][0])
                    j = 3
                else:
                    if self.get.get_checked(large) == 'true':
                        x.insert(1, bounds[0][0])
                        y.insert(1, bounds[1][0])
                        print('当前选中的Aa按钮为第2个:', bounds[0][0], bounds[1][0])
                        j = 2
            else:
                x.insert(0, bounds[0][0])
                y.insert(0, bounds[1][0])
                print('当前选中的Aa按钮为第1个:', bounds[0][0], bounds[1][0])
                j = 1

            if j == 1:
                large.click()
            elif j == 2:
                great.click()
            else:
                middle.click()
            i += 1
            print('--------------------------------------------')
            time.sleep(2)

        if not float(y[2]) > float(y[1]) > float(y[0]):
            print('❌❌❌ Error - Aa文字大小切换按钮:', y)
        print('==============================================')
Пример #29
0
 def __init__(self):
     self.result = ResultPage()
     self.get = GetAttribute()
     self.key = Keyboard()
Пример #30
0
class WordSpelling(BasePage):
    """单词拼写"""
    def __init__(self):
        self.result = ResultPage()
        self.get = GetAttribute()
        self.key = Keyboard()

    # 以下为 共有元素
    @teststeps
    def wait_check_page(self):
        """以“title:单词拼写”的ID为依据"""
        locator = (By.XPATH,
                   "//android.widget.TextView[contains(@text,'单词拼写')]")
        try:
            WebDriverWait(self.driver, 20,
                          0.5).until(lambda x: x.find_element(*locator))
            return True
        except:
            return False

    @teststeps
    def wait_check_play_page(self):
        """以“rate”的ID为依据"""
        locator = (By.XPATH, "//android.widget.TextView[contains(@resource-id,"
                   "'{}rate')]".format(self.id_type()))
        try:
            WebDriverWait(self.driver, 20,
                          0.5).until(lambda x: x.find_element(*locator))
            return True
        except:
            return False

    @teststep
    def rate(self):
        """获取作业数量"""
        rate = self.driver\
            .find_element_by_id(self.id_type() + "rate").text
        return rate

    @teststep
    def time(self):
        """获取作业时间"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "time").text
        return ele

    @teststep
    def click_voice(self):
        """页面内喇叭量按钮"""
        self.driver \
            .find_element_by_id(self.id_type() + "play_voice") \
            .click()

    @teststeps
    def word(self):
        """展示的Word"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "tv_word").text
        word = ele[1::2]
        print('study_word:', word)
        return word

    @teststep
    def explain(self):
        """展示的翻译"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_explain").text
        return word

    @teststep
    def finish_word(self):
        """完成答题 之后 展示的Word 前后含额外字符:aa"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_word").text
        return word[1::2]

    # 默写模式 特有元素
    @teststeps
    def dictation_word(self):
        """展示的Word"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "tv_word").text
        value = ele[::2]
        return value

    @teststeps
    def dictation_word_judge(self):
        """判断是否展示Word"""
        try:
            self.driver \
                .find_element_by_id(self.id_type() + "tv_word")
            return True
        except Exception:
            return False

    @teststep
    def under_line(self):
        """展示的横线"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "underline")
        return ele

    @teststep
    def hint_button(self):
        """提示按钮"""
        ele = self.driver \
            .find_element_by_id(self.id_type() + "hint")
        return ele

    # 下一步 按钮之后 答案页展示的答案
    @teststep
    def mine_answer(self):
        """展示的Word  前后含额外字符:aa"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_word").text
        return word[1::2]

    @teststep
    def question(self):
        """展示的翻译"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_explain").text
        return word

    @teststep
    def correct(self):
        """展示的答案"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_answer").text
        return word

    @teststeps
    def correct_judge(self):
        """判断 答案是否展示"""
        try:
            self.driver \
                .find_element_by_id(self.id_type() + "tv_answer")
            return True
        except Exception:
            return False

    # 默写模式 答案页特有元素
    @teststep
    def dictation_finish_word(self):
        """完成答题 之后 展示的Word  前后不含额外字符:aa"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_word").text
        return word[::2]

    @teststep
    def dictation_mine_answer(self):
        """展示的Word  前后不含额外字符:aa"""
        word = self.driver \
            .find_element_by_id(self.id_type() + "tv_word").text
        return word[::2]

    # 以下为答案详情页面元素
    @teststeps
    def wait_check_detail_page(self):
        """以“answer”的ID为依据"""
        locator = (By.XPATH,
                   "//android.widget.TextView[contains(@resource-id," +
                   self.id_type() + "tv_answer)]")
        try:
            WebDriverWait(self.driver, 20,
                          0.5).until(lambda x: x.find_element(*locator))
            return True
        except:
            return False

    @teststep
    def result_voice(self, index):
        """语音按钮"""
        self.driver \
            .find_elements_by_id(self.id_type() + "iv_speak")[index] \
            .click()

    @teststep
    def result_answer(self, index):
        """单词"""
        ele = self.driver \
            .find_elements_by_id(self.id_type() + "tv_answer")[index].text
        return ele

    @teststep
    def result_explain(self, index):
        """解释"""
        ele = self.driver \
            .find_elements_by_id(self.id_type() + "tv_hint")[index].text
        return ele

    @teststep
    def result_mine(self, index):
        """我的"""
        ele = self.driver \
            .find_elements_by_id(self.id_type() + "iv_mine")[index]
        value = self.get.get_selected(ele)
        return value

    @teststeps
    def diff_type(self, tpe):
        """选择 不同模式小游戏的 游戏方法"""
        print(tpe)
        time.sleep(2)
        if tpe == '默写模式':
            answer = self.dictation_pattern()
        elif tpe == '自定义':
            answer = self.custom_pattern()
        else:  # 随机模式
            answer = self.random_pattern()
        return answer

    @teststeps
    def random_pattern(self):
        """《单词拼写 随机模式》 游戏过程"""
        if self.wait_check_page():  # 页面检查点
            if self.wait_check_play_page():
                var = []  # 随机消除的字母
                count = []  # 做错的题目
                answer = []  # return值 与结果页内容比对
                timestr = []  # 获取每小题的时间

                rate = self.rate()
                for i in range(int(rate)):
                    Homework().rate_judge(rate, i)  # 测试当前rate值显示是否正确
                    Homework().next_button_operate('false')  # 下一题 按钮 判断加 点击操作

                    explain = self.explain()  # 解释
                    word = self.word()  # 未缺失的字母
                    value = word_spelling_operate(explain)  # 数据字典

                    item = word.replace('_', '')
                    if self.is_alphabet(item):  # 未缺失的内容为字母
                        if value != word:  # 随机消除的字母消除了
                            for j in range(len(value)):
                                if value[j] != word[j]:
                                    print('缺失的字母:', value[j])
                                    var.append(j)
                                    self.keyboard_operate(
                                        j, value[j])  # 点击键盘 具体操作

                    answer.append(self.finish_word())  # 我的答案
                    Homework().next_button_operate('true')  # 下一题 按钮 状态判断加 点击操作

                    self.result_operate(answer, count, i, timestr,
                                        self.mine_answer())  # 下一步按钮后的答案页面 测试
                    Homework().next_button_operate('true')  # 下一题 按钮 判断加 点击操作
                    print('======================================')

                Homework().now_time(timestr)  # 判断游戏界面 计时功能控件 是否在计时
                return rate, answer, var

    @teststeps
    def custom_pattern(self):
        """《单词拼写 自定义模式》 游戏过程"""
        if self.wait_check_page():  # 页面检查点
            if self.wait_check_play_page():
                count = []  # 做错的题目
                answer = []  # return值 与结果页内容比对
                timestr = []  # 获取每小题的时间
                rate = self.rate()
                for i in range(int(rate)):
                    Homework().rate_judge(rate, i)  # 测试当前rate值显示是否正确
                    Homework().next_button_operate('false')  # 下一题 按钮 判断加 点击操作

                    explain = self.explain()  # 解释
                    word = self.word()  # 未缺失的字母
                    value = word_spelling_operate(explain)  # 数据字典

                    item = word.replace('_', '')
                    if self.is_alphabet(item):  # 未缺失的内容为字母
                        if len(word) != 0:
                            if value != word:  # 自定义消除的字母消除了
                                for j in range(len(value)):
                                    if value[j] != word[j]:
                                        print('缺失的字母:', value[j])
                                        self.keyboard_operate(
                                            j, value[j])  # 点击键盘 具体操作
                            else:
                                print('❌❌❌ Error - 自定义消除的字母未消除', word)
                                for j in range(0, len(value) - 1):
                                    if value[j] != word[j]:
                                        print('❌❌❌ Error - 未自定义消除的字母%s也消除了' %
                                              value[j])

                    answer.append(self.finish_word())  # 我的答案
                    Homework().next_button_operate('true')  # 下一题 按钮 状态判断 加点击

                    self.result_operate(answer, count, i, timestr,
                                        self.mine_answer())  # 下一步按钮后的答案页面 测试
                    Homework().next_button_operate('true')  # 下一题 按钮 状态判断 加点击

                    print('======================================')

                Homework().now_time(timestr)  # 判断游戏界面 计时功能控件 是否在计时
                return rate, answer

    @teststeps
    def dictation_pattern(self):
        """《单词拼写 默写模式》 游戏过程"""
        if self.wait_check_page():  # 页面检查点
            if self.wait_check_play_page():
                count = []
                answer = []  # return值 与结果页内容比对
                timestr = []  # 获取每小题的时间
                rate = self.rate()
                for i in range(int(rate)):
                    Homework().rate_judge(rate, i)  # 测试当前rate值显示是否正确
                    Homework().next_button_operate('false')  # 下一题 按钮 判断 加点击

                    explain = self.explain()  # 解释
                    value = word_spelling_operate(explain)  # 数据字典

                    if self.dictation_word_judge():  # 默写模式 - 字母未全部消除
                        print('❌❌❌ Error - 单词拼写 默写模式 - 字母未全部消除')

                    if i in range(2, 5, 2):
                        hint = self.hint_button()  # 提示按钮
                        if self.get.get_enabled(hint) == 'true':
                            hint.click()  # 点击 提示按钮
                            if self.get.get_enabled(hint) != 'false':
                                print('❌❌❌ Error - 点击后提示按钮enabled属性为:',
                                      self.get.get_enabled(hint))

                            if self.dictation_word_judge():  # 出现首字母提示
                                word = self.dictation_word()
                                if len(word) == 1 and word == value[0]:
                                    print('点击提示出现首字母提示', word)
                                else:
                                    print('❌❌❌ Error - 点击提示未出现首字母提示')
                        else:
                            print('❌❌❌ Error - 提示按钮enabled属性为:',
                                  self.get.get_enabled(hint))

                    for j in range(len(value)):
                        self.keyboard_operate(j, value[j])  # 点击键盘 具体操作

                    answer.append(self.dictation_finish_word())  # 我的答案
                    Homework().next_button_operate('true')  # 下一题 按钮 状态判断 加点击

                    self.result_operate(
                        answer, count, i, timestr,
                        self.dictation_mine_answer())  # 下一步按钮后的答案页面 测试
                    Homework().next_button_operate('true')  # 下一题 按钮 状态判断 加点击
                    print('======================================')

                Homework().now_time(timestr)  # 判断游戏界面 计时功能控件 是否在计时
                return rate, answer

    @teststeps
    def keyboard_operate(self, j, value):
        """点击键盘 具体操作"""
        if j == 4:
            self.key.games_keyboard('capslock')  # 点击键盘 切换到 大写字母
            self.key.games_keyboard(value.upper())  # 点击键盘对应 大写字母
            self.key.games_keyboard('capslock')  # 点击键盘 切换到 小写字母
        else:
            self.key.games_keyboard(value)  # 点击键盘对应字母

    @teststeps
    def result_operate(self, answer, count, i, timestr, mine):
        """下一步按钮后的答案页面"""
        # mine 为 答案页面展示的 我的答题结果
        print('----------------------')
        result = answer[len(answer) - 1]
        print('我的答案:', result)
        print('我的答题结果:', mine)
        if self.correct_judge():  # 展示的答案元素存在说明回答错误
            correct = self.correct()  # 正确答案
            if len(mine) <= len(correct):  # 输入少于或等于单词字母数的字符
                if mine.lower() != result.lower():  # 展示的 我的答题结果 是否与我填入的一致
                    print('Error - 字符数少于或等于时:', mine.lower(), result.lower())
            else:  # 输入过多的字符
                if correct + mine[len(correct):].lower() != correct + result[
                        len(correct):].lower():  # 展示的 我的答题结果 是否与我填入的一致
                    print('Error - 字符输入过多时:',
                          correct + mine[len(correct):].lower(),
                          correct + result[len(correct):].lower())

            for k in range(len(correct)):  # 测试 答案判断是否正确
                if result[k] not in correct:
                    count.append(i)  # 做错的题目
                    break
        else:  # 回答正确
            if mine.lower() != result.lower():  # 展示的 我的答题结果 是否与我填入的一致
                print('Error - 展示的答题结果 与我填入的不一致:', mine.lower(),
                      result.lower())

        if i == 1:  # 第2题
            j = 0
            print('多次点击发音按钮:')
            while j < 4:
                print(j)
                self.click_voice()  # 多次点击发音按钮
                j += 1
            time.sleep(1)
        else:
            self.click_voice()  # 点击 发音按钮
        timestr.append(self.time())  # 统计每小题的计时控件time信息

    @teststeps
    def result_detail_page(self, rate):
        """查看答案 操作过程"""
        if self.result.wait_check_result_page():  # 结果页检查点
            self.result.check_result_button()  # 结果页 查看答案 按钮
            if self.result.wait_check_detail_page():
                print('======================================')
                print('查看答案:')
                self.error_sum(rate)
                time.sleep(2)
            print('==============================================')

    @teststeps
    def error_sum(self, rate):
        """查看答案 - 点击答错的题 对应的 听力按钮"""
        print('题数:', int(rate))
        for i in range(0, int(rate)):
            print('解释:', self.result_explain(i))  # 解释
            print('单词:', self.result_answer(i))  # 正确word
            print('对错标识:', self.result_mine(i))  # 对错标识
            print('-----------------------------------')
            self.result_voice(i)  # 点击发音按钮
        self.result.back_up_button()  # 返回结果页

    @teststeps
    def study_again(self, tpe):
        """再练一遍 操作过程"""
        if self.result.wait_check_result_page():  # 结果页检查点
            self.result.again_button()  # 结果页 再练一遍 按钮
            print('再练一遍:')
            self.diff_type(tpe)  # 不同模式 对应不同的游戏过程