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('==============================================')
class ReadCompre(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(self): """拖动按钮""" ele = self.driver \ .find_element_by_id(self.id_type() + "dragger") return ele @teststep def question_num(self): """题目内容""" num = self.driver \ .find_element_by_id(self.id_type() + "question") return num @teststeps def get_first_num(self): """获取 当前页面第一个题号""" item = self.question_num().text.split(".")[0] return item def article_view_size(self): """获取整个文章页面大小""" num = self.driver.find_element_by_id(self.id_type() + "ss_view") var = num.size return var['height'] def options_view_size(self): """获取整个选项页面大小""" num = self.driver.find_element_by_id(self.id_type() + "optionlist") var = num.size return var['height'] @teststeps def option_button(self, var): """选项""" print(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)) return item, content @teststep def option_item(self, index): """选项 内容""" ele = self.driver \ .find_elements_by_id(self.id_type() + "tv_item")[index].text return ele @teststep def time(self): """获取作业时间""" ele = self.driver \ .find_element_by_id(self.id_type() + "time").text return ele @teststeps 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) # 判断游戏界面 计时功能控件 是否在计时 @teststeps def font_operate(self): """Aa文字大小切换按钮 状态判断 及 切换操作""" loc = [] middle = self.font_middle() # first large = self.font_large() # second great = self.font_great() # third i = 0 j = 0 while i < 3: self.screen_swipe_up(0.5, 0.85, 0.2, 1000) y = self.article_view_size() # 获取整个文章页面大小 self.screen_swipe_down(0.5, 0.2, 0.8, 1000) 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': print('当前选中的Aa按钮为第3个,页面高度:', y) loc.insert(2, y) j = 3 else: if self.get.get_checked(large) == 'true': print('当前选中的Aa按钮为第2个,页面高度:', y) loc.insert(1, y) j = 2 else: print('当前选中的Aa按钮为第1个,页面高度:', y) loc.insert(0, y) j = 1 if j == 1: large.click() elif j == 2: great.click() elif j == 3: middle.click() i += 1 time.sleep(2) print('-----------------------------------------') if not float(loc[2]) > float(loc[1]) > float(loc[0]): print('❌❌❌ Error - Aa文字大小切换按钮:', loc) print('=============================================')
class ChoiceWordCloze(BasePage): """选词填空""" def __init__(self): self.bounds = ClickBounds() self.result = ResultPage() self.get = GetAttribute() self.key = Keyboard() @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," + self.id_type() + "rate)]") 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 prompt(self): """提示词""" self.driver\ .find_element_by_id(self.id_type() + "prompt").click() @teststep def bounds_prompt(self): """提示词按钮""" ele = self.driver\ .find_elements_by_xpath("//android.widget.TextView[contains(@index,0)]")[1] return ele @teststep def prompt_content(self): """提示词内容""" ele = self.driver \ .find_elements_by_xpath("//android.widget.TextView[contains(@index,0)]")[1].text return ele @teststep def click_blank(self): """点击页面 提示词弹框 以外空白处,弹框消失""" self.bounds.click_bounds(67.5, 1119.5) time.sleep(1) @teststep def time(self): """获取作业时间""" ele = self.driver \ .find_element_by_id(self.id_type() + "time").text return ele # 查看答案 页面 @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 content_value(self): """获取整个 外框元素""" ele = self.driver\ .find_element_by_id(self.id_type() + "tb_content") return ele @teststeps def content_desc(self): """点击输入框,激活小键盘""" content = self.get.get_description(self.content_value()) 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值的列表 return x, y @teststeps def get_result(self): """点击输入框,激活小键盘""" content = self.get.get_description(self.content_value()) value = re.match("\\[(.+?)\\]", content) # answer answer = value.group(1).split(',') # 所有输入框值的列表 print('正确答案:', answer) self.click_blank() return answer @teststeps def choice_word_filling(self): """《选词填空》 游戏过程""" if self.wait_check_page(): # 页面检查点 if self.wait_check_play_page(): timestr = [] self.prompt() # 右上角 提示词 time.sleep(1) content = self.prompt_content() # 取出提示内容 self.click_blank() # 点击空白处 弹框消失 word_list = content.split(' ') # 取出单词列表 print('待输入的单词:', word_list) self.font_operate() # Aa文字大小切换按钮 切换 及状态统计 rate = self.rate() for i in range(int(rate)): Homework().rate_judge(rate, i) # 测试当前rate值显示是否正确 Homework().next_button_operate('false') # 下一题 按钮 状态判断 加点击 if i == 0: # 获取第一个输入框的坐标,点击激活小键盘 item = self.content_desc() loc = self.get_element_location(self.content_value()) # 文章元素左上角 顶点坐标 x = float(item[0][i]) + loc[0]+55.0 # 55.0为点击输入框中心点的偏移量 y = float(item[1][i]) + loc[1] self.driver.tap([(x, y)]) # 点击激活输入框 else: self.key.games_keyboard('enter') # 点击回车键进入下一题 word = word_list[i] # 单词 print('study_word:', word) if len(word_list) >= int(rate): for index in range(len(word)): if index == 4: self.key.games_keyboard('capslock') # 点击键盘 切换到 大写字母 self.key.games_keyboard(word[index].upper()) # 点击键盘对应 大写字母 self.key.games_keyboard('capslock') # 点击键盘 切换到 小写字母 else: self.key.games_keyboard(word[index]) # 点击键盘对应字母 else: self.key.games_keyboard('a') # 点击键盘对应字母 timestr.append(self.time()) # 统计每小题的计时控件time信息 Homework().next_button_operate('true') # 下一题 按钮 状态判断 加点击 Homework().now_time(timestr) # 判断游戏界面 计时功能控件 是否在计时 print('==================================================') return rate @teststeps def check_detail_page(self, rate, homework_title, game_title): """查看答案页面面""" if self.result.wait_check_result_page(): # 结果页检查点 self.result.check_result_button() # 结果页 查看答案 按钮 if self.result.wait_check_detail_page(): # 页面检查点 print('查看答案页面:') item = self.get_result() print('excel-opeate:') for i in range(len(item)): print('----------------------') ExcelUtil().data_write(rate, homework_title, game_title, item[i]) self.result.back_up_button() @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.content_desc() # 获取输入框坐标 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('==============================================')
class CompleteArticle(BasePage): """补全文章""" def __init__(self): self.result = ResultPage() 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): """拖动按钮""" ele = self.driver \ .find_element_by_id(self.id_type() + "dragger") return ele @teststep def option_button(self): """选项ABCD""" ele = self.driver \ .find_elements_by_id(self.id_type() + 'tv_char') return ele @teststep def option_content(self, index): """选项 内容""" ele = self.driver \ .find_elements_by_id(self.id_type() + 'tv_item')[index].text print('选项内容:', ele) 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 time(self): """获取作业时间""" ele = self.driver \ .find_element_by_id(self.id_type() + "time").text return ele @teststep def input_text(self): """输入框""" ele = self.driver \ .find_element_by_id(self.id_type() + "ss_view") 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值的列表 return x, y # 查看答案 页面 @teststeps def wait_check_detail_page(self): """以“answer”的ID为依据""" locator = (By.XPATH, "//android.widget.TextView[contains(@resource-id," "'{}tb_content)']".format(self.id_type())) try: WebDriverWait(self.driver, 20, 0.5).until(lambda x: x.find_element(*locator)) return True except: return False @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(',') # 所有输入框值的列表 return answer @teststeps def complete_article_operate(self): """《补全文章》 游戏过程""" if self.wait_check_page(): if self.wait_check_play_page(): content = [] timestr = [] # 获取每小题的时间 self.font_operate() # Aa文字大小切换按钮 切换 及状态统计 drag = self.dragger_button() # 拖拽 拖动按钮 loc = self.get_element_bounds(drag) # 获取按钮坐标 size = self.options_view_size() # 获取整个选项页面大小 self.driver.swipe(loc[2], loc[3], loc[2], loc[3] - size, 1000) # 向上拖拽 rate = self.rate() for i in range(int(rate)): Homework().rate_judge(rate, i) # 测试当前rate值显示是否正确 Homework().next_button_operate('false') # 下一题 按钮 判断加 点击操作 options = self.option_button() # 选项ABCD if len(options) < i + 1: options = self.option_button() # 选项ABCD self.screen_swipe_up(0.5, 0.9, 0.6, 1000) # 滑屏 text = [options[i].text] options[i].click() # 依次点击选项 content.append(self.get_result()[i]) # 测试 是否答案已填入文章中 time.sleep(1) if content[i] == ' ': print('❌❌❌ Error - 答案未填入文章中') else: print('第%s题:' % (i + 1)) print(text, content[i]) timestr.append(self.time()) # 统计每小题的计时控件time信息 print('-------------------------') if i == int(rate) - 1: drag = self.dragger_button() # 拖拽 拖动按钮 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) # 向下拖拽按钮 Homework().next_button_operate('true') # 下一题 按钮 状态判断 加点击 Homework().now_time(timestr) # 判断游戏界面 计时功能控件 是否在计时 print('============================================') return rate @teststeps def result_detail_page(self): """查看答案页面""" if self.result.wait_check_result_page(): # 结果页检查点 self.result.check_result_button() # 结果页 查看答案 按钮 if self.result.wait_check_detail_page(): # 页面检查点 if self.wait_check_detail_page(): print('查看答案页面:') item = self.get_result() print("正确答案:", item) self.result.back_up_button() # 返回结果页 @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() elif j == 3: middle.click() i += 1 print('--------------------------------------------') time.sleep(2) if not float(y[2]) > float(y[1]) > float(y[0]): print('❌❌❌ Error - Aa文字大小切换按钮:', y) print('==============================================')