From ddf66cf155af3805323ec55ae6814f2d23d40c07 Mon Sep 17 00:00:00 2001 From: 阳洁 <2077506045@qq.com> Date: 星期五, 28 七月 2023 18:42:30 +0800 Subject: [PATCH] 测评系统自动测试 --- elements/maq_answer_elements.py | 19 po/product_accredit_page.py | 38 po/maq_answer_page.py | 89 po/home_page.py | 61 testcase/test_product_accredit.py | 78 .gitignore | 1 elements/report_elements.py | 27 po/caq_answer_page.py | 40 po/login_page.py | 74 po/export_test_data_page.py | 38 report/report.html | 152 + testcase/test_vaq.py | 4 elements/group_report_elements.py | 36 testcase/test_3export_test_data.py | 124 + testcase/test_caq.py | 136 - comm/read_data.py | 36 po/group_report_page.py | 27 comm/write_data.py | 18 elements/share_add_elements.py | 34 main.py | 2 data/question_data.json | 596 ++++++ testcase/test_2package_list.py | 820 ++++++++ po/report_page.py | 38 testcase/test_maq.py | 110 testcase/conftest.py | 18 data/test_data.json | 1312 ++++++++++++++ elements/product_accredit__elements.py | 35 base/base_page.py | 361 +++ elements/login_elements.py | 10 elements/export_test_data_elements.py | 30 comm/comm.py | 17 elements/home_elements.py | 11 po/member_detail_page.py | 164 + testcase/test_group_report.py | 147 + elements/member_detail_elements.py | 95 + elements/test_package_list_elements.py | 102 + testcase/test_login.py | 53 po/share_add_page.py | 76 po/test_package_list_page.py | 514 +++-- 39 files changed, 4,958 insertions(+), 585 deletions(-) diff --git a/.gitignore b/.gitignore index 087029a..6b9018b 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ *.egg-info/ .installed.cfg *.egg +download/ # Installer logs pip-log.txt diff --git a/base/base_page.py b/base/base_page.py index 6bcb658..aba837a 100644 --- a/base/base_page.py +++ b/base/base_page.py @@ -1,20 +1,272 @@ +import importlib +import time +from selenium.common import StaleElementReferenceException, ElementClickInterceptedException +from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.remote.webdriver import WebDriver + +SimpleActions = ['clear()', 'send_keys()', 'click()', 'submit()', 'size', 'text', 'is_displayed()', 'get_attribute()'] +complexActions = ['iframe()', 'select()', 'option()'] + +# 榛樿瓒呮椂鏃堕棿10绉� +DEFAULT_TIMEOUT = 10 +# 榛樿閲嶈瘯娆℃暟 +DEFAULT_RETRY = 30 class BasePage: + + retry_number = 0 + # 鍒濆鍖栨柟娉� - def __init__(self, driver): + def __init__(self, driver: WebDriver): + """鏋勯�犳柟娉曪紝浼犲叆webdriver""" self.driver = driver - # 鍏冪礌瀹氫綅 - def get_element(self, locator): - return self.driver.find_element(*locator) + # def _get_page_elem(self, elem): + # """鑾峰彇瀹氫綅鍏冪礌鐨刡y锛屼互鍙婃搷浣渁ction""" + # for each in self.elements: + # if each['name'] == elem: + # self.loc = each['loc'] + # if each['action'] is not None: + # self.action = each['action'] + # else: + # self.action = None + # if 'optionsLoc' in each: + # self.optionsLoc = each['optionsLoc'] + # else: + # self.optionsLoc = None + # if 'wait' in each: + # self.wait = each['wait'] + # else: + # self.wait = None + # + # def oper_elem(self, elem, args=None): + # self._get_page_elem(elem) + # cmd = self._selenium_cmd('find_element', args) + # return eval(cmd) + # + # def oper_elems(self, elem, args=None): + # self._get_page_elem(elem) + # cmd = self._selenium_cmd('find_elements', args) + # return eval(cmd) + # + # def _selenium_cmd(self, find_type='find_element', args=None): + # """鎷兼帴selenium鏌ユ壘鍛戒护锛屾煡鎵惧崟涓厓绱犳椂find涓�'find_element',澶氫釜鍏冪礌鏃朵负'find_elements'""" + # cmd = 'self.driver.' + find_type + '(*self.loc)' + # if self.action: + # cmd = 'self.' + self.action + # if args: + # cmd = cmd[:-1] + 'args' + ')' + # return cmd + # + # def iframe(self): + # self.driver.switch_to.frame(self.driver.find_element(*self.loc)) + # + # def click(self): + # if self.wait: + # wait = WebDriverWait(self.driver, self.wait, 0.5) + # wait.until(EC.presence_of_element_located(self.loc)).click() + # else: + # self.driver.find_element(*self.loc).click() + # + # # 浣跨敤js璇彞鐐瑰嚮 + # def click_js(self): + # item = self.driver.find_element(*self.loc) + # self.driver.execute_script("arguments[0].click();", item) + # + # def send_keys(self, text): + # wait = WebDriverWait(self.driver, 10, 0.5) + # wait.until(EC.presence_of_element_located(self.loc)).send_keys(text) + # + # def text(self): + # wait = WebDriverWait(self.driver, 10, 0.5) + # return wait.until(EC.presence_of_element_located(self.loc)).text + # + def select(self, select_loc, options_loc, item): + """ + 閫夋嫨浼犲叆鐨勯�夐」 + :param select_loc: 閫夋嫨妗嗗畾浣� + :param options_loc: 閫夐」瀹氫綅 + :param item: 閫夐」 + :return: + """ + # 鐐瑰嚮閫夋嫨妗嗗璞� + self.click(select_loc, timeout=10) + # 鑾峰彇鎵�鏈夐�夐」 + options = self.get_eles(options_loc, timeout=10) + for option in options: + if option.text == item: + option.click() + break + # + # def value_js(self): + # """ + # 浣跨敤js璇彞鑾峰彇value鍊� + # :return: + # """ + # # 绛夊緟瀵硅薄 + # wait = WebDriverWait(self.driver, 10, 0.5) + # input_box = wait.until(EC.presence_of_element_located(self.loc)) + # input_value = self.driver.execute_script("return arguments[0].value", input_box) + # return input_value + # + # def option(self, text): + # """ + # 鐐瑰嚮浼犲叆鐨勯�夐」 + # :param text: + # :return: + # """ + # wait = WebDriverWait(self.driver, 10, 0.5) + # wait.until(EC.presence_of_all_elements_located(self.loc)) + # options = self.driver.find_elements(*self.loc) + # for option in options: + # if option.text == text: + # option.click() - # 澶氫釜鍏冪礌瀹氫綅 - def get_elements(self, locator): - return self.driver.find_elements(*locator) + # 鍏冪礌瀹氫綅 + + def goto(self, url): + """璁块棶url""" + self.driver.get(url) + + def get_ele(self, loc, timeout=None) -> WebElement: + """ + 鑾峰彇鍏冪礌 + :param loc: 鍏冪礌瀹氫綅 + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + if timeout: + return self.wait_visible(loc, timeout) + else: + return self.driver.find_element(*loc) + + def get_eles(self, loc, timeout=None): + """ + 鑾峰彇澶氫釜鍏冪礌 + :param loc: 鍏冪礌瀹氫綅 + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + if timeout: + return self.wait_visible(loc, timeout=timeout, find_type="elements") + else: + return self.driver.find_elements(*loc) + + def clear(self, loc, timeout=None): + """ + 娓呴櫎鏂囨湰妗嗗唴瀹� + :param loc: + :param timeout: + :return: + """ + ele = self.get_ele(loc, timeout=timeout) + ele.clear() + + def fill(self, loc, text, timeout=None): + """椤甸潰杈撳叆""" + + ele = self.get_ele(loc, timeout=timeout) + # 鍏堟竻闄ゆ枃鏈鍐呭 + ele.clear() + # 濉啓鍐呭 + ele.send_keys(text) + + def wait_visible(self, loc, timeout=DEFAULT_TIMEOUT, find_type="element") -> WebElement: + """ + 绛夊緟鍏冪礌鍙 + :param loc: 鍏冪礌瀹氫綅 + :param timeout: 绛夊緟鏃堕棿 + :param find_type: 绛夊緟鍏冪礌鐨勭被鍨� + :return: + """ + wait = WebDriverWait(self.driver, timeout=timeout) + element = None + if find_type == "element": + element = wait.until(EC.visibility_of_element_located(loc)) + elif find_type == "elements": + element = wait.until(EC.visibility_of_all_elements_located(loc)) + return element + + def click(self, loc, timeout=None): + """ + 鐐瑰嚮鍏冪礌 + :param loc: 鍏冪礌瀹氫綅 + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + try: + if timeout: + ele = self.wait_clickable(loc, timeout=timeout) + ele.click() + else: + ele = self.driver.find_element(*loc) + ele.click() + self.retry_number = 0 + except (StaleElementReferenceException, ElementClickInterceptedException): + if self.retry_number >= DEFAULT_RETRY: + return + time.sleep(1) + self.retry_number += 1 + self.click(loc, timeout=timeout) + + def click_js(self, loc, timeout=None): + """ + JavaScript鐐瑰嚮鍏冪礌 + :param loc: + :param timeout: + :return: + """ + item = self.get_ele(loc, timeout=timeout) + self.driver.execute_script("arguments[0].click();", item) + + def wait_clickable(self, loc, timeout=DEFAULT_TIMEOUT) -> WebElement: + """ + 绛夊緟鍏冪礌鍙偣鍑� + :param loc: 鍏冪礌瀹氫綅 + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + wait = WebDriverWait(self.driver, timeout=timeout) + element = wait.until(EC.element_to_be_clickable(loc)) + return element + + def equals(self, loc, text): + """ + 鍒ゆ柇鍏冪礌鐨剉alue鎴栬�卼ext鏄惁涓巘ext鐩哥瓑 + :param loc: + :param text: + :return: + """ + # 鍏堣幏鍙杤alue + ele_value = self.get_ele(loc, timeout=10).get_attribute("value") + # 濡傛灉涓篘one鍒欓�氳繃value_js鑾峰彇value鍊� + if not ele_value: + ele_value = self.get_value_js(loc, timeout=10) + # 濡傛灉杩樹负绌哄垯鑾峰彇text + if not ele_value: + ele_value = self.get_ele(loc, timeout=10).text + return ele_value == text + + def contains(self, loc, text): + """ + 鍒ゆ柇鍏冪礌鐨剉alue鎴栬�卼ext鍖呭惈text + :param loc: + :param text: + :return: + """ + # 鍏堣幏鍙杤alue + ele_value = self.get_ele(loc).get_attribute("value") + # 濡傛灉涓篘one鍒欓�氳繃value_js鑾峰彇value鍊� + if not ele_value: + ele_value = self.get_value_js(loc) + # 濡傛灉杩樹负绌哄垯鑾峰彇text + if not ele_value: + ele_value = self.get_ele(loc).text + return text in ele_value # 澶氫釜鍏冪礌瀹氫綅 def get_elements_wait(self, locator): @@ -36,11 +288,6 @@ wait.until(EC.presence_of_element_located(locator)) return self.driver.find_element(*locator) - # 浣跨敤js璇彞鐐瑰嚮 - def click_js(self, *locator): - item = self.get_element(*locator) - self.driver.execute_script("arguments[0].click();", item) - def click_js_wait(self, *locator): item = self.get_element_wait(*locator) self.driver.execute_script("arguments[0].click();", item) @@ -53,36 +300,41 @@ """ self.driver.execute_script("arguments[0].click();", element) - # 鐐瑰嚮 - def click(self, locator): - """ - 鐐瑰嚮鍏冪礌 - :param locator: 鍏冪礌瀹氫綅 - :return: - """ - self.get_element(locator).click() + # # 鐐瑰嚮 + # def click(self, locator): + # """ + # 鐐瑰嚮鍏冪礌 + # :param locator: 鍏冪礌瀹氫綅 + # :return: + # """ + # self.get_element(locator).click() def click_wait(self, *locator): self.get_element_wait(*locator).click() - # 杈撳叆 - def send_text(self, text, locator): - """ - 杈撳叆鍐呭 - :param text: 鍐呭 - :param locator: 鍏冪礌瀹氫綅 - :return: - """ - self.get_element(locator).send_keys(text) + # # 杈撳叆 + # def fill(self, text, locator): + # """ + # 杈撳叆鍐呭 + # :param text: 鍐呭 + # :param locator: 鍏冪礌瀹氫綅 + # :return: + # """ + # self.get_element(locator).send_keys(text) def send_text_wait(self, text, *locator): self.get_element_wait(*locator).send_keys(text) - # JavaScript鑾峰彇鍏冪礌鍊� - def get_input_value_js(self, locator): - input_box = self.get_element(locator) - input_value = self.driver.execute_script("return arguments[0].value", input_box) - return input_value + def get_value_js(self, loc, timeout=None): + """ + 鎵цJavaScript鑾峰彇value鍊� + :param timeout: + :param loc: + :return: + """ + ele = self.get_ele(loc, timeout=timeout) + value = self.driver.execute_script("return arguments[0].value", ele) + return value def get_input_value_js_wait(self, *locator): input_box = self.get_element_wait(*locator) @@ -97,11 +349,21 @@ self.get_element_wait(*locator).clear() # 琛ㄥ崟鍒囨崲 - def switch_iframe(self, locator): - self.driver.switch_to.frame(self.get_element(locator)) + def switch_iframe(self, loc): + """ + 鍒囨崲琛ㄥ崟 + :param loc: 琛ㄥ崟瀹氫綅 + :return: + """ + # 鑾峰彇鍒癷frame鍏冪礌 + iframe = self.get_ele(loc, timeout=10) + self.driver.switch_to.frame(iframe) - # 鍒囨崲鍒颁笂涓�灞傜殑iframe def switch_parent_iframe(self): + """ + 鍒囨崲鍒颁笂涓�灞傜殑iframe + :return: + """ self.driver.switch_to.parent_frame() def switch_iframe_wait(self, locator): @@ -150,7 +412,7 @@ """鎴彇褰撳墠绐楀彛淇濆瓨涓哄浘鐗�""" return self.driver.get_screenshot_as_png() - def open_new_table_to_url(self, url): + def goto_new_table(self, url): """ 鎵撳紑涓�涓柊鐨勬爣绛鹃〉锛屽苟璺宠浆鍒版寚瀹氱殑url :return: @@ -171,3 +433,26 @@ wait = WebDriverWait(self.driver, 10, 0.5) return wait.until(EC.visibility_of_any_elements_located(locator)) + def add_elements(self, ele): + """ + 鍦╡lements涓柊澧炲厓绱� + :param ele: + :return: + """ + self.elements.append(ele) + + +def get_page_elements(page): + """ + 鍔ㄦ�佸姞杞介〉闈㈠畾涔夋枃浠讹紝鑾峰彇鏂囦欢涓畾涔夌殑鍏冪礌鍒楄〃elements + :param page: + :return: + """ + elements = None + if page: + try: + m = importlib.import_module(page) + elements = m.elements + except Exception as e: + pass + return elements diff --git a/comm/comm.py b/comm/comm.py new file mode 100644 index 0000000..70caebd --- /dev/null +++ b/comm/comm.py @@ -0,0 +1,17 @@ +import os +import random +import string + + +def listdir(dir_path): + file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + if ".crdownload" not in filename: + file_names.append(filename) + return file_names + + +def generate_random_string(length): + letters = string.ascii_letters + string.digits + return ''.join(random.choice(letters) for _ in range(length)) diff --git a/comm/read_data.py b/comm/read_data.py new file mode 100644 index 0000000..58d3a3e --- /dev/null +++ b/comm/read_data.py @@ -0,0 +1,36 @@ +import codecs +import csv +from openpyxl import load_workbook + + +def read_csv(file_name): + data_list = list() + with codecs.open(file_name, encoding="utf-8") as f: + for row in csv.DictReader(f, skipinitialspace=True): + data_list.append(row) + + return data_list + + +def read_excel(file_name, sheet_name): + # 鎵撳紑Excel鏂囦欢锛屽姞杞絯orkbook + workbook = load_workbook(filename=file_name) + # 鏍规嵁鍚嶇О鑾峰彇worksheet + worksheet = workbook.get_sheet_by_name(sheet_name) + # 鑾峰彇鎵�鏈夋暟鎹� + rows = worksheet.rows + + # 灏嗙涓�琛屾暟鎹綔涓哄瓧鍏哥殑閿� + header = [] + for cell in next(rows): + header.append(cell.value) + + # 浠庣浜岃璧烽亶鍘嗘瘡涓�琛屾暟鎹紝骞跺瓨鍌ㄥ埌瀛楀吀涓� + data_list = [] + for row in rows: + data = {} + for i, cell in enumerate(row): + data[header[i]] = cell.value + data_list.append(data) + + return data_list diff --git a/comm/write_data.py b/comm/write_data.py new file mode 100644 index 0000000..0d9d6f5 --- /dev/null +++ b/comm/write_data.py @@ -0,0 +1,18 @@ +from openpyxl import load_workbook, Workbook + + +def write_excel(file_name, data): + # 鎵撳紑Excel鏂囦欢锛屽姞杞絯orkbook + flag = False + try: + workbook = load_workbook(filename=file_name) + except FileNotFoundError: + flag = True + workbook = Workbook() + # 鏍规嵁鍚嶇О鑾峰彇worksheet + worksheet = workbook.active + + if flag: + worksheet.append(["璐﹀彿", "鍏呭�兼暟", "瀹為檯鍏呭�兼暟", "鍏呭�煎墠浣欓", "鍏呭�煎悗浣欓"]) + worksheet.append(data) + workbook.save(filename=file_name) diff --git a/data/question_data.json b/data/question_data.json new file mode 100644 index 0000000..7ac1aba --- /dev/null +++ b/data/question_data.json @@ -0,0 +1,596 @@ +{ + "MAQ0001": { + "title": "鎴戜笉鍠滄鑺辨椂闂存鏌ュ皬缁嗚妭鐨勫噯纭��" + }, + "MAQ0003": { + "title": "鎴戜粠涓嶈璋庯紝鐢氳嚦杩炲皬璋庨兘娌℃湁璇磋繃" + }, + "MAQ0004": { + "title": "褰撴垜鍋氫竴涓」鐩椂锛屾垜浼氬叏鍔涗互璧达紝鐩村埌瀹屾垚涓烘" + }, + "MAQ0005": { + "title": "鎴戝�惧悜浜庝娇鐢ㄥ父瑙勬柟娉曪紝鑰屼笉鏄偅浜涗粠鏈皾璇曡繃鐨勬柟娉�" + }, + "MAQ0006": { + "title": "褰撴垜涓嶅緱涓嶅幓璐熻矗涓�涓洟闃熺殑鏃跺�欙紝鎴戜細鎰熻鎴樺參銆佹亹鎯�" + }, + "MAQ0007": { + "title": "鎴戞湁鏃跺洜涓哄悇绉嶅共鎵板洜绱狅紝鏈兘鎸夋椂瀹屾垚宸ヤ綔浠诲姟" + }, + "MAQ0009": { + "title": "鎴戣兘澶熸帶鍒惰嚜宸辩殑鎯呯华鐘舵�侊紝浣垮叾浠栦汉涓嶅お瀹规槗鐭ラ亾鎴戝唴蹇冪殑鎰熷彈" + }, + "MAQ0010": { + "title": "鎴戞敮鎸佹墍鍦ㄧ粍缁囩殑浠峰�艰鍜岃鑼冿紝骞朵簡瑙e叾閲嶈鎬�" + }, + "MAQ0011": { + "title": "鎴戜笉浼氬洜澶辫触鎴栨尗鎶樿�屾硠姘�" + }, + "MAQ0013": { + "title": "鎴戜粠鏉ユ病鏈夊湪琛椾笂涔辨墧鍨冨溇" + }, + "MAQ0014": { + "title": "鏈夋椂鎴戝彂鐜拌鍒汉鍚粠鎴戠殑鎸囩ず鏄欢寰堝洶闅剧殑浜�" + }, + "MAQ0015": { + "title": "蹇呰鏃讹紝鎴戣兘寰堝鏄撳湴闀挎椂闂村畬鍏ㄤ笓娉ㄤ簬閲嶈鐨勫伐浣滈」鐩�" + }, + "MAQ0019": { + "title": "鍦ㄩ」鐩伃鍙楅噸澶ф尗鎶樹箣鍚庯紝鎴戝苟涓嶆槸鎬昏兘婵�鍙戝洟闃熺殑鏂楀織" + }, + "MAQ0020": { + "title": "鎴戜粠鏈湪鑳屽悗璇磋繃鏈嬪弸鐨勫潖璇�" + }, + "MAQ0021": { + "title": "鎴戝枩娆㈡牴鎹洿瑙夋潵瑙e喅闂锛岃�屼笉鏄姳杈冮暱鏃堕棿杩涜绯荤粺鐨勫垎鏋�" + }, + "MAQ0024": { + "title": "鏀跨瓥鍜岃瀹氭�荤殑鏉ヨ鍙槸鎸囧鎬ф剰瑙侊紝鍦ㄦ柟渚挎椂搴斿綋閬靛畧锛屽湪涓嶆柟渚挎椂鍙互鐏垫椿澶勭悊" + }, + "MAQ0025": { + "title": "闈㈠宸ヤ綔鐜鐨勫彉鍖栵紝鎴戝緢涔愭剰灏濊瘯鏂扮殑宸ヤ綔鏂瑰紡" + }, + "MAQ0026": { + "title": "鎴戝枩娆㈡悳瀵诲拰鐮旂┒鏁版嵁锛岀湅鐪嬫暟鎹兘缁欏嚭鎬庢牱鐨勬柟鍚戙��" + }, + "MAQ0027": { + "title": "褰撴垜鐪嬪埌鍏朵粬鍥㈤槦鎴愬憳闇�瑕佸府鍔╂椂锛屾垜浼氳皟鏁存垜鐨勫伐浣滄棩绋嬶紝鑵惧嚭鏃堕棿鏉ュ府鍔╀粬浠�" + }, + "MAQ0028": { + "title": "鍦ㄥ紑浼氭椂锛屾垜鏈夋椂浼氳鑷繁鎴栦粬浜虹殑璐熼潰鎯呯华鎵�骞叉壈" + }, + "MAQ0029": { + "title": "鎴戠粡甯告槸鍥㈤槦涓涓�涓彁鍑鸿鍔ㄦ柟妗堢殑" + }, + "MAQ0030": { + "title": "鎴戜富鍔ㄥ弬涓庢垨棰嗗鍒汉涓嶆効鎰忔壙鎷呯殑宸ヤ綔椤圭洰" + }, + "MAQ0034": { + "title": "鎴戠粡甯稿悜鎴戠殑鍚屼簨鍜屼笅灞炲己璋冿紝鎴戜滑鎵�鍋氱殑鎵�鏈夊喅绛栭兘蹇呴』绗﹀悎缁勭粐鐨勪环鍊艰鍜岃鑼�" + }, + "MAQ0035": { + "title": "鏈夋椂鍒汉鐨勮礋闈㈡儏缁細褰卞搷鎴戣嚜宸辩殑鎯呯华" + }, + "MAQ0036": { + "title": "鎴戠粡甯稿垱閫犳�у湴鎶婂埆浜虹殑涓嶅悓鎯虫硶缁撳悎璧锋潵锛屽苟鎵惧埌鏈夋晥鐨勯棶棰樿В鍐冲姙娉�" + }, + "MAQ0038": { + "title": "鎴戞浘缁忓埄鐢ㄨ繃鍏朵粬浜�" + }, + "MAQ0039": { + "title": "鎴戝枩娆㈠垎鏋愬鏉傜殑姒傚康骞跺彂鐜板畠浠箣闂寸殑閫昏緫鑱旂郴" + }, + "MAQ0040": { + "title": "鎴戝緢浜彈浠旂粏妫�鏌ュ皬缁嗚妭鐨勮繃绋�" + }, + "MAQ0041": { + "title": "鑷緥瀵规垜鏉ヨ寰堝鏄撳仛鍒�" + }, + "MAQ0042": { + "title": "寮�濮嬪仛浠讳綍椤圭洰鍓嶏紝鎴戦兘浼氶鍏堟⒊鐞嗕换鍔$殑杞婚噸缂撴�ュ拰鎴鏃ユ湡" + }, + "MAQ0044": { + "title": "鍗充娇鍦ㄥ緢蹇欑殑鏃跺�欙紝濡傛灉鎴戠煡閬撴垜鏄煇椤瑰伐浣滅殑鏈�浣充汉閫夛紝鎴戜篃浼氳嚜鎰垮幓鎵挎媴杩欎簺棰濆鐨勫伐浣�" + }, + "MAQ0045": { + "title": "宸ヤ綔涓婇伃閬囧け璐ユ垨鎸姌鏃讹紝鎴戜細寮�濮嬫��鐤戣嚜宸�" + }, + "MAQ0046": { + "title": "鎴戞病鏈変粩缁嗘牎瀵硅嚜宸辩殑宸ヤ綔鎴栨姤鍛婄殑涔犳儻" + }, + "MAQ0047": { + "title": "鎴戞湁鏃跺仛浜嬮渶瑕佸埆浜烘彁閱掓墠鑳芥寜鏃跺畬鎴�" + }, + "MAQ0048": { + "title": "鎴戝緢涔愭剰鎷呬换棰嗗鐨勮鑹�" + }, + "MAQ0049": { + "title": "褰撴垜鐨勪笂鍙镐笉鍦ㄧ殑鏃跺�欙紝鎴戜笉鍠滄鑷繁鍋氬伐浣滀笂鐨勫喅绛�" + }, + "MAQ0051": { + "title": "鍦ㄥ伐浣滀腑锛屾垜娌℃湁涓哄疄鐜扮洰鏍囪�屽姫鍔涘苟鑾峰緱鎴愬氨鍜岃鍙殑鍔ㄥ姏" + }, + "MAQ0053": { + "title": "濡傛灉鑳介�夋嫨锛屾垜鏇村枩娆簨鍏堣鍒掑ソ鐨勪緥琛屾椿鍔紝鑰屼笉鍠滄鍘婚�傚簲鍚勭涓嶇‘瀹氭��" + }, + "MAQ0055": { + "title": "褰撴墜澶存湁鍏跺畠宸ヤ綔瑕佸仛鏃讹紝鎴戜笉澶効鎰忓府鍔╁洟闃熸垚鍛�" + }, + "MAQ0058": { + "title": "鏈夋椂鍊欐垜鎬�鐤戣嚜宸辨槸鍚﹁兘鑳滀换褰撳墠宸ヤ綔" + }, + "MAQ0059": { + "title": "褰撴垜鍦ㄥ伐浣滀腑鍙楀埌鍒汉鐨勮川鐤戞垨鎸戞垬鏃讹紝鎴戞�昏兘澶熼伩鍏嶇敤鍏呮弧鏁屾剰鐨勬柟寮忓幓鍥炲簲" + }, + "MAQ0060": { + "title": "鍦ㄨ鍒汉璐ㄧ枒鎴栨寫鎴樻椂锛屾垜鎬绘槸鎶戝埗鑷繁鐨勭涓�鍙嶅簲锛屼互閬垮厤鎯呯华鍖栫殑鍙嶅簲" + }, + "MAQ0061": { + "title": "鎴戜笉鎰挎剰鎺ュ彈鐙珛鍐崇瓥鎵�甯︽潵鐨勯闄�" + }, + "MAQ0062": { + "title": "鎴戝緢鎰挎剰涓洪渶瑕佸府鍔╃殑浜烘彁渚涘府鍔�" + }, + "MAQ0064": { + "title": "鐩告瘮浜庝富鍔ㄧ‘瀹氳嚜宸辩殑鍙戝睍闇�姹傦紝鎴戞洿渚濊禆浜庢垜鐨勭粍缁囨潵纭畾鎴戦渶瑕佸彂灞曞摢浜涜兘鍔涘拰鎶�鑳�" + }, + "MAQ0065": { + "title": "鍦ㄦ姤鍛婂悇绫绘暟瀛楀拰璐㈠姟鏁版嵁鏃讹紝鎴戝姏姹傚噯纭�" + }, + "MAQ0067": { + "title": "鎴戠粡甯镐細鎻愬嚭澶氱鏂规鏉ヨВ鍐虫煇涓棶棰�" + }, + "MAQ0069": { + "title": "鍦ㄧ‘瀹氬伐浣滅殑浼樺厛绛夌骇鏃讹紝鎴戦�氬父浼氬皢鎴戜笉鍠滄鐨勫伐浣滃畨鎺掑埌鏈�鍚�" + }, + "MAQ0070": { + "title": "鎴戠粡甯稿彂鐜版垜涓嶅緱涓嶆悂缃伐浣滈」鐩�" + }, + "MAQ0071": { + "title": "鍦ㄥ紑濮嬩竴涓」鐩墠锛屾垜浼氬垪鍑烘墍鏈夐渶瑕佸畬鎴愮殑浠诲姟" + }, + "MAQ0072": { + "title": "鎴戣寰楀緢闅惧拰閭d簺璐ㄧ枒鎴戣鐐圭殑鍥㈤槦鎴愬憳鐩稿" + }, + "MAQ0073": { + "title": "鎴戠粡甯搁�氳繃澶栫晫鐨勫弽棣堝拰鑷垜鍙嶇渷鏉ユ繁鍏ユ�濊�冨浣曟彁鍗囪嚜宸辩殑鎶�鑳藉拰绔炰簤鍔�" + }, + "MAQ0074": { + "title": "涓�鏃﹀洟闃熷仛鍑轰簡鍐冲畾锛屽嵆浣挎垜涓嶈禐鍚岋紝鎴戜篃浼氳窡鐫�鍥㈤槦鐨勫喅瀹氳蛋" + }, + "MAQ0076": { + "title": "鍦ㄥ仛鍑哄洶闅剧殑鍐冲畾鏃讹紝鎴戝苟涓嶆�绘槸鑳藉閬靛惊缁勭粐鐨勪环鍊艰鍜岃鑼�" + }, + "MAQ0077": { + "title": "褰撴垜鍦ㄥ伐浣滀腑鍙楀埌鎵硅瘎鏃讹紝鎴戝鏄撶敓姘旓紝澶卞幓鍐烽潤" + }, + "MAQ0078": { + "title": "鎴戝彂鐜拌姳寰堝鏃堕棿鏉ユ鏌ユ暟鎹紝鍒嗘瀽闂鐨勬牴婧愭槸浠跺緢鏋嚗鐨勪簨" + }, + "MAQ0079": { + "title": "褰撴垜鎯呯华婵�鍔ㄦ椂锛屽氨鏃犳硶娓呮櫚鍦版�濊��" + }, + "MAQ0080": { + "title": "鎬绘湁浜轰細琚笂绾т换鍛藉幓棰嗗涓�涓」鐩紝鑰屾垜瑕佸仛鐨勬槸绛夌潃骞跺惉浠庝粬浠殑瀹夋帓" + }, + "MAQ0081": { + "title": "鏈夋椂鍊欐垜寰堥毦闆嗕腑绮惧姏鍘诲畬鎴愯嚜宸变笉鍠滄鐨勪换鍔�" + }, + "MAQ0082": { + "title": "鐢变簬鎰忔枡涔嬪鐨勫洶闅撅紝鏈夊嚑娆℃垜鍐冲畾鏀惧純鏌愪簺椤圭洰" + }, + "MAQ0084": { + "title": "鎴戝父甯告槸鍥㈤槦涓涓�涓彂鐜板伐浣滀腑鐨勬敼杩涙満浼氱殑浜�" + }, + "MAQ0085": { + "title": "鎴戝畾鏈熶簡瑙f墍鍦ㄥ洟闃熺殑鏈�鏂扮姸鍐碉紝浠ョ‘淇濇垜浠兘澶熷疄鐜板洟闃熺洰鏍�" + }, + "MAQ0086": { + "title": "鎴戝彂鐜板緢闅鹃�傚簲璁″垝鐨勬敼鍙橈紝鍥犱负鎬绘槸浼氭湁鐩稿綋澶х殑骞叉壈" + }, + "MAQ0087": { + "title": "鍦ㄧぞ浜よ仛浼氱殑鍦哄悎鎷涘緟濂藉垰璁よ瘑鐨勪汉瀵规垜鏉ヨ鏄欢瀹规槗鐨勪簨" + }, + "MAQ0088": { + "title": "鎴戝伓灏斾細璁╁埆浜轰负鎴戠殑閿欒鍙楀埌璐e" + }, + "MAQ0089": { + "title": "鎴戝苟涓嶈兘瀹屽叏鎺屾帶鑷繁鐨勫懡杩�" + }, + "MAQ0090": { + "title": "鎴戣寰楁縺鍔变竴涓柊鐨勮�屼笖鎴愬憳鑳屾櫙澶氭牱鍖栫殑鍥㈤槦鏄尯鍥伴毦鐨勪簨" + }, + "MAQ0091": { + "title": "宸ヤ綔涓婄殑鍘嬪姏浠庢潵閮戒笉浼氬奖鍝嶆垜鐨勭潯鐪犺川閲�" + }, + "MAQ0092": { + "title": "鎴戝�惧悜浜庨伩鍏嶅弬鍔犺繃澶氱殑绀句氦鎴栦汉闄呬氦寰�娲诲姩" + }, + "MAQ0094": { + "title": "鎴戝苟涓嶆�绘槸鐭ラ亾濡備綍涓庡垰璁よ瘑鐨勪汉鏀�璋�" + }, + "MAQ0095": { + "title": "鎴戝枩娆㈠鍛樺伐杩涜鏂颁换鍔$殑鍩硅锛屽苟鍚戜粬浠В閲婁负浠�涔堣繖浜涘煿璁鍥㈤槦鎴愬氨鍜屽伐浣滅哗鏁堝緢閲嶈" + }, + "MAQ0097": { + "title": "鍒汉缁忓父鑳藉鍦ㄥ洟闃熷伐浣滅殑鎴愭灉涓彂鐜版垜鎵�娌℃湁鍙戠幇鐨勯敊璇�" + }, + "MAQ0098": { + "title": "鎴戝�惧悜浜庤姳璐规瘮鍏朵粬浜烘洿澶氱殑鏃堕棿鏉ユ帰绱㈡暟鎹紝浠ュ鎵炬綔鍦ㄧ殑闂鍘熷洜锛屼粠鑰屼骇鐢熸湁鐢ㄧ殑瑙佽В" + }, + "MAQ0099": { + "title": "濡傛灉鎴戠殑鑰佹澘涓嶅湪韬竟锛屾垜鎰挎剰鑷繁鍋氶噸瑕佺殑鍐冲畾" + }, + "MAQ0100": { + "title": "鎴戜笉鍠滄闇�瑕佸紑鍙戞柊鐨勮В鍐虫柟妗堢殑宸ヤ綔" + }, + "MAQ0101": { + "title": "鍙湁鍦ㄥ拰鑰佹澘鍏呭垎鍟嗚浜嗚嚜宸辩殑鎯虫硶鍚庯紝鎴戞墠浼氬惎鍔ㄦ煇涓柊涓炬帾" + }, + "MAQ0103": { + "title": "鎴戜細鍔姏鍦ㄦ埅姝㈡棩鏈熷墠瀹屾垚浠诲姟锛屽厬鐜板伐浣滀腑鐨勬壙璇猴紝濡傛湁蹇呰鍙互鐗虹壊涓汉鏃堕棿" + }, + "MAQ0104": { + "title": "鏈夋椂鎴戜細鍙楁儏缁敮閰嶈�屾棤娉曟帶鍒惰嚜宸辩殑搴斿鏂瑰紡" + }, + "MAQ0106": { + "title": "鎴戠粡甯搁�氳繃鍙傚姞鐮旇浼氥�佺綉缁滅爺璁ㄤ細鍜岄槄璇绘潵鏇存柊鑷繁鐨勪笓涓氬拰琛屼笟鐭ヨ瘑" + }, + "MAQ0107": { + "title": "鎴戝浜庣涓�鍗拌薄涓嶅ソ鐨勪汉涓嶅お鏈夎�愬績鍜岀ぜ璨�" + }, + "MAQ0110": { + "title": "浜轰滑缁忓父鏉ユ壘鎴戣璁轰粬浠殑闂鎴栬嫤鎭�" + }, + "MAQ0111": { + "title": "鎴戠粡甯稿府鍔╁埆浜烘洿濂藉湴鐞嗚В鍜屽鐞嗕粬浠嚜宸辩殑璐熼潰鎯呯华" + }, + "MAQ0112": { + "title": "鎴戠殑鍚屼簨浠兘澶熷緢瀹规槗鐪嬪嚭鎴戠殑鎯呯华鐘舵��" + }, + "MAQ0113": { + "title": "鎴戝苟涓嶆槸鎬绘湁鏃堕棿妫�鏌ユ垜鐨勫伐浣滐紝骞剁浉淇′笉妫�鏌ヤ篃闂涓嶅ぇ" + }, + "MAQ0115": { + "title": "褰撴柊鐨勫伐浣滄祦绋嬫垨鎶�鏈寮曞叆鏃讹紝鎴戦�氬父鏄渶鏃╂帴鍙楀苟閲囩敤瀹冪殑浜�" + }, + "MAQ0117": { + "title": "鍗充娇闈复楂樺帇鐨勫伐浣滐紝鎴戜篃浼氫繚鎸佷箰瑙傜殑鏈熸湜" + }, + "MAQ0118": { + "title": "鏈夋椂鎴戜細寰堥毦鐞嗚В鑷繁鐨勬儏缁弽搴�" + }, + "MAQ0119": { + "title": "鍦ㄥ伐浣滀腑锛屾垜缁忓父璁剧珛鏈夋寫鎴樻�х殑鐩爣锛岀劧鍚庡姫鍔涘疄鐜扮洰鏍�" + }, + "MAQ0120": { + "title": "鎴戦潪甯告姷瑙﹂偅浜涗笉寰椾笉鍘诲弬鍔犵殑绀句氦娲诲姩锛岃涓洪偅浼氬緢蹇冪疮" + }, + "MAQ0124": { + "title": "鎴戞�绘槸鐭ラ亾鑷繁鐨勬儏缁劅鍙椾互鍙婂師鍥�" + }, + "MAQ0126": { + "title": "鎴戞洿鍠滄涓嶇揣涓嶆參锛屼粠瀹逛笉杩殑宸ヤ綔鑺傚锛岃�屼笉鍠滄缁忓父闇�瑕佸悓鏃跺畬鎴愬涓换鍔$殑宸ヤ綔鑺傚" + }, + "MAQ0127": { + "title": "褰撴垜鎰忚瘑鍒版湁浜哄湪璇勪及鎴戠殑琛ㄧ幇鏃讹紝鎴戜細鍙樺緱姣斿埆浜烘洿鐒﹁檻" + }, + "MAQ0129": { + "title": "褰撴垜涓嶅緱涓嶆寜鐓т换鍔$殑杞婚噸缂撴�ョ殑娆″簭鏉ュ伐浣滄椂锛屾垜浼氭湁涓�绉嶅彈闄愬埗鐨勬劅瑙�" + }, + "MAQ0130": { + "title": "鎴戞湁鏃朵細鎰熷埌杩囧害鍔崇疮锛屼絾鏄垜濮嬬粓鐩镐俊鑷繁鏈夎冻澶熺殑绮惧姏鏉ュ畬鎴愭墍鏈夊伐浣滀换鍔�" + }, + "MAQ0131": { + "title": "涓庝富鍔ㄦ壙鎷呯浉姣旓紝鎴戞洿鍠滄琚笂绾ц姹傚幓鎵挎媴鏌愰」浠诲姟鎴栧姞鍏ユ垨棰嗗涓�涓」鐩洟闃�" + }, + "MAQ0132": { + "title": "浜轰滑閬囧埌鍥伴毦鏃堕�氬父浼氬埌鎴戣繖閲屾潵瀵绘眰鎯呮劅鏀寔" + }, + "MAQ0133": { + "title": "鎴戝苟涓嶆�绘槸鑳藉璇氬疄鍦伴潰瀵硅嚜宸�" + }, + "MAQ0134": { + "title": "鎴戞瘮杈冩搮闀垮畨鎱版伯涓ф垨鐢熸皵鐨勫悓浜嬶紝骞惰鍏跺喎闈欎笅鏉�" + }, + "MAQ0135": { + "title": "鎴戣鐪熷�惧惉锛屼互姝ゆ潵浜嗚В鍒汉鐨勬劅鍙楀拰闇�姹�" + }, + "MAQ0136": { + "title": "鎴戞湁鏃朵负浜嗚揪鎴愮洰鏍囦細瀵规斂绛栧拰瑙勫畾浣滅伒娲荤殑澶勭悊" + }, + "MAQ0138": { + "title": "鎴戞洿鍠滄鍙娴嬬殑銆佹寜閮ㄥ氨鐝殑鏃ュ父宸ヤ綔" + }, + "MAQ0140": { + "title": "鎴戝枩娆㈤偅绉嶄笂鍙稿鎴戝厖鍒嗘巿鏉冿紝璁╂垜鑳借嚜涓诲喅绛栫殑宸ヤ綔鐜" + }, + "MAQ0141": { + "title": "鎴戞瘮鑷繁璁よ瘑鐨勫ぇ澶氭暟浜洪兘鏇村姞鍧氭寔鏄潪鍘熷垯" + }, + "MAQ0142": { + "title": "鎴戝鍙備笌鍏泭浜嬩笟(蹇楁効娲诲姩)涓嶅お鎰熷叴瓒�" + }, + "MAQ0143": { + "title": "鎴戜笉鍠滄鍒嗘瀽鍋囨兂浼氬彂鐢熺殑鎯呭鎴栫悊璁烘ā鍨�" + }, + "MAQ0144": { + "title": "鍒濇涓庝汉瑙侀潰鏃讹紝鎴戞瘮杈冩矇榛樺瑷�锛屽父甯哥瓑寰呭鏂逛富鍔ㄥ紑鍙d氦璋�" + }, + "MAQ0145": { + "title": "鎴戞湁鏃朵細鍋氬嚭涓�浜涜鎴戜簨鍚庢劅鍒板悗鎮旂殑鍐冲畾" + }, + "MAQ0146": { + "title": "鏈夋椂鍊欙紝鎴戝緢闅剧悊瑙e埆浜虹殑鎯呯华鍙嶅簲" + }, + "MAQ0147": { + "title": "鎴戞洿鍠滄閬靛惊宸茬粡瀹屽杽浜嗙殑宸ヤ綔娴佺▼锛岃�屼笉鏄�冭檻鏂版柟娉�" + }, + "MAQ0149": { + "title": "鍦ㄤ汉闄呬氦寰�涓紝鎴戝父甯稿仛涓嶅埌鎹綅鎬濊��" + }, + "MAQ0150": { + "title": "鎴戣寰楀ソ鍍忓叾浠栦汉姣旀垜鏇磋兘鎶曞叆鏇村绮惧姏鍘诲畬鎴愬伐浣滀换鍔�" + }, + "MAQ0151": { + "title": "鎴戝枩娆㈡暣鐞嗗拰鍙戣〃鍏锋湁浠や汉淇℃湇鐨勭悊鐢辩殑婕旇锛屼互姝ゆ潵璇存湇鍏朵粬浜�" + }, + "MAQ0152": { + "title": "鎴戜笉鍠滄濮嬬粓蹇妭濂忓湴宸ヤ綔" + }, + "MAQ0156": { + "title": "褰撴垜鏈兘瀹炵幇宸ヤ綔涓殑涓�涓噸瑕佺洰鏍囨椂锛屾垜寰堝揩灏变細鎭㈠杩囨潵锛岄噸鏂颁笓娉ㄤ簬濡備綍杈炬垚鐩爣" + }, + "MAQ0157": { + "title": "鎴戜笉鎰挎剰鏀瑰彉鎴戞棦鏈夌殑宸ヤ綔鏂瑰紡" + }, + "MAQ0158": { + "title": "鎴戝枩娆笉鏂彉鍖栵紝鑰屼笉鏄ǔ瀹�" + }, + "MAQ0159": { + "title": "褰撴垜鍦ㄥ伐浣滀腑寰楀埌璐熼潰鍙嶉鏃讹紝鎴戜篃浠庝笉鎬�鐤戣嚜宸卞伐浣滅殑鑳藉姏" + }, + "MAQ0160": { + "title": "鎴戜竴鐩存湁寮虹儓鐨勬剰鎰垮幓棰嗗鍜屾寚鎸ヤ竴缇や汉" + }, + "MAQ0161": { + "title": "闈㈠涓�涓殰纰嶆垨鍥伴毦锛屾垜浼氫笉鍋滃湴鍔姏鍘诲厠鏈嶅畠锛岀洿鍒版垚鍔�" + }, + "MAQ0162": { + "title": "鍦ㄥ伐浣滈」鐩殑璁″垝闃舵锛屾垜鎬绘槸纭璇ラ」鐩殑鍒╃泭鏀稿叧鏂瑰苟纭繚浠栦滑瀵硅椤圭洰鐨勬壙璇�" + }, + "MAQ0163": { + "title": "鏈夋椂鎴戜細鍙楀埌鎯呯华鐨勫奖鍝嶏紝鍋氬嚭涓�浜涜鑷繁鍚庢倲鐨勫喅瀹�" + }, + "MAQ0164": { + "title": "鎴戞�绘槸鐭ラ亾鏄粈涔堝奖鍝嶄簡鎴戠殑鎯呯华" + }, + "MAQ0165": { + "title": "褰撳埆浜哄悜鎴戞姳鎬ㄤ粬浠湪宸ヤ綔涓婃垨鐢熸椿涓鍒扮殑闂鏃讹紝鎴戝父甯告棤娉曟劅鍚岃韩鍙�" + }, + "MAQ0166": { + "title": "瀵逛簬鎴戞潵璇达紝璇存湇鍒汉鏄欢瀹规槗鐨勪簨" + }, + "MAQ0167": { + "title": "鏈夋椂鎴戝彂鐜板伐浣滀笂鐨勬媴蹇ф垨闂浼氬鎴戠殑涓汉鐢熸椿浜х敓璐熼潰褰卞搷" + }, + "MAQ0168": { + "title": "鎴戞浘缁忓湪娌℃湁鐪熺殑鐢熺梾鐨勬儏鍐典笅锛屽悜鍏徃鎴栧鏍¤杩囩梾鍋�" + }, + "MAQ0169": { + "title": "鎴戞湁鏃朵細鎸夌収鑷繁鐨勫叴瓒h�屼笉鏄换鍔$殑杞婚噸缂撴�ユ潵鍐冲畾鑷繁鐨勫伐浣滈『搴�" + }, + "MAQ0170": { + "title": "宸ヤ綔璁╂垜鍏呮弧娲诲姏锛� 浠ヨ嚦浜庢垜鍙戠幇鑷繁甯稿父娌夋蹈鍦ㄥ伐浣滀腑锛岃繃浜嗙潯瑙夌殑鐐归兘涓嶇煡閬�" + }, + "MAQ0171": { + "title": "鎴戣寰楀彉鍖栨槸闈炲父浠や汉鍏村鐨勶紝灏界瀵瑰叾浠栦汉鏉ヨ鍙兘寰堥毦" + }, + "MAQ0172": { + "title": "鎴戞搮闀挎敼鍙樺埆浜虹殑瑙傜偣鍜岀湅娉�" + }, + "MAQ0173": { + "title": "鎴戝苟涓嶆槸鎬昏兘鍋氬埌瑷�琛屼竴鑷�" + }, + "MAQ0174": { + "title": "鏈夋椂鎴戝彂鐜版敼鍙樺埆浜虹殑瑙傜偣鍜岀湅娉曞緢闅�" + }, + "MAQ0175": { + "title": "褰撻亣鍒拌嚜宸变笉鍠滄鎴栨瘮杈冨洶闅剧殑浠诲姟鏃讹紝鎴戦�氬父浼氭嫋寤朵竴娈垫椂闂村啀寮�濮�" + }, + "MAQ0176": { + "title": "鎴戝枩娆笌鍏朵粬鍥㈤槦鎴愬憳杩涜鍗忎綔锛屼互閬垮厤閲嶅鎴栨棤鏁堢殑宸ヤ綔" + }, + "MAQ0178": { + "title": "鎴戞�绘槸鎸夋椂瀹屾垚宸ヤ綔浠诲姟" + }, + "MAQ0179": { + "title": "鎴戠涓�娆¤鍒板埆浜烘椂灏卞彲浠ュ緢瀹规槗鍦拌鎳備粬浠紝浣嗘槸涓嶇绗竴鍗拌薄濡備綍锛屾垜閮戒細淇濇寔绀艰矊鍜屽懆鍒�" + }, + "MAQ0180": { + "title": "鎴戠粡甯告槸绗竴涓嚜鎰块瀵兼垨鍔犲叆椤圭洰鍥㈤槦鐨勪汉" + }, + "MAQ0181": { + "title": "褰撴墜澶存鍦ㄥ仛鐨勯」鐩嚭鐜版剰澶栫殑鍥伴毦鏃讹紝鎴戝彂鐜版湁鏃舵垜浼氬仠涓嬫潵锛岃浆鑰屽仛鍏跺畠椤圭洰" + }, + "MAQ0182": { + "title": "鎴戜細瀹氭湡鍚戞垜鐨勫洟闃熸垚鍛樻彁渚涘弽棣堬紝浠ュ府鍔╀粬浠釜浜哄彂灞曞苟瀹炵幇鑱屼笟鐩爣" + }, + "MAQ0183": { + "title": "鎴戝枩娆㈢珛鍗冲紑濮嬪鐞嗗洶闅剧殑浠诲姟锛岃�屼笉鏄嫋寤�" + }, + "MAQ0184": { + "title": "鍦ㄥ紑浼氭椂鎴戞�绘槸涓撴敞浜庝富棰橈紝涓庝粬浜轰簰鍔紝骞朵笓蹇冨湴鍊惧惉浠栦汉鐨勫彂瑷�" + }, + "MAQ0185": { + "title": "鎴戜笉鍠滄涓鸿嚜宸辨垨鍥㈤槦璁剧珛鎸戞垬鎬х殑鐩爣锛屽苟涓嶅緱涓嶈姳棰濆鐨勬椂闂村幓杈炬垚杩欎簺鐩爣" + }, + "MAQ0187": { + "title": "鐩告瘮涓庝粬浜哄悎浣滐紝鎴戞洿鎰挎剰鑷繁涓�浜哄畬鎴愬伐浣滀换鍔�" + }, + "MAQ0190": { + "title": "姣忔寮�濮嬫柊宸ヤ綔鎴栨柊椤圭洰鏃讹紝鎴戦�氬父浼氬厖婊′俊蹇�" + }, + "MAQ0191": { + "title": "鎴戝彂鐜颁富鍔ㄤ笌鍒氳璇嗙殑浜烘攢璋堟槸瀹规槗鐨勪簨" + }, + "MAQ0192": { + "title": "鎴戞効鎰忚嚜宸卞仛鍐冲畾骞舵帴鍙楃浉搴旂殑鍚庢灉" + }, + "MAQ0193": { + "title": "鎴戝伓灏斿洜涓哄繀椤诲畬鎴愬叾浠栭噸瑕佺殑浜嬫儏鑰屾病鏈夋寜鏃跺畬鎴愬伐浣滀换鍔�" + }, + "MAQ0194": { + "title": "鍙鎰挎剰锛屾垜鍙互杞绘澗鍦颁笌浠讳綍浜轰氦鏈嬪弸" + }, + "MAQ0195": { + "title": "鎴戝枩娆㈠澶嶆潅鏂规鐨勫埄寮婅繘琛屽叏闈㈢殑鍒嗘瀽" + }, + "MAQ0197": { + "title": "鎴戜笉浼氬皾璇曡嚜宸卞幓鎻愬嚭鏂版兂娉曪紝鑰屾槸甯屾湜鎶婃绫讳簨鎯呰缁欏姝ゆ劅鍏磋叮鐨勪汉鍘诲仛" + }, + "MAQ0199": { + "title": "鎴戞�绘槸鑳藉緢蹇兂鍑鸿鏈嶅埆浜虹殑鏈�浣虫柟娉�" + }, + "MAQ0200": { + "title": "鎴戜笉浼氳鎸姌鎴栧け鏈涘鎴戠殑宸ヤ綔琛ㄧ幇浜х敓璐熼潰褰卞搷" + }, + "MAQ0201": { + "title": "褰撴垜鍦ㄥ伐浣滀腑閬亣鎸姌鎴栧け璐ユ椂锛屾垜闇�瑕佽緝闀挎椂闂存墠鑳藉畬鍏ㄦ仮澶嶈嚜淇�" + }, + "MAQ0202": { + "title": "瀵逛簬鎴戜笉鍠滄鐨勪汉锛屾垜鏃犳硶鎬绘槸淇濇寔绀艰矊鍜屾伃鏁�" + }, + "MAQ0203": { + "title": "澶у鏁颁汉鏈�缁堥兘浼氬悓鎰忔垜鐨勮鐐�" + }, + "MAQ0204": { + "title": "濡傛灉鎴戣涓哄垰璁よ瘑鐨勪汉瀵规垜涓嶇ぜ璨岋紝涔熶笉灏婇噸鎴戯紝閭f垜涔熶笉浼氬浠栦滑鏈夌ぜ璨屾垨灏婇噸" + }, + "MAQ0205": { + "title": "鍦ㄨ繘琛屾煇涓」鐩椂锛屾垜浼氬畾鏈熺洃鎺ч」鐩噸瑕佽妭鐐圭殑瀹屾垚杩涘害锛屽苟璺熻繘璐熻矗鍚勪釜鍏蜂綋妯″潡鐨勫洟闃熸垚鍛�" + }, + "MAQ0206": { + "title": "鍦ㄥ拰浠栦汉璋堝垽鐨勬椂鍊欙紝鎴戝伓灏斾細瑙夊緱缂轰箯鑷俊" + }, + "MAQ0207": { + "title": "鏈夋椂鎴戝緢闅捐鏈嶅埆浜烘帴鍙楁垜鐨勫缓璁�" + }, + "MAQ0208": { + "title": "鍗充娇涓嶆儏鎰匡紝鎴戜篃浼氶潪甯镐粩缁嗗湴妫�鏌ュ摢鎬曟渶灏忕殑缁嗚妭" + }, + "MAQ0209": { + "title": "浠栦汉璁や负鎴戣兘鍔涗竴鑸�" + }, + "MAQ0210": { + "title": "鎴戜笉鍠滄鍩硅鍥㈤槦涓殑鏂板憳宸ヤ互纭繚浠栦滑鍋氫簨鏂瑰紡鏄纭殑" + }, + "MAQ0211": { + "title": "濡傛灉闇�瑕佺殑璇濓紝鎴戞�昏兘鎵惧埌鏇村鐨勬椂闂存潵瀹屾垚宸ヤ綔" + }, + "MAQ0212": { + "title": "涓庢垜鐨勫悓浜嬬浉姣旓紝鎴戜笉澶枩娆㈡敹闆嗗拰鍒嗘瀽鏁版嵁銆�" + }, + "MAQ0213": { + "title": "鎴戠‘淇濆厬鐜版墍鏈夊伐浣滀笂鐨勬壙璇猴紝鍥犱负杩欏鎴戣�岃█鏄竴涓弗鑲冦�佺鍦g殑鍘熷垯" + }, + "MAQ0214": { + "title": "鍚屼簨浠粡甯告潵璇锋暀鎴戝簲璇ュ浣曞拰鍒汉娌熼�氭晱鎰熻瘽棰�" + }, + "MAQ0216": { + "title": "灏界鏈夋椂鍙兘涓嶆柟渚匡紝浣嗘垜濮嬬粓閬靛畧鏀跨瓥鍜岃瀹�" + }, + "MAQ0218": { + "title": "瀵逛簬閭d簺鎴戣涓烘瘮杈冨洶闅炬垨鑰呮垚鍔熷彲鑳芥�т笉楂樼殑椤圭洰锛屾垜缁忓父鎷栧欢鏃堕棿锛岃�屼笉绔嬪嵆鍚姩" + }, + "MAQ0219": { + "title": "鎴戜粠鏈洜宸ヤ綔涓婄殑澶辫触鑰岀伆蹇�" + }, + "MAQ0220": { + "title": "褰撴垜鐨勫伐浣滆礋鑽峰鍔犳椂锛屾湁鏃舵垜浼氭劅鍒板け鍘昏�愬績銆佸績鐑︽剰涔�" + }, + "MAQ0221": { + "title": "鎴戝缁堢‘淇濇仾瀹堟垜鎵�鏈夌殑鑱屼笟鎵胯骞朵俊瀹堣瑷�" + }, + "MAQ0223": { + "title": "鎴戞洿鍠滄閭d簺鍙互鍏呭垎鍙戞尌鍒涢�犳�х殑宸ヤ綔" + }, + "MAQ0224": { + "title": "鏈夋椂鍊欏伐浣滀腑鐨勫け鏈涘拰澶辫触浼氫娇鎴戝ソ鍑犲ぉ閮芥棤娉曢泦涓敞鎰忓姏" + }, + "MAQ0225": { + "title": "鎴戜笉鍠滄涓嶆柇鍦拌鏈嶅埆浜烘帴鍙楁垜鐨勫缓璁�" + }, + "MAQ0226": { + "title": "鎴戝湪鍚屼簨涓湁鑳藉渾铻嶅湴鍜岄毦鐩稿鐨勪汉鎵撲氦閬撶殑鍚嶅0" + }, + "MAQ0227": { + "title": "鎴戠粡甯稿鐞嗗緢澶氫笉鍚岀殑椤圭洰銆佹兂娉曟垨鑰呰璁猴紝鎴戝彂鐜拌繖璁╀汉绮剧鎸" + }, + "MAQ0228": { + "title": "褰撲簨鎯呮病鏈夋寜鐓ф垜鐨勯鎯冲彂灞曟椂锛屾垜浼氬彉寰楁伯涓�" + }, + "MAQ0229": { + "title": "鎴戝枩娆㈠弬鍔犲晢涓氱ぞ浜ゆ椿鍔�" + }, + "MAQ0230": { + "title": "鏈夋椂鎴戝浜よ皥瀵硅薄鐨勬枃鍖栬儗鏅�佷範淇椼�佸拰绂佸繉涓嶅鏁忔劅" + }, + "MAQ0231": { + "title": "鍦ㄧぞ浜や簰鍔ㄤ腑锛屾垜閫氬父瀵瑰埆浜虹殑闇�姹備笉澶熸晱鎰�" + }, + "MAQ0232": { + "title": "鎴戝浠栦汉鐨勭涓�鍗拌薄閫氬父鏄噯纭殑" + }, + "MAQ0233": { + "title": "鎴戦�氬父鑳藉湪宸ヤ綔涓帶鍒跺ソ鑷繁鐨勬儏缁�" + }, + "MAQ0234": { + "title": "褰撴垜鍦ㄦ煇涓伐浣滈」鐩腑纰板埌鍥伴毦鏃讹紝鎴戞湁鏃朵細涓璇ラ」鐩紝杞�屽幓鍋氬叾瀹冮」鐩�" + }, + "MAQ0235": { + "title": "鍦ㄦ垜鐨勭敓娲诲拰鑱屼笟涓紝鎴戞�绘槸鐭ラ亾鑷繁鎯宠浠�涔�" + }, + "MAQ0236": { + "title": "鍜屾柊璁よ瘑鐨勪汉锛屾垜浠庝笉浼氭劅鍒版病璇濆彲璇�" + }, + "MAQ0237": { + "title": "鍗充娇鍥㈤槦涓殑澶ч儴鍒嗘垚鍛樿窡鎴戠殑鎰忚/鐪嬫硶鐩稿乏锛屾垜閫氬父涔熶笉鎰挎剰鏀惧純鑷繁鐨勬剰瑙�/鐪嬫硶锛岃窡澶т紮鍎胯揪鎴愪竴鑷淬��" + }, + "MAQ0240": { + "title": "濡傛灉鎴戝拰鍏朵粬浜哄悎浣滀竴椤逛换鍔★紝鎴戜細绛夌潃浠栦滑鏉ユ壘鎴戝崗璋冨伐浣�" + }, + "MAQ0241": { + "title": "鎴戝皬鏃跺�欐浘缁忔嬁杩囨湰涓嶅睘浜庤嚜宸辩殑涓滆タ" + }, + "MAQ0242": { + "title": "鍦ㄥ緱鍒拌�佹澘鐨勬槑纭寚绀哄墠锛屾垜閫氬父涓嶄細閲囧彇琛屽姩" + }, + "MAQ0243": { + "title": "鎴戝父甯稿湪涓嬪睘鐨勫伐浣滄姤鍛婁腑鍙戠幇閿欒" + }, + "MAQ0244": { + "title": "鎴戜粠鏈繚鍙嶈繃浜ら�氳鍒�" + }, + "MAQ0245": { + "title": "鎴戝湪鍥㈤槦涓粡甯告槸鍕囦簬鎸戞垬鍥㈤槦宸ヤ綔璁炬兂鍜屾柟鍚戠殑浜�" + }, + "MAQ0247": { + "title": "鍦ㄥ伐浣滈」鐩紑濮嬩箣鍓嶏紝鎴戜細鍜屽洟闃熸垚鍛樺厛寮�浼氬崗璋冿紝鍋氬ソ椤圭洰璁″垝" + }, + "MAQ0248": { + "title": "鎴戜笉鎬庝箞鑺辨椂闂翠笌涓嬪睘璁ㄨ浠栦滑鐨勮亴涓氬彂灞曠洰鏍囨垨杩涘睍" + }, + "MAQ0249": { + "title": "鎴戜粠涓嶆祻瑙堜笉濂界殑缃戠珯" + }, + "MAQ0250": { + "title": "鎴戞湁鏃朵細闂茶亰鍒汉鐨勫闀块噷鐭�" + }, + "MAQ0251": { + "title": "鏈璇烽�夆�滃悓鎰忊��" + }, + "MAQ0252": { + "title": "鏈璇烽�夆�滈潪甯镐笉鍚屾剰鈥�" + } +} \ No newline at end of file diff --git a/data/test_data.json b/data/test_data.json index 54c4411..9370051 100644 --- a/data/test_data.json +++ b/data/test_data.json @@ -1,4 +1,602 @@ { + "question": { + "MAQ": { + "MAQ0001": { + "title": "鎴戜笉鍠滄鑺辨椂闂存鏌ュ皬缁嗚妭鐨勫噯纭��" + }, + "MAQ0003": { + "title": "鎴戜粠涓嶈璋庯紝鐢氳嚦杩炲皬璋庨兘娌℃湁璇磋繃" + }, + "MAQ0004": { + "title": "褰撴垜鍋氫竴涓」鐩椂锛屾垜浼氬叏鍔涗互璧达紝鐩村埌瀹屾垚涓烘" + }, + "MAQ0005": { + "title": "鎴戝�惧悜浜庝娇鐢ㄥ父瑙勬柟娉曪紝鑰屼笉鏄偅浜涗粠鏈皾璇曡繃鐨勬柟娉�" + }, + "MAQ0006": { + "title": "褰撴垜涓嶅緱涓嶅幓璐熻矗涓�涓洟闃熺殑鏃跺�欙紝鎴戜細鎰熻鎴樺參銆佹亹鎯�" + }, + "MAQ0007": { + "title": "鎴戞湁鏃跺洜涓哄悇绉嶅共鎵板洜绱狅紝鏈兘鎸夋椂瀹屾垚宸ヤ綔浠诲姟" + }, + "MAQ0009": { + "title": "鎴戣兘澶熸帶鍒惰嚜宸辩殑鎯呯华鐘舵�侊紝浣垮叾浠栦汉涓嶅お瀹规槗鐭ラ亾鎴戝唴蹇冪殑鎰熷彈" + }, + "MAQ0010": { + "title": "鎴戞敮鎸佹墍鍦ㄧ粍缁囩殑浠峰�艰鍜岃鑼冿紝骞朵簡瑙e叾閲嶈鎬�" + }, + "MAQ0011": { + "title": "鎴戜笉浼氬洜澶辫触鎴栨尗鎶樿�屾硠姘�" + }, + "MAQ0013": { + "title": "鎴戜粠鏉ユ病鏈夊湪琛椾笂涔辨墧鍨冨溇" + }, + "MAQ0014": { + "title": "鏈夋椂鎴戝彂鐜拌鍒汉鍚粠鎴戠殑鎸囩ず鏄欢寰堝洶闅剧殑浜�" + }, + "MAQ0015": { + "title": "蹇呰鏃讹紝鎴戣兘寰堝鏄撳湴闀挎椂闂村畬鍏ㄤ笓娉ㄤ簬閲嶈鐨勫伐浣滈」鐩�" + }, + "MAQ0019": { + "title": "鍦ㄩ」鐩伃鍙楅噸澶ф尗鎶樹箣鍚庯紝鎴戝苟涓嶆槸鎬昏兘婵�鍙戝洟闃熺殑鏂楀織" + }, + "MAQ0020": { + "title": "鎴戜粠鏈湪鑳屽悗璇磋繃鏈嬪弸鐨勫潖璇�" + }, + "MAQ0021": { + "title": "鎴戝枩娆㈡牴鎹洿瑙夋潵瑙e喅闂锛岃�屼笉鏄姳杈冮暱鏃堕棿杩涜绯荤粺鐨勫垎鏋�" + }, + "MAQ0024": { + "title": "鏀跨瓥鍜岃瀹氭�荤殑鏉ヨ鍙槸鎸囧鎬ф剰瑙侊紝鍦ㄦ柟渚挎椂搴斿綋閬靛畧锛屽湪涓嶆柟渚挎椂鍙互鐏垫椿澶勭悊" + }, + "MAQ0025": { + "title": "闈㈠宸ヤ綔鐜鐨勫彉鍖栵紝鎴戝緢涔愭剰灏濊瘯鏂扮殑宸ヤ綔鏂瑰紡" + }, + "MAQ0026": { + "title": "鎴戝枩娆㈡悳瀵诲拰鐮旂┒鏁版嵁锛岀湅鐪嬫暟鎹兘缁欏嚭鎬庢牱鐨勬柟鍚戙��" + }, + "MAQ0027": { + "title": "褰撴垜鐪嬪埌鍏朵粬鍥㈤槦鎴愬憳闇�瑕佸府鍔╂椂锛屾垜浼氳皟鏁存垜鐨勫伐浣滄棩绋嬶紝鑵惧嚭鏃堕棿鏉ュ府鍔╀粬浠�" + }, + "MAQ0028": { + "title": "鍦ㄥ紑浼氭椂锛屾垜鏈夋椂浼氳鑷繁鎴栦粬浜虹殑璐熼潰鎯呯华鎵�骞叉壈" + }, + "MAQ0029": { + "title": "鎴戠粡甯告槸鍥㈤槦涓涓�涓彁鍑鸿鍔ㄦ柟妗堢殑" + }, + "MAQ0030": { + "title": "鎴戜富鍔ㄥ弬涓庢垨棰嗗鍒汉涓嶆効鎰忔壙鎷呯殑宸ヤ綔椤圭洰" + }, + "MAQ0034": { + "title": "鎴戠粡甯稿悜鎴戠殑鍚屼簨鍜屼笅灞炲己璋冿紝鎴戜滑鎵�鍋氱殑鎵�鏈夊喅绛栭兘蹇呴』绗﹀悎缁勭粐鐨勪环鍊艰鍜岃鑼�" + }, + "MAQ0035": { + "title": "鏈夋椂鍒汉鐨勮礋闈㈡儏缁細褰卞搷鎴戣嚜宸辩殑鎯呯华" + }, + "MAQ0036": { + "title": "鎴戠粡甯稿垱閫犳�у湴鎶婂埆浜虹殑涓嶅悓鎯虫硶缁撳悎璧锋潵锛屽苟鎵惧埌鏈夋晥鐨勯棶棰樿В鍐冲姙娉�" + }, + "MAQ0038": { + "title": "鎴戞浘缁忓埄鐢ㄨ繃鍏朵粬浜�" + }, + "MAQ0039": { + "title": "鎴戝枩娆㈠垎鏋愬鏉傜殑姒傚康骞跺彂鐜板畠浠箣闂寸殑閫昏緫鑱旂郴" + }, + "MAQ0040": { + "title": "鎴戝緢浜彈浠旂粏妫�鏌ュ皬缁嗚妭鐨勮繃绋�" + }, + "MAQ0041": { + "title": "鑷緥瀵规垜鏉ヨ寰堝鏄撳仛鍒�" + }, + "MAQ0042": { + "title": "寮�濮嬪仛浠讳綍椤圭洰鍓嶏紝鎴戦兘浼氶鍏堟⒊鐞嗕换鍔$殑杞婚噸缂撴�ュ拰鎴鏃ユ湡" + }, + "MAQ0044": { + "title": "鍗充娇鍦ㄥ緢蹇欑殑鏃跺�欙紝濡傛灉鎴戠煡閬撴垜鏄煇椤瑰伐浣滅殑鏈�浣充汉閫夛紝鎴戜篃浼氳嚜鎰垮幓鎵挎媴杩欎簺棰濆鐨勫伐浣�" + }, + "MAQ0045": { + "title": "宸ヤ綔涓婇伃閬囧け璐ユ垨鎸姌鏃讹紝鎴戜細寮�濮嬫��鐤戣嚜宸�" + }, + "MAQ0046": { + "title": "鎴戞病鏈変粩缁嗘牎瀵硅嚜宸辩殑宸ヤ綔鎴栨姤鍛婄殑涔犳儻" + }, + "MAQ0047": { + "title": "鎴戞湁鏃跺仛浜嬮渶瑕佸埆浜烘彁閱掓墠鑳芥寜鏃跺畬鎴�" + }, + "MAQ0048": { + "title": "鎴戝緢涔愭剰鎷呬换棰嗗鐨勮鑹�" + }, + "MAQ0049": { + "title": "褰撴垜鐨勪笂鍙镐笉鍦ㄧ殑鏃跺�欙紝鎴戜笉鍠滄鑷繁鍋氬伐浣滀笂鐨勫喅绛�" + }, + "MAQ0051": { + "title": "鍦ㄥ伐浣滀腑锛屾垜娌℃湁涓哄疄鐜扮洰鏍囪�屽姫鍔涘苟鑾峰緱鎴愬氨鍜岃鍙殑鍔ㄥ姏" + }, + "MAQ0053": { + "title": "濡傛灉鑳介�夋嫨锛屾垜鏇村枩娆簨鍏堣鍒掑ソ鐨勪緥琛屾椿鍔紝鑰屼笉鍠滄鍘婚�傚簲鍚勭涓嶇‘瀹氭��" + }, + "MAQ0055": { + "title": "褰撴墜澶存湁鍏跺畠宸ヤ綔瑕佸仛鏃讹紝鎴戜笉澶効鎰忓府鍔╁洟闃熸垚鍛�" + }, + "MAQ0058": { + "title": "鏈夋椂鍊欐垜鎬�鐤戣嚜宸辨槸鍚﹁兘鑳滀换褰撳墠宸ヤ綔" + }, + "MAQ0059": { + "title": "褰撴垜鍦ㄥ伐浣滀腑鍙楀埌鍒汉鐨勮川鐤戞垨鎸戞垬鏃讹紝鎴戞�昏兘澶熼伩鍏嶇敤鍏呮弧鏁屾剰鐨勬柟寮忓幓鍥炲簲" + }, + "MAQ0060": { + "title": "鍦ㄨ鍒汉璐ㄧ枒鎴栨寫鎴樻椂锛屾垜鎬绘槸鎶戝埗鑷繁鐨勭涓�鍙嶅簲锛屼互閬垮厤鎯呯华鍖栫殑鍙嶅簲" + }, + "MAQ0061": { + "title": "鎴戜笉鎰挎剰鎺ュ彈鐙珛鍐崇瓥鎵�甯︽潵鐨勯闄�" + }, + "MAQ0062": { + "title": "鎴戝緢鎰挎剰涓洪渶瑕佸府鍔╃殑浜烘彁渚涘府鍔�" + }, + "MAQ0064": { + "title": "鐩告瘮浜庝富鍔ㄧ‘瀹氳嚜宸辩殑鍙戝睍闇�姹傦紝鎴戞洿渚濊禆浜庢垜鐨勭粍缁囨潵纭畾鎴戦渶瑕佸彂灞曞摢浜涜兘鍔涘拰鎶�鑳�" + }, + "MAQ0065": { + "title": "鍦ㄦ姤鍛婂悇绫绘暟瀛楀拰璐㈠姟鏁版嵁鏃讹紝鎴戝姏姹傚噯纭�" + }, + "MAQ0067": { + "title": "鎴戠粡甯镐細鎻愬嚭澶氱鏂规鏉ヨВ鍐虫煇涓棶棰�" + }, + "MAQ0069": { + "title": "鍦ㄧ‘瀹氬伐浣滅殑浼樺厛绛夌骇鏃讹紝鎴戦�氬父浼氬皢鎴戜笉鍠滄鐨勫伐浣滃畨鎺掑埌鏈�鍚�" + }, + "MAQ0070": { + "title": "鎴戠粡甯稿彂鐜版垜涓嶅緱涓嶆悂缃伐浣滈」鐩�" + }, + "MAQ0071": { + "title": "鍦ㄥ紑濮嬩竴涓」鐩墠锛屾垜浼氬垪鍑烘墍鏈夐渶瑕佸畬鎴愮殑浠诲姟" + }, + "MAQ0072": { + "title": "鎴戣寰楀緢闅惧拰閭d簺璐ㄧ枒鎴戣鐐圭殑鍥㈤槦鎴愬憳鐩稿" + }, + "MAQ0073": { + "title": "鎴戠粡甯搁�氳繃澶栫晫鐨勫弽棣堝拰鑷垜鍙嶇渷鏉ユ繁鍏ユ�濊�冨浣曟彁鍗囪嚜宸辩殑鎶�鑳藉拰绔炰簤鍔�" + }, + "MAQ0074": { + "title": "涓�鏃﹀洟闃熷仛鍑轰簡鍐冲畾锛屽嵆浣挎垜涓嶈禐鍚岋紝鎴戜篃浼氳窡鐫�鍥㈤槦鐨勫喅瀹氳蛋" + }, + "MAQ0076": { + "title": "鍦ㄥ仛鍑哄洶闅剧殑鍐冲畾鏃讹紝鎴戝苟涓嶆�绘槸鑳藉閬靛惊缁勭粐鐨勪环鍊艰鍜岃鑼�" + }, + "MAQ0077": { + "title": "褰撴垜鍦ㄥ伐浣滀腑鍙楀埌鎵硅瘎鏃讹紝鎴戝鏄撶敓姘旓紝澶卞幓鍐烽潤" + }, + "MAQ0078": { + "title": "鎴戝彂鐜拌姳寰堝鏃堕棿鏉ユ鏌ユ暟鎹紝鍒嗘瀽闂鐨勬牴婧愭槸浠跺緢鏋嚗鐨勪簨" + }, + "MAQ0079": { + "title": "褰撴垜鎯呯华婵�鍔ㄦ椂锛屽氨鏃犳硶娓呮櫚鍦版�濊��" + }, + "MAQ0080": { + "title": "鎬绘湁浜轰細琚笂绾т换鍛藉幓棰嗗涓�涓」鐩紝鑰屾垜瑕佸仛鐨勬槸绛夌潃骞跺惉浠庝粬浠殑瀹夋帓" + }, + "MAQ0081": { + "title": "鏈夋椂鍊欐垜寰堥毦闆嗕腑绮惧姏鍘诲畬鎴愯嚜宸变笉鍠滄鐨勪换鍔�" + }, + "MAQ0082": { + "title": "鐢变簬鎰忔枡涔嬪鐨勫洶闅撅紝鏈夊嚑娆℃垜鍐冲畾鏀惧純鏌愪簺椤圭洰" + }, + "MAQ0084": { + "title": "鎴戝父甯告槸鍥㈤槦涓涓�涓彂鐜板伐浣滀腑鐨勬敼杩涙満浼氱殑浜�" + }, + "MAQ0085": { + "title": "鎴戝畾鏈熶簡瑙f墍鍦ㄥ洟闃熺殑鏈�鏂扮姸鍐碉紝浠ョ‘淇濇垜浠兘澶熷疄鐜板洟闃熺洰鏍�" + }, + "MAQ0086": { + "title": "鎴戝彂鐜板緢闅鹃�傚簲璁″垝鐨勬敼鍙橈紝鍥犱负鎬绘槸浼氭湁鐩稿綋澶х殑骞叉壈" + }, + "MAQ0087": { + "title": "鍦ㄧぞ浜よ仛浼氱殑鍦哄悎鎷涘緟濂藉垰璁よ瘑鐨勪汉瀵规垜鏉ヨ鏄欢瀹规槗鐨勪簨" + }, + "MAQ0088": { + "title": "鎴戝伓灏斾細璁╁埆浜轰负鎴戠殑閿欒鍙楀埌璐e" + }, + "MAQ0089": { + "title": "鎴戝苟涓嶈兘瀹屽叏鎺屾帶鑷繁鐨勫懡杩�" + }, + "MAQ0090": { + "title": "鎴戣寰楁縺鍔变竴涓柊鐨勮�屼笖鎴愬憳鑳屾櫙澶氭牱鍖栫殑鍥㈤槦鏄尯鍥伴毦鐨勪簨" + }, + "MAQ0091": { + "title": "宸ヤ綔涓婄殑鍘嬪姏浠庢潵閮戒笉浼氬奖鍝嶆垜鐨勭潯鐪犺川閲�" + }, + "MAQ0092": { + "title": "鎴戝�惧悜浜庨伩鍏嶅弬鍔犺繃澶氱殑绀句氦鎴栦汉闄呬氦寰�娲诲姩" + }, + "MAQ0094": { + "title": "鎴戝苟涓嶆�绘槸鐭ラ亾濡備綍涓庡垰璁よ瘑鐨勪汉鏀�璋�" + }, + "MAQ0095": { + "title": "鎴戝枩娆㈠鍛樺伐杩涜鏂颁换鍔$殑鍩硅锛屽苟鍚戜粬浠В閲婁负浠�涔堣繖浜涘煿璁鍥㈤槦鎴愬氨鍜屽伐浣滅哗鏁堝緢閲嶈" + }, + "MAQ0097": { + "title": "鍒汉缁忓父鑳藉鍦ㄥ洟闃熷伐浣滅殑鎴愭灉涓彂鐜版垜鎵�娌℃湁鍙戠幇鐨勯敊璇�" + }, + "MAQ0098": { + "title": "鎴戝�惧悜浜庤姳璐规瘮鍏朵粬浜烘洿澶氱殑鏃堕棿鏉ユ帰绱㈡暟鎹紝浠ュ鎵炬綔鍦ㄧ殑闂鍘熷洜锛屼粠鑰屼骇鐢熸湁鐢ㄧ殑瑙佽В" + }, + "MAQ0099": { + "title": "濡傛灉鎴戠殑鑰佹澘涓嶅湪韬竟锛屾垜鎰挎剰鑷繁鍋氶噸瑕佺殑鍐冲畾" + }, + "MAQ0100": { + "title": "鎴戜笉鍠滄闇�瑕佸紑鍙戞柊鐨勮В鍐虫柟妗堢殑宸ヤ綔" + }, + "MAQ0101": { + "title": "鍙湁鍦ㄥ拰鑰佹澘鍏呭垎鍟嗚浜嗚嚜宸辩殑鎯虫硶鍚庯紝鎴戞墠浼氬惎鍔ㄦ煇涓柊涓炬帾" + }, + "MAQ0103": { + "title": "鎴戜細鍔姏鍦ㄦ埅姝㈡棩鏈熷墠瀹屾垚浠诲姟锛屽厬鐜板伐浣滀腑鐨勬壙璇猴紝濡傛湁蹇呰鍙互鐗虹壊涓汉鏃堕棿" + }, + "MAQ0104": { + "title": "鏈夋椂鎴戜細鍙楁儏缁敮閰嶈�屾棤娉曟帶鍒惰嚜宸辩殑搴斿鏂瑰紡" + }, + "MAQ0106": { + "title": "鎴戠粡甯搁�氳繃鍙傚姞鐮旇浼氥�佺綉缁滅爺璁ㄤ細鍜岄槄璇绘潵鏇存柊鑷繁鐨勪笓涓氬拰琛屼笟鐭ヨ瘑" + }, + "MAQ0107": { + "title": "鎴戝浜庣涓�鍗拌薄涓嶅ソ鐨勪汉涓嶅お鏈夎�愬績鍜岀ぜ璨�" + }, + "MAQ0110": { + "title": "浜轰滑缁忓父鏉ユ壘鎴戣璁轰粬浠殑闂鎴栬嫤鎭�" + }, + "MAQ0111": { + "title": "鎴戠粡甯稿府鍔╁埆浜烘洿濂藉湴鐞嗚В鍜屽鐞嗕粬浠嚜宸辩殑璐熼潰鎯呯华" + }, + "MAQ0112": { + "title": "鎴戠殑鍚屼簨浠兘澶熷緢瀹规槗鐪嬪嚭鎴戠殑鎯呯华鐘舵��" + }, + "MAQ0113": { + "title": "鎴戝苟涓嶆槸鎬绘湁鏃堕棿妫�鏌ユ垜鐨勫伐浣滐紝骞剁浉淇′笉妫�鏌ヤ篃闂涓嶅ぇ" + }, + "MAQ0115": { + "title": "褰撴柊鐨勫伐浣滄祦绋嬫垨鎶�鏈寮曞叆鏃讹紝鎴戦�氬父鏄渶鏃╂帴鍙楀苟閲囩敤瀹冪殑浜�" + }, + "MAQ0117": { + "title": "鍗充娇闈复楂樺帇鐨勫伐浣滐紝鎴戜篃浼氫繚鎸佷箰瑙傜殑鏈熸湜" + }, + "MAQ0118": { + "title": "鏈夋椂鎴戜細寰堥毦鐞嗚В鑷繁鐨勬儏缁弽搴�" + }, + "MAQ0119": { + "title": "鍦ㄥ伐浣滀腑锛屾垜缁忓父璁剧珛鏈夋寫鎴樻�х殑鐩爣锛岀劧鍚庡姫鍔涘疄鐜扮洰鏍�" + }, + "MAQ0120": { + "title": "鎴戦潪甯告姷瑙﹂偅浜涗笉寰椾笉鍘诲弬鍔犵殑绀句氦娲诲姩锛岃涓洪偅浼氬緢蹇冪疮" + }, + "MAQ0124": { + "title": "鎴戞�绘槸鐭ラ亾鑷繁鐨勬儏缁劅鍙椾互鍙婂師鍥�" + }, + "MAQ0126": { + "title": "鎴戞洿鍠滄涓嶇揣涓嶆參锛屼粠瀹逛笉杩殑宸ヤ綔鑺傚锛岃�屼笉鍠滄缁忓父闇�瑕佸悓鏃跺畬鎴愬涓换鍔$殑宸ヤ綔鑺傚" + }, + "MAQ0127": { + "title": "褰撴垜鎰忚瘑鍒版湁浜哄湪璇勪及鎴戠殑琛ㄧ幇鏃讹紝鎴戜細鍙樺緱姣斿埆浜烘洿鐒﹁檻" + }, + "MAQ0129": { + "title": "褰撴垜涓嶅緱涓嶆寜鐓т换鍔$殑杞婚噸缂撴�ョ殑娆″簭鏉ュ伐浣滄椂锛屾垜浼氭湁涓�绉嶅彈闄愬埗鐨勬劅瑙�" + }, + "MAQ0130": { + "title": "鎴戞湁鏃朵細鎰熷埌杩囧害鍔崇疮锛屼絾鏄垜濮嬬粓鐩镐俊鑷繁鏈夎冻澶熺殑绮惧姏鏉ュ畬鎴愭墍鏈夊伐浣滀换鍔�" + }, + "MAQ0131": { + "title": "涓庝富鍔ㄦ壙鎷呯浉姣旓紝鎴戞洿鍠滄琚笂绾ц姹傚幓鎵挎媴鏌愰」浠诲姟鎴栧姞鍏ユ垨棰嗗涓�涓」鐩洟闃�" + }, + "MAQ0132": { + "title": "浜轰滑閬囧埌鍥伴毦鏃堕�氬父浼氬埌鎴戣繖閲屾潵瀵绘眰鎯呮劅鏀寔" + }, + "MAQ0133": { + "title": "鎴戝苟涓嶆�绘槸鑳藉璇氬疄鍦伴潰瀵硅嚜宸�" + }, + "MAQ0134": { + "title": "鎴戞瘮杈冩搮闀垮畨鎱版伯涓ф垨鐢熸皵鐨勫悓浜嬶紝骞惰鍏跺喎闈欎笅鏉�" + }, + "MAQ0135": { + "title": "鎴戣鐪熷�惧惉锛屼互姝ゆ潵浜嗚В鍒汉鐨勬劅鍙楀拰闇�姹�" + }, + "MAQ0136": { + "title": "鎴戞湁鏃朵负浜嗚揪鎴愮洰鏍囦細瀵规斂绛栧拰瑙勫畾浣滅伒娲荤殑澶勭悊" + }, + "MAQ0138": { + "title": "鎴戞洿鍠滄鍙娴嬬殑銆佹寜閮ㄥ氨鐝殑鏃ュ父宸ヤ綔" + }, + "MAQ0140": { + "title": "鎴戝枩娆㈤偅绉嶄笂鍙稿鎴戝厖鍒嗘巿鏉冿紝璁╂垜鑳借嚜涓诲喅绛栫殑宸ヤ綔鐜" + }, + "MAQ0141": { + "title": "鎴戞瘮鑷繁璁よ瘑鐨勫ぇ澶氭暟浜洪兘鏇村姞鍧氭寔鏄潪鍘熷垯" + }, + "MAQ0142": { + "title": "鎴戝鍙備笌鍏泭浜嬩笟(蹇楁効娲诲姩)涓嶅お鎰熷叴瓒�" + }, + "MAQ0143": { + "title": "鎴戜笉鍠滄鍒嗘瀽鍋囨兂浼氬彂鐢熺殑鎯呭鎴栫悊璁烘ā鍨�" + }, + "MAQ0144": { + "title": "鍒濇涓庝汉瑙侀潰鏃讹紝鎴戞瘮杈冩矇榛樺瑷�锛屽父甯哥瓑寰呭鏂逛富鍔ㄥ紑鍙d氦璋�" + }, + "MAQ0145": { + "title": "鎴戞湁鏃朵細鍋氬嚭涓�浜涜鎴戜簨鍚庢劅鍒板悗鎮旂殑鍐冲畾" + }, + "MAQ0146": { + "title": "鏈夋椂鍊欙紝鎴戝緢闅剧悊瑙e埆浜虹殑鎯呯华鍙嶅簲" + }, + "MAQ0147": { + "title": "鎴戞洿鍠滄閬靛惊宸茬粡瀹屽杽浜嗙殑宸ヤ綔娴佺▼锛岃�屼笉鏄�冭檻鏂版柟娉�" + }, + "MAQ0149": { + "title": "鍦ㄤ汉闄呬氦寰�涓紝鎴戝父甯稿仛涓嶅埌鎹綅鎬濊��" + }, + "MAQ0150": { + "title": "鎴戣寰楀ソ鍍忓叾浠栦汉姣旀垜鏇磋兘鎶曞叆鏇村绮惧姏鍘诲畬鎴愬伐浣滀换鍔�" + }, + "MAQ0151": { + "title": "鎴戝枩娆㈡暣鐞嗗拰鍙戣〃鍏锋湁浠や汉淇℃湇鐨勭悊鐢辩殑婕旇锛屼互姝ゆ潵璇存湇鍏朵粬浜�" + }, + "MAQ0152": { + "title": "鎴戜笉鍠滄濮嬬粓蹇妭濂忓湴宸ヤ綔" + }, + "MAQ0156": { + "title": "褰撴垜鏈兘瀹炵幇宸ヤ綔涓殑涓�涓噸瑕佺洰鏍囨椂锛屾垜寰堝揩灏变細鎭㈠杩囨潵锛岄噸鏂颁笓娉ㄤ簬濡備綍杈炬垚鐩爣" + }, + "MAQ0157": { + "title": "鎴戜笉鎰挎剰鏀瑰彉鎴戞棦鏈夌殑宸ヤ綔鏂瑰紡" + }, + "MAQ0158": { + "title": "鎴戝枩娆笉鏂彉鍖栵紝鑰屼笉鏄ǔ瀹�" + }, + "MAQ0159": { + "title": "褰撴垜鍦ㄥ伐浣滀腑寰楀埌璐熼潰鍙嶉鏃讹紝鎴戜篃浠庝笉鎬�鐤戣嚜宸卞伐浣滅殑鑳藉姏" + }, + "MAQ0160": { + "title": "鎴戜竴鐩存湁寮虹儓鐨勬剰鎰垮幓棰嗗鍜屾寚鎸ヤ竴缇や汉" + }, + "MAQ0161": { + "title": "闈㈠涓�涓殰纰嶆垨鍥伴毦锛屾垜浼氫笉鍋滃湴鍔姏鍘诲厠鏈嶅畠锛岀洿鍒版垚鍔�" + }, + "MAQ0162": { + "title": "鍦ㄥ伐浣滈」鐩殑璁″垝闃舵锛屾垜鎬绘槸纭璇ラ」鐩殑鍒╃泭鏀稿叧鏂瑰苟纭繚浠栦滑瀵硅椤圭洰鐨勬壙璇�" + }, + "MAQ0163": { + "title": "鏈夋椂鎴戜細鍙楀埌鎯呯华鐨勫奖鍝嶏紝鍋氬嚭涓�浜涜鑷繁鍚庢倲鐨勫喅瀹�" + }, + "MAQ0164": { + "title": "鎴戞�绘槸鐭ラ亾鏄粈涔堝奖鍝嶄簡鎴戠殑鎯呯华" + }, + "MAQ0165": { + "title": "褰撳埆浜哄悜鎴戞姳鎬ㄤ粬浠湪宸ヤ綔涓婃垨鐢熸椿涓鍒扮殑闂鏃讹紝鎴戝父甯告棤娉曟劅鍚岃韩鍙�" + }, + "MAQ0166": { + "title": "瀵逛簬鎴戞潵璇达紝璇存湇鍒汉鏄欢瀹规槗鐨勪簨" + }, + "MAQ0167": { + "title": "鏈夋椂鎴戝彂鐜板伐浣滀笂鐨勬媴蹇ф垨闂浼氬鎴戠殑涓汉鐢熸椿浜х敓璐熼潰褰卞搷" + }, + "MAQ0168": { + "title": "鎴戞浘缁忓湪娌℃湁鐪熺殑鐢熺梾鐨勬儏鍐典笅锛屽悜鍏徃鎴栧鏍¤杩囩梾鍋�" + }, + "MAQ0169": { + "title": "鎴戞湁鏃朵細鎸夌収鑷繁鐨勫叴瓒h�屼笉鏄换鍔$殑杞婚噸缂撴�ユ潵鍐冲畾鑷繁鐨勫伐浣滈『搴�" + }, + "MAQ0170": { + "title": "宸ヤ綔璁╂垜鍏呮弧娲诲姏锛� 浠ヨ嚦浜庢垜鍙戠幇鑷繁甯稿父娌夋蹈鍦ㄥ伐浣滀腑锛岃繃浜嗙潯瑙夌殑鐐归兘涓嶇煡閬�" + }, + "MAQ0171": { + "title": "鎴戣寰楀彉鍖栨槸闈炲父浠や汉鍏村鐨勶紝灏界瀵瑰叾浠栦汉鏉ヨ鍙兘寰堥毦" + }, + "MAQ0172": { + "title": "鎴戞搮闀挎敼鍙樺埆浜虹殑瑙傜偣鍜岀湅娉�" + }, + "MAQ0173": { + "title": "鎴戝苟涓嶆槸鎬昏兘鍋氬埌瑷�琛屼竴鑷�" + }, + "MAQ0174": { + "title": "鏈夋椂鎴戝彂鐜版敼鍙樺埆浜虹殑瑙傜偣鍜岀湅娉曞緢闅�" + }, + "MAQ0175": { + "title": "褰撻亣鍒拌嚜宸变笉鍠滄鎴栨瘮杈冨洶闅剧殑浠诲姟鏃讹紝鎴戦�氬父浼氭嫋寤朵竴娈垫椂闂村啀寮�濮�" + }, + "MAQ0176": { + "title": "鎴戝枩娆笌鍏朵粬鍥㈤槦鎴愬憳杩涜鍗忎綔锛屼互閬垮厤閲嶅鎴栨棤鏁堢殑宸ヤ綔" + }, + "MAQ0178": { + "title": "鎴戞�绘槸鎸夋椂瀹屾垚宸ヤ綔浠诲姟" + }, + "MAQ0179": { + "title": "鎴戠涓�娆¤鍒板埆浜烘椂灏卞彲浠ュ緢瀹规槗鍦拌鎳備粬浠紝浣嗘槸涓嶇绗竴鍗拌薄濡備綍锛屾垜閮戒細淇濇寔绀艰矊鍜屽懆鍒�" + }, + "MAQ0180": { + "title": "鎴戠粡甯告槸绗竴涓嚜鎰块瀵兼垨鍔犲叆椤圭洰鍥㈤槦鐨勪汉" + }, + "MAQ0181": { + "title": "褰撴墜澶存鍦ㄥ仛鐨勯」鐩嚭鐜版剰澶栫殑鍥伴毦鏃讹紝鎴戝彂鐜版湁鏃舵垜浼氬仠涓嬫潵锛岃浆鑰屽仛鍏跺畠椤圭洰" + }, + "MAQ0182": { + "title": "鎴戜細瀹氭湡鍚戞垜鐨勫洟闃熸垚鍛樻彁渚涘弽棣堬紝浠ュ府鍔╀粬浠釜浜哄彂灞曞苟瀹炵幇鑱屼笟鐩爣" + }, + "MAQ0183": { + "title": "鎴戝枩娆㈢珛鍗冲紑濮嬪鐞嗗洶闅剧殑浠诲姟锛岃�屼笉鏄嫋寤�" + }, + "MAQ0184": { + "title": "鍦ㄥ紑浼氭椂鎴戞�绘槸涓撴敞浜庝富棰橈紝涓庝粬浜轰簰鍔紝骞朵笓蹇冨湴鍊惧惉浠栦汉鐨勫彂瑷�" + }, + "MAQ0185": { + "title": "鎴戜笉鍠滄涓鸿嚜宸辨垨鍥㈤槦璁剧珛鎸戞垬鎬х殑鐩爣锛屽苟涓嶅緱涓嶈姳棰濆鐨勬椂闂村幓杈炬垚杩欎簺鐩爣" + }, + "MAQ0187": { + "title": "鐩告瘮涓庝粬浜哄悎浣滐紝鎴戞洿鎰挎剰鑷繁涓�浜哄畬鎴愬伐浣滀换鍔�" + }, + "MAQ0190": { + "title": "姣忔寮�濮嬫柊宸ヤ綔鎴栨柊椤圭洰鏃讹紝鎴戦�氬父浼氬厖婊′俊蹇�" + }, + "MAQ0191": { + "title": "鎴戝彂鐜颁富鍔ㄤ笌鍒氳璇嗙殑浜烘攢璋堟槸瀹规槗鐨勪簨" + }, + "MAQ0192": { + "title": "鎴戞効鎰忚嚜宸卞仛鍐冲畾骞舵帴鍙楃浉搴旂殑鍚庢灉" + }, + "MAQ0193": { + "title": "鎴戝伓灏斿洜涓哄繀椤诲畬鎴愬叾浠栭噸瑕佺殑浜嬫儏鑰屾病鏈夋寜鏃跺畬鎴愬伐浣滀换鍔�" + }, + "MAQ0194": { + "title": "鍙鎰挎剰锛屾垜鍙互杞绘澗鍦颁笌浠讳綍浜轰氦鏈嬪弸" + }, + "MAQ0195": { + "title": "鎴戝枩娆㈠澶嶆潅鏂规鐨勫埄寮婅繘琛屽叏闈㈢殑鍒嗘瀽" + }, + "MAQ0197": { + "title": "鎴戜笉浼氬皾璇曡嚜宸卞幓鎻愬嚭鏂版兂娉曪紝鑰屾槸甯屾湜鎶婃绫讳簨鎯呰缁欏姝ゆ劅鍏磋叮鐨勪汉鍘诲仛" + }, + "MAQ0199": { + "title": "鎴戞�绘槸鑳藉緢蹇兂鍑鸿鏈嶅埆浜虹殑鏈�浣虫柟娉�" + }, + "MAQ0200": { + "title": "鎴戜笉浼氳鎸姌鎴栧け鏈涘鎴戠殑宸ヤ綔琛ㄧ幇浜х敓璐熼潰褰卞搷" + }, + "MAQ0201": { + "title": "褰撴垜鍦ㄥ伐浣滀腑閬亣鎸姌鎴栧け璐ユ椂锛屾垜闇�瑕佽緝闀挎椂闂存墠鑳藉畬鍏ㄦ仮澶嶈嚜淇�" + }, + "MAQ0202": { + "title": "瀵逛簬鎴戜笉鍠滄鐨勪汉锛屾垜鏃犳硶鎬绘槸淇濇寔绀艰矊鍜屾伃鏁�" + }, + "MAQ0203": { + "title": "澶у鏁颁汉鏈�缁堥兘浼氬悓鎰忔垜鐨勮鐐�" + }, + "MAQ0204": { + "title": "濡傛灉鎴戣涓哄垰璁よ瘑鐨勪汉瀵规垜涓嶇ぜ璨岋紝涔熶笉灏婇噸鎴戯紝閭f垜涔熶笉浼氬浠栦滑鏈夌ぜ璨屾垨灏婇噸" + }, + "MAQ0205": { + "title": "鍦ㄨ繘琛屾煇涓」鐩椂锛屾垜浼氬畾鏈熺洃鎺ч」鐩噸瑕佽妭鐐圭殑瀹屾垚杩涘害锛屽苟璺熻繘璐熻矗鍚勪釜鍏蜂綋妯″潡鐨勫洟闃熸垚鍛�" + }, + "MAQ0206": { + "title": "鍦ㄥ拰浠栦汉璋堝垽鐨勬椂鍊欙紝鎴戝伓灏斾細瑙夊緱缂轰箯鑷俊" + }, + "MAQ0207": { + "title": "鏈夋椂鎴戝緢闅捐鏈嶅埆浜烘帴鍙楁垜鐨勫缓璁�" + }, + "MAQ0208": { + "title": "鍗充娇涓嶆儏鎰匡紝鎴戜篃浼氶潪甯镐粩缁嗗湴妫�鏌ュ摢鎬曟渶灏忕殑缁嗚妭" + }, + "MAQ0209": { + "title": "浠栦汉璁や负鎴戣兘鍔涗竴鑸�" + }, + "MAQ0210": { + "title": "鎴戜笉鍠滄鍩硅鍥㈤槦涓殑鏂板憳宸ヤ互纭繚浠栦滑鍋氫簨鏂瑰紡鏄纭殑" + }, + "MAQ0211": { + "title": "濡傛灉闇�瑕佺殑璇濓紝鎴戞�昏兘鎵惧埌鏇村鐨勬椂闂存潵瀹屾垚宸ヤ綔" + }, + "MAQ0212": { + "title": "涓庢垜鐨勫悓浜嬬浉姣旓紝鎴戜笉澶枩娆㈡敹闆嗗拰鍒嗘瀽鏁版嵁銆�" + }, + "MAQ0213": { + "title": "鎴戠‘淇濆厬鐜版墍鏈夊伐浣滀笂鐨勬壙璇猴紝鍥犱负杩欏鎴戣�岃█鏄竴涓弗鑲冦�佺鍦g殑鍘熷垯" + }, + "MAQ0214": { + "title": "鍚屼簨浠粡甯告潵璇锋暀鎴戝簲璇ュ浣曞拰鍒汉娌熼�氭晱鎰熻瘽棰�" + }, + "MAQ0216": { + "title": "灏界鏈夋椂鍙兘涓嶆柟渚匡紝浣嗘垜濮嬬粓閬靛畧鏀跨瓥鍜岃瀹�" + }, + "MAQ0218": { + "title": "瀵逛簬閭d簺鎴戣涓烘瘮杈冨洶闅炬垨鑰呮垚鍔熷彲鑳芥�т笉楂樼殑椤圭洰锛屾垜缁忓父鎷栧欢鏃堕棿锛岃�屼笉绔嬪嵆鍚姩" + }, + "MAQ0219": { + "title": "鎴戜粠鏈洜宸ヤ綔涓婄殑澶辫触鑰岀伆蹇�" + }, + "MAQ0220": { + "title": "褰撴垜鐨勫伐浣滆礋鑽峰鍔犳椂锛屾湁鏃舵垜浼氭劅鍒板け鍘昏�愬績銆佸績鐑︽剰涔�" + }, + "MAQ0221": { + "title": "鎴戝缁堢‘淇濇仾瀹堟垜鎵�鏈夌殑鑱屼笟鎵胯骞朵俊瀹堣瑷�" + }, + "MAQ0223": { + "title": "鎴戞洿鍠滄閭d簺鍙互鍏呭垎鍙戞尌鍒涢�犳�х殑宸ヤ綔" + }, + "MAQ0224": { + "title": "鏈夋椂鍊欏伐浣滀腑鐨勫け鏈涘拰澶辫触浼氫娇鎴戝ソ鍑犲ぉ閮芥棤娉曢泦涓敞鎰忓姏" + }, + "MAQ0225": { + "title": "鎴戜笉鍠滄涓嶆柇鍦拌鏈嶅埆浜烘帴鍙楁垜鐨勫缓璁�" + }, + "MAQ0226": { + "title": "鎴戝湪鍚屼簨涓湁鑳藉渾铻嶅湴鍜岄毦鐩稿鐨勪汉鎵撲氦閬撶殑鍚嶅0" + }, + "MAQ0227": { + "title": "鎴戠粡甯稿鐞嗗緢澶氫笉鍚岀殑椤圭洰銆佹兂娉曟垨鑰呰璁猴紝鎴戝彂鐜拌繖璁╀汉绮剧鎸" + }, + "MAQ0228": { + "title": "褰撲簨鎯呮病鏈夋寜鐓ф垜鐨勯鎯冲彂灞曟椂锛屾垜浼氬彉寰楁伯涓�" + }, + "MAQ0229": { + "title": "鎴戝枩娆㈠弬鍔犲晢涓氱ぞ浜ゆ椿鍔�" + }, + "MAQ0230": { + "title": "鏈夋椂鎴戝浜よ皥瀵硅薄鐨勬枃鍖栬儗鏅�佷範淇椼�佸拰绂佸繉涓嶅鏁忔劅" + }, + "MAQ0231": { + "title": "鍦ㄧぞ浜や簰鍔ㄤ腑锛屾垜閫氬父瀵瑰埆浜虹殑闇�姹備笉澶熸晱鎰�" + }, + "MAQ0232": { + "title": "鎴戝浠栦汉鐨勭涓�鍗拌薄閫氬父鏄噯纭殑" + }, + "MAQ0233": { + "title": "鎴戦�氬父鑳藉湪宸ヤ綔涓帶鍒跺ソ鑷繁鐨勬儏缁�" + }, + "MAQ0234": { + "title": "褰撴垜鍦ㄦ煇涓伐浣滈」鐩腑纰板埌鍥伴毦鏃讹紝鎴戞湁鏃朵細涓璇ラ」鐩紝杞�屽幓鍋氬叾瀹冮」鐩�" + }, + "MAQ0235": { + "title": "鍦ㄦ垜鐨勭敓娲诲拰鑱屼笟涓紝鎴戞�绘槸鐭ラ亾鑷繁鎯宠浠�涔�" + }, + "MAQ0236": { + "title": "鍜屾柊璁よ瘑鐨勪汉锛屾垜浠庝笉浼氭劅鍒版病璇濆彲璇�" + }, + "MAQ0237": { + "title": "鍗充娇鍥㈤槦涓殑澶ч儴鍒嗘垚鍛樿窡鎴戠殑鎰忚/鐪嬫硶鐩稿乏锛屾垜閫氬父涔熶笉鎰挎剰鏀惧純鑷繁鐨勬剰瑙�/鐪嬫硶锛岃窡澶т紮鍎胯揪鎴愪竴鑷淬��" + }, + "MAQ0240": { + "title": "濡傛灉鎴戝拰鍏朵粬浜哄悎浣滀竴椤逛换鍔★紝鎴戜細绛夌潃浠栦滑鏉ユ壘鎴戝崗璋冨伐浣�" + }, + "MAQ0241": { + "title": "鎴戝皬鏃跺�欐浘缁忔嬁杩囨湰涓嶅睘浜庤嚜宸辩殑涓滆タ" + }, + "MAQ0242": { + "title": "鍦ㄥ緱鍒拌�佹澘鐨勬槑纭寚绀哄墠锛屾垜閫氬父涓嶄細閲囧彇琛屽姩" + }, + "MAQ0243": { + "title": "鎴戝父甯稿湪涓嬪睘鐨勫伐浣滄姤鍛婁腑鍙戠幇閿欒" + }, + "MAQ0244": { + "title": "鎴戜粠鏈繚鍙嶈繃浜ら�氳鍒�" + }, + "MAQ0245": { + "title": "鎴戝湪鍥㈤槦涓粡甯告槸鍕囦簬鎸戞垬鍥㈤槦宸ヤ綔璁炬兂鍜屾柟鍚戠殑浜�" + }, + "MAQ0247": { + "title": "鍦ㄥ伐浣滈」鐩紑濮嬩箣鍓嶏紝鎴戜細鍜屽洟闃熸垚鍛樺厛寮�浼氬崗璋冿紝鍋氬ソ椤圭洰璁″垝" + }, + "MAQ0248": { + "title": "鎴戜笉鎬庝箞鑺辨椂闂翠笌涓嬪睘璁ㄨ浠栦滑鐨勮亴涓氬彂灞曠洰鏍囨垨杩涘睍" + }, + "MAQ0249": { + "title": "鎴戜粠涓嶆祻瑙堜笉濂界殑缃戠珯" + }, + "MAQ0250": { + "title": "鎴戞湁鏃朵細闂茶亰鍒汉鐨勫闀块噷鐭�" + }, + "MAQ0251": { + "title": "鏈璇烽�夆�滃悓鎰忊��" + }, + "MAQ0252": { + "title": "鏈璇烽�夆�滈潪甯镐笉鍚屾剰鈥�" + } + } + }, "login": { "url": "http://161.117.57.194/login?lang=zh_CN", "username": "admin", @@ -113,5 +711,717 @@ "status": "鏈湪瀵绘壘瀹炰範/宸ヤ綔", "workExperience": "鏃�" } + }, + "testPackageList": { + "question": { + "MAQ": { + "MAQ0001": { + "title": "鎴戜笉鍠滄鑺辨椂闂存鏌ュ皬缁嗚妭鐨勫噯纭��" + }, + "MAQ0003": { + "title": "鎴戜粠涓嶈璋庯紝鐢氳嚦杩炲皬璋庨兘娌℃湁璇磋繃" + }, + "MAQ0004": { + "title": "褰撴垜鍋氫竴涓」鐩椂锛屾垜浼氬叏鍔涗互璧达紝鐩村埌瀹屾垚涓烘" + }, + "MAQ0005": { + "title": "鎴戝�惧悜浜庝娇鐢ㄥ父瑙勬柟娉曪紝鑰屼笉鏄偅浜涗粠鏈皾璇曡繃鐨勬柟娉�" + }, + "MAQ0006": { + "title": "褰撴垜涓嶅緱涓嶅幓璐熻矗涓�涓洟闃熺殑鏃跺�欙紝鎴戜細鎰熻鎴樺參銆佹亹鎯�" + }, + "MAQ0007": { + "title": "鎴戞湁鏃跺洜涓哄悇绉嶅共鎵板洜绱狅紝鏈兘鎸夋椂瀹屾垚宸ヤ綔浠诲姟" + }, + "MAQ0009": { + "title": "鎴戣兘澶熸帶鍒惰嚜宸辩殑鎯呯华鐘舵�侊紝浣垮叾浠栦汉涓嶅お瀹规槗鐭ラ亾鎴戝唴蹇冪殑鎰熷彈" + }, + "MAQ0010": { + "title": "鎴戞敮鎸佹墍鍦ㄧ粍缁囩殑浠峰�艰鍜岃鑼冿紝骞朵簡瑙e叾閲嶈鎬�" + }, + "MAQ0011": { + "title": "鎴戜笉浼氬洜澶辫触鎴栨尗鎶樿�屾硠姘�" + }, + "MAQ0013": { + "title": "鎴戜粠鏉ユ病鏈夊湪琛椾笂涔辨墧鍨冨溇" + }, + "MAQ0014": { + "title": "鏈夋椂鎴戝彂鐜拌鍒汉鍚粠鎴戠殑鎸囩ず鏄欢寰堝洶闅剧殑浜�" + }, + "MAQ0015": { + "title": "蹇呰鏃讹紝鎴戣兘寰堝鏄撳湴闀挎椂闂村畬鍏ㄤ笓娉ㄤ簬閲嶈鐨勫伐浣滈」鐩�" + }, + "MAQ0019": { + "title": "鍦ㄩ」鐩伃鍙楅噸澶ф尗鎶樹箣鍚庯紝鎴戝苟涓嶆槸鎬昏兘婵�鍙戝洟闃熺殑鏂楀織" + }, + "MAQ0020": { + "title": "鎴戜粠鏈湪鑳屽悗璇磋繃鏈嬪弸鐨勫潖璇�" + }, + "MAQ0021": { + "title": "鎴戝枩娆㈡牴鎹洿瑙夋潵瑙e喅闂锛岃�屼笉鏄姳杈冮暱鏃堕棿杩涜绯荤粺鐨勫垎鏋�" + }, + "MAQ0024": { + "title": "鏀跨瓥鍜岃瀹氭�荤殑鏉ヨ鍙槸鎸囧鎬ф剰瑙侊紝鍦ㄦ柟渚挎椂搴斿綋閬靛畧锛屽湪涓嶆柟渚挎椂鍙互鐏垫椿澶勭悊" + }, + "MAQ0025": { + "title": "闈㈠宸ヤ綔鐜鐨勫彉鍖栵紝鎴戝緢涔愭剰灏濊瘯鏂扮殑宸ヤ綔鏂瑰紡" + }, + "MAQ0026": { + "title": "鎴戝枩娆㈡悳瀵诲拰鐮旂┒鏁版嵁锛岀湅鐪嬫暟鎹兘缁欏嚭鎬庢牱鐨勬柟鍚戙��" + }, + "MAQ0027": { + "title": "褰撴垜鐪嬪埌鍏朵粬鍥㈤槦鎴愬憳闇�瑕佸府鍔╂椂锛屾垜浼氳皟鏁存垜鐨勫伐浣滄棩绋嬶紝鑵惧嚭鏃堕棿鏉ュ府鍔╀粬浠�" + }, + "MAQ0028": { + "title": "鍦ㄥ紑浼氭椂锛屾垜鏈夋椂浼氳鑷繁鎴栦粬浜虹殑璐熼潰鎯呯华鎵�骞叉壈" + }, + "MAQ0029": { + "title": "鎴戠粡甯告槸鍥㈤槦涓涓�涓彁鍑鸿鍔ㄦ柟妗堢殑" + }, + "MAQ0030": { + "title": "鎴戜富鍔ㄥ弬涓庢垨棰嗗鍒汉涓嶆効鎰忔壙鎷呯殑宸ヤ綔椤圭洰" + }, + "MAQ0034": { + "title": "鎴戠粡甯稿悜鎴戠殑鍚屼簨鍜屼笅灞炲己璋冿紝鎴戜滑鎵�鍋氱殑鎵�鏈夊喅绛栭兘蹇呴』绗﹀悎缁勭粐鐨勪环鍊艰鍜岃鑼�" + }, + "MAQ0035": { + "title": "鏈夋椂鍒汉鐨勮礋闈㈡儏缁細褰卞搷鎴戣嚜宸辩殑鎯呯华" + }, + "MAQ0036": { + "title": "鎴戠粡甯稿垱閫犳�у湴鎶婂埆浜虹殑涓嶅悓鎯虫硶缁撳悎璧锋潵锛屽苟鎵惧埌鏈夋晥鐨勯棶棰樿В鍐冲姙娉�" + }, + "MAQ0038": { + "title": "鎴戞浘缁忓埄鐢ㄨ繃鍏朵粬浜�" + }, + "MAQ0039": { + "title": "鎴戝枩娆㈠垎鏋愬鏉傜殑姒傚康骞跺彂鐜板畠浠箣闂寸殑閫昏緫鑱旂郴" + }, + "MAQ0040": { + "title": "鎴戝緢浜彈浠旂粏妫�鏌ュ皬缁嗚妭鐨勮繃绋�" + }, + "MAQ0041": { + "title": "鑷緥瀵规垜鏉ヨ寰堝鏄撳仛鍒�" + }, + "MAQ0042": { + "title": "寮�濮嬪仛浠讳綍椤圭洰鍓嶏紝鎴戦兘浼氶鍏堟⒊鐞嗕换鍔$殑杞婚噸缂撴�ュ拰鎴鏃ユ湡" + }, + "MAQ0044": { + "title": "鍗充娇鍦ㄥ緢蹇欑殑鏃跺�欙紝濡傛灉鎴戠煡閬撴垜鏄煇椤瑰伐浣滅殑鏈�浣充汉閫夛紝鎴戜篃浼氳嚜鎰垮幓鎵挎媴杩欎簺棰濆鐨勫伐浣�" + }, + "MAQ0045": { + "title": "宸ヤ綔涓婇伃閬囧け璐ユ垨鎸姌鏃讹紝鎴戜細寮�濮嬫��鐤戣嚜宸�" + }, + "MAQ0046": { + "title": "鎴戞病鏈変粩缁嗘牎瀵硅嚜宸辩殑宸ヤ綔鎴栨姤鍛婄殑涔犳儻" + }, + "MAQ0047": { + "title": "鎴戞湁鏃跺仛浜嬮渶瑕佸埆浜烘彁閱掓墠鑳芥寜鏃跺畬鎴�" + }, + "MAQ0048": { + "title": "鎴戝緢涔愭剰鎷呬换棰嗗鐨勮鑹�" + }, + "MAQ0049": { + "title": "褰撴垜鐨勪笂鍙镐笉鍦ㄧ殑鏃跺�欙紝鎴戜笉鍠滄鑷繁鍋氬伐浣滀笂鐨勫喅绛�" + }, + "MAQ0051": { + "title": "鍦ㄥ伐浣滀腑锛屾垜娌℃湁涓哄疄鐜扮洰鏍囪�屽姫鍔涘苟鑾峰緱鎴愬氨鍜岃鍙殑鍔ㄥ姏" + }, + "MAQ0053": { + "title": "濡傛灉鑳介�夋嫨锛屾垜鏇村枩娆簨鍏堣鍒掑ソ鐨勪緥琛屾椿鍔紝鑰屼笉鍠滄鍘婚�傚簲鍚勭涓嶇‘瀹氭��" + }, + "MAQ0055": { + "title": "褰撴墜澶存湁鍏跺畠宸ヤ綔瑕佸仛鏃讹紝鎴戜笉澶効鎰忓府鍔╁洟闃熸垚鍛�" + }, + "MAQ0058": { + "title": "鏈夋椂鍊欐垜鎬�鐤戣嚜宸辨槸鍚﹁兘鑳滀换褰撳墠宸ヤ綔" + }, + "MAQ0059": { + "title": "褰撴垜鍦ㄥ伐浣滀腑鍙楀埌鍒汉鐨勮川鐤戞垨鎸戞垬鏃讹紝鎴戞�昏兘澶熼伩鍏嶇敤鍏呮弧鏁屾剰鐨勬柟寮忓幓鍥炲簲" + }, + "MAQ0060": { + "title": "鍦ㄨ鍒汉璐ㄧ枒鎴栨寫鎴樻椂锛屾垜鎬绘槸鎶戝埗鑷繁鐨勭涓�鍙嶅簲锛屼互閬垮厤鎯呯华鍖栫殑鍙嶅簲" + }, + "MAQ0061": { + "title": "鎴戜笉鎰挎剰鎺ュ彈鐙珛鍐崇瓥鎵�甯︽潵鐨勯闄�" + }, + "MAQ0062": { + "title": "鎴戝緢鎰挎剰涓洪渶瑕佸府鍔╃殑浜烘彁渚涘府鍔�" + }, + "MAQ0064": { + "title": "鐩告瘮浜庝富鍔ㄧ‘瀹氳嚜宸辩殑鍙戝睍闇�姹傦紝鎴戞洿渚濊禆浜庢垜鐨勭粍缁囨潵纭畾鎴戦渶瑕佸彂灞曞摢浜涜兘鍔涘拰鎶�鑳�" + }, + "MAQ0065": { + "title": "鍦ㄦ姤鍛婂悇绫绘暟瀛楀拰璐㈠姟鏁版嵁鏃讹紝鎴戝姏姹傚噯纭�" + }, + "MAQ0067": { + "title": "鎴戠粡甯镐細鎻愬嚭澶氱鏂规鏉ヨВ鍐虫煇涓棶棰�" + }, + "MAQ0069": { + "title": "鍦ㄧ‘瀹氬伐浣滅殑浼樺厛绛夌骇鏃讹紝鎴戦�氬父浼氬皢鎴戜笉鍠滄鐨勫伐浣滃畨鎺掑埌鏈�鍚�" + }, + "MAQ0070": { + "title": "鎴戠粡甯稿彂鐜版垜涓嶅緱涓嶆悂缃伐浣滈」鐩�" + }, + "MAQ0071": { + "title": "鍦ㄥ紑濮嬩竴涓」鐩墠锛屾垜浼氬垪鍑烘墍鏈夐渶瑕佸畬鎴愮殑浠诲姟" + }, + "MAQ0072": { + "title": "鎴戣寰楀緢闅惧拰閭d簺璐ㄧ枒鎴戣鐐圭殑鍥㈤槦鎴愬憳鐩稿" + }, + "MAQ0073": { + "title": "鎴戠粡甯搁�氳繃澶栫晫鐨勫弽棣堝拰鑷垜鍙嶇渷鏉ユ繁鍏ユ�濊�冨浣曟彁鍗囪嚜宸辩殑鎶�鑳藉拰绔炰簤鍔�" + }, + "MAQ0074": { + "title": "涓�鏃﹀洟闃熷仛鍑轰簡鍐冲畾锛屽嵆浣挎垜涓嶈禐鍚岋紝鎴戜篃浼氳窡鐫�鍥㈤槦鐨勫喅瀹氳蛋" + }, + "MAQ0076": { + "title": "鍦ㄥ仛鍑哄洶闅剧殑鍐冲畾鏃讹紝鎴戝苟涓嶆�绘槸鑳藉閬靛惊缁勭粐鐨勪环鍊艰鍜岃鑼�" + }, + "MAQ0077": { + "title": "褰撴垜鍦ㄥ伐浣滀腑鍙楀埌鎵硅瘎鏃讹紝鎴戝鏄撶敓姘旓紝澶卞幓鍐烽潤" + }, + "MAQ0078": { + "title": "鎴戝彂鐜拌姳寰堝鏃堕棿鏉ユ鏌ユ暟鎹紝鍒嗘瀽闂鐨勬牴婧愭槸浠跺緢鏋嚗鐨勪簨" + }, + "MAQ0079": { + "title": "褰撴垜鎯呯华婵�鍔ㄦ椂锛屽氨鏃犳硶娓呮櫚鍦版�濊��" + }, + "MAQ0080": { + "title": "鎬绘湁浜轰細琚笂绾т换鍛藉幓棰嗗涓�涓」鐩紝鑰屾垜瑕佸仛鐨勬槸绛夌潃骞跺惉浠庝粬浠殑瀹夋帓" + }, + "MAQ0081": { + "title": "鏈夋椂鍊欐垜寰堥毦闆嗕腑绮惧姏鍘诲畬鎴愯嚜宸变笉鍠滄鐨勪换鍔�" + }, + "MAQ0082": { + "title": "鐢变簬鎰忔枡涔嬪鐨勫洶闅撅紝鏈夊嚑娆℃垜鍐冲畾鏀惧純鏌愪簺椤圭洰" + }, + "MAQ0084": { + "title": "鎴戝父甯告槸鍥㈤槦涓涓�涓彂鐜板伐浣滀腑鐨勬敼杩涙満浼氱殑浜�" + }, + "MAQ0085": { + "title": "鎴戝畾鏈熶簡瑙f墍鍦ㄥ洟闃熺殑鏈�鏂扮姸鍐碉紝浠ョ‘淇濇垜浠兘澶熷疄鐜板洟闃熺洰鏍�" + }, + "MAQ0086": { + "title": "鎴戝彂鐜板緢闅鹃�傚簲璁″垝鐨勬敼鍙橈紝鍥犱负鎬绘槸浼氭湁鐩稿綋澶х殑骞叉壈" + }, + "MAQ0087": { + "title": "鍦ㄧぞ浜よ仛浼氱殑鍦哄悎鎷涘緟濂藉垰璁よ瘑鐨勪汉瀵规垜鏉ヨ鏄欢瀹规槗鐨勪簨" + }, + "MAQ0088": { + "title": "鎴戝伓灏斾細璁╁埆浜轰负鎴戠殑閿欒鍙楀埌璐e" + }, + "MAQ0089": { + "title": "鎴戝苟涓嶈兘瀹屽叏鎺屾帶鑷繁鐨勫懡杩�" + }, + "MAQ0090": { + "title": "鎴戣寰楁縺鍔变竴涓柊鐨勮�屼笖鎴愬憳鑳屾櫙澶氭牱鍖栫殑鍥㈤槦鏄尯鍥伴毦鐨勪簨" + }, + "MAQ0091": { + "title": "宸ヤ綔涓婄殑鍘嬪姏浠庢潵閮戒笉浼氬奖鍝嶆垜鐨勭潯鐪犺川閲�" + }, + "MAQ0092": { + "title": "鎴戝�惧悜浜庨伩鍏嶅弬鍔犺繃澶氱殑绀句氦鎴栦汉闄呬氦寰�娲诲姩" + }, + "MAQ0094": { + "title": "鎴戝苟涓嶆�绘槸鐭ラ亾濡備綍涓庡垰璁よ瘑鐨勪汉鏀�璋�" + }, + "MAQ0095": { + "title": "鎴戝枩娆㈠鍛樺伐杩涜鏂颁换鍔$殑鍩硅锛屽苟鍚戜粬浠В閲婁负浠�涔堣繖浜涘煿璁鍥㈤槦鎴愬氨鍜屽伐浣滅哗鏁堝緢閲嶈" + }, + "MAQ0097": { + "title": "鍒汉缁忓父鑳藉鍦ㄥ洟闃熷伐浣滅殑鎴愭灉涓彂鐜版垜鎵�娌℃湁鍙戠幇鐨勯敊璇�" + }, + "MAQ0098": { + "title": "鎴戝�惧悜浜庤姳璐规瘮鍏朵粬浜烘洿澶氱殑鏃堕棿鏉ユ帰绱㈡暟鎹紝浠ュ鎵炬綔鍦ㄧ殑闂鍘熷洜锛屼粠鑰屼骇鐢熸湁鐢ㄧ殑瑙佽В" + }, + "MAQ0099": { + "title": "濡傛灉鎴戠殑鑰佹澘涓嶅湪韬竟锛屾垜鎰挎剰鑷繁鍋氶噸瑕佺殑鍐冲畾" + }, + "MAQ0100": { + "title": "鎴戜笉鍠滄闇�瑕佸紑鍙戞柊鐨勮В鍐虫柟妗堢殑宸ヤ綔" + }, + "MAQ0101": { + "title": "鍙湁鍦ㄥ拰鑰佹澘鍏呭垎鍟嗚浜嗚嚜宸辩殑鎯虫硶鍚庯紝鎴戞墠浼氬惎鍔ㄦ煇涓柊涓炬帾" + }, + "MAQ0103": { + "title": "鎴戜細鍔姏鍦ㄦ埅姝㈡棩鏈熷墠瀹屾垚浠诲姟锛屽厬鐜板伐浣滀腑鐨勬壙璇猴紝濡傛湁蹇呰鍙互鐗虹壊涓汉鏃堕棿" + }, + "MAQ0104": { + "title": "鏈夋椂鎴戜細鍙楁儏缁敮閰嶈�屾棤娉曟帶鍒惰嚜宸辩殑搴斿鏂瑰紡" + }, + "MAQ0106": { + "title": "鎴戠粡甯搁�氳繃鍙傚姞鐮旇浼氥�佺綉缁滅爺璁ㄤ細鍜岄槄璇绘潵鏇存柊鑷繁鐨勪笓涓氬拰琛屼笟鐭ヨ瘑" + }, + "MAQ0107": { + "title": "鎴戝浜庣涓�鍗拌薄涓嶅ソ鐨勪汉涓嶅お鏈夎�愬績鍜岀ぜ璨�" + }, + "MAQ0110": { + "title": "浜轰滑缁忓父鏉ユ壘鎴戣璁轰粬浠殑闂鎴栬嫤鎭�" + }, + "MAQ0111": { + "title": "鎴戠粡甯稿府鍔╁埆浜烘洿濂藉湴鐞嗚В鍜屽鐞嗕粬浠嚜宸辩殑璐熼潰鎯呯华" + }, + "MAQ0112": { + "title": "鎴戠殑鍚屼簨浠兘澶熷緢瀹规槗鐪嬪嚭鎴戠殑鎯呯华鐘舵��" + }, + "MAQ0113": { + "title": "鎴戝苟涓嶆槸鎬绘湁鏃堕棿妫�鏌ユ垜鐨勫伐浣滐紝骞剁浉淇′笉妫�鏌ヤ篃闂涓嶅ぇ" + }, + "MAQ0115": { + "title": "褰撴柊鐨勫伐浣滄祦绋嬫垨鎶�鏈寮曞叆鏃讹紝鎴戦�氬父鏄渶鏃╂帴鍙楀苟閲囩敤瀹冪殑浜�" + }, + "MAQ0117": { + "title": "鍗充娇闈复楂樺帇鐨勫伐浣滐紝鎴戜篃浼氫繚鎸佷箰瑙傜殑鏈熸湜" + }, + "MAQ0118": { + "title": "鏈夋椂鎴戜細寰堥毦鐞嗚В鑷繁鐨勬儏缁弽搴�" + }, + "MAQ0119": { + "title": "鍦ㄥ伐浣滀腑锛屾垜缁忓父璁剧珛鏈夋寫鎴樻�х殑鐩爣锛岀劧鍚庡姫鍔涘疄鐜扮洰鏍�" + }, + "MAQ0120": { + "title": "鎴戦潪甯告姷瑙﹂偅浜涗笉寰椾笉鍘诲弬鍔犵殑绀句氦娲诲姩锛岃涓洪偅浼氬緢蹇冪疮" + }, + "MAQ0124": { + "title": "鎴戞�绘槸鐭ラ亾鑷繁鐨勬儏缁劅鍙椾互鍙婂師鍥�" + }, + "MAQ0126": { + "title": "鎴戞洿鍠滄涓嶇揣涓嶆參锛屼粠瀹逛笉杩殑宸ヤ綔鑺傚锛岃�屼笉鍠滄缁忓父闇�瑕佸悓鏃跺畬鎴愬涓换鍔$殑宸ヤ綔鑺傚" + }, + "MAQ0127": { + "title": "褰撴垜鎰忚瘑鍒版湁浜哄湪璇勪及鎴戠殑琛ㄧ幇鏃讹紝鎴戜細鍙樺緱姣斿埆浜烘洿鐒﹁檻" + }, + "MAQ0129": { + "title": "褰撴垜涓嶅緱涓嶆寜鐓т换鍔$殑杞婚噸缂撴�ョ殑娆″簭鏉ュ伐浣滄椂锛屾垜浼氭湁涓�绉嶅彈闄愬埗鐨勬劅瑙�" + }, + "MAQ0130": { + "title": "鎴戞湁鏃朵細鎰熷埌杩囧害鍔崇疮锛屼絾鏄垜濮嬬粓鐩镐俊鑷繁鏈夎冻澶熺殑绮惧姏鏉ュ畬鎴愭墍鏈夊伐浣滀换鍔�" + }, + "MAQ0131": { + "title": "涓庝富鍔ㄦ壙鎷呯浉姣旓紝鎴戞洿鍠滄琚笂绾ц姹傚幓鎵挎媴鏌愰」浠诲姟鎴栧姞鍏ユ垨棰嗗涓�涓」鐩洟闃�" + }, + "MAQ0132": { + "title": "浜轰滑閬囧埌鍥伴毦鏃堕�氬父浼氬埌鎴戣繖閲屾潵瀵绘眰鎯呮劅鏀寔" + }, + "MAQ0133": { + "title": "鎴戝苟涓嶆�绘槸鑳藉璇氬疄鍦伴潰瀵硅嚜宸�" + }, + "MAQ0134": { + "title": "鎴戞瘮杈冩搮闀垮畨鎱版伯涓ф垨鐢熸皵鐨勫悓浜嬶紝骞惰鍏跺喎闈欎笅鏉�" + }, + "MAQ0135": { + "title": "鎴戣鐪熷�惧惉锛屼互姝ゆ潵浜嗚В鍒汉鐨勬劅鍙楀拰闇�姹�" + }, + "MAQ0136": { + "title": "鎴戞湁鏃朵负浜嗚揪鎴愮洰鏍囦細瀵规斂绛栧拰瑙勫畾浣滅伒娲荤殑澶勭悊" + }, + "MAQ0138": { + "title": "鎴戞洿鍠滄鍙娴嬬殑銆佹寜閮ㄥ氨鐝殑鏃ュ父宸ヤ綔" + }, + "MAQ0140": { + "title": "鎴戝枩娆㈤偅绉嶄笂鍙稿鎴戝厖鍒嗘巿鏉冿紝璁╂垜鑳借嚜涓诲喅绛栫殑宸ヤ綔鐜" + }, + "MAQ0141": { + "title": "鎴戞瘮鑷繁璁よ瘑鐨勫ぇ澶氭暟浜洪兘鏇村姞鍧氭寔鏄潪鍘熷垯" + }, + "MAQ0142": { + "title": "鎴戝鍙備笌鍏泭浜嬩笟(蹇楁効娲诲姩)涓嶅お鎰熷叴瓒�" + }, + "MAQ0143": { + "title": "鎴戜笉鍠滄鍒嗘瀽鍋囨兂浼氬彂鐢熺殑鎯呭鎴栫悊璁烘ā鍨�" + }, + "MAQ0144": { + "title": "鍒濇涓庝汉瑙侀潰鏃讹紝鎴戞瘮杈冩矇榛樺瑷�锛屽父甯哥瓑寰呭鏂逛富鍔ㄥ紑鍙d氦璋�" + }, + "MAQ0145": { + "title": "鎴戞湁鏃朵細鍋氬嚭涓�浜涜鎴戜簨鍚庢劅鍒板悗鎮旂殑鍐冲畾" + }, + "MAQ0146": { + "title": "鏈夋椂鍊欙紝鎴戝緢闅剧悊瑙e埆浜虹殑鎯呯华鍙嶅簲" + }, + "MAQ0147": { + "title": "鎴戞洿鍠滄閬靛惊宸茬粡瀹屽杽浜嗙殑宸ヤ綔娴佺▼锛岃�屼笉鏄�冭檻鏂版柟娉�" + }, + "MAQ0149": { + "title": "鍦ㄤ汉闄呬氦寰�涓紝鎴戝父甯稿仛涓嶅埌鎹綅鎬濊��" + }, + "MAQ0150": { + "title": "鎴戣寰楀ソ鍍忓叾浠栦汉姣旀垜鏇磋兘鎶曞叆鏇村绮惧姏鍘诲畬鎴愬伐浣滀换鍔�" + }, + "MAQ0151": { + "title": "鎴戝枩娆㈡暣鐞嗗拰鍙戣〃鍏锋湁浠や汉淇℃湇鐨勭悊鐢辩殑婕旇锛屼互姝ゆ潵璇存湇鍏朵粬浜�" + }, + "MAQ0152": { + "title": "鎴戜笉鍠滄濮嬬粓蹇妭濂忓湴宸ヤ綔" + }, + "MAQ0156": { + "title": "褰撴垜鏈兘瀹炵幇宸ヤ綔涓殑涓�涓噸瑕佺洰鏍囨椂锛屾垜寰堝揩灏变細鎭㈠杩囨潵锛岄噸鏂颁笓娉ㄤ簬濡備綍杈炬垚鐩爣" + }, + "MAQ0157": { + "title": "鎴戜笉鎰挎剰鏀瑰彉鎴戞棦鏈夌殑宸ヤ綔鏂瑰紡" + }, + "MAQ0158": { + "title": "鎴戝枩娆笉鏂彉鍖栵紝鑰屼笉鏄ǔ瀹�" + }, + "MAQ0159": { + "title": "褰撴垜鍦ㄥ伐浣滀腑寰楀埌璐熼潰鍙嶉鏃讹紝鎴戜篃浠庝笉鎬�鐤戣嚜宸卞伐浣滅殑鑳藉姏" + }, + "MAQ0160": { + "title": "鎴戜竴鐩存湁寮虹儓鐨勬剰鎰垮幓棰嗗鍜屾寚鎸ヤ竴缇や汉" + }, + "MAQ0161": { + "title": "闈㈠涓�涓殰纰嶆垨鍥伴毦锛屾垜浼氫笉鍋滃湴鍔姏鍘诲厠鏈嶅畠锛岀洿鍒版垚鍔�" + }, + "MAQ0162": { + "title": "鍦ㄥ伐浣滈」鐩殑璁″垝闃舵锛屾垜鎬绘槸纭璇ラ」鐩殑鍒╃泭鏀稿叧鏂瑰苟纭繚浠栦滑瀵硅椤圭洰鐨勬壙璇�" + }, + "MAQ0163": { + "title": "鏈夋椂鎴戜細鍙楀埌鎯呯华鐨勫奖鍝嶏紝鍋氬嚭涓�浜涜鑷繁鍚庢倲鐨勫喅瀹�" + }, + "MAQ0164": { + "title": "鎴戞�绘槸鐭ラ亾鏄粈涔堝奖鍝嶄簡鎴戠殑鎯呯华" + }, + "MAQ0165": { + "title": "褰撳埆浜哄悜鎴戞姳鎬ㄤ粬浠湪宸ヤ綔涓婃垨鐢熸椿涓鍒扮殑闂鏃讹紝鎴戝父甯告棤娉曟劅鍚岃韩鍙�" + }, + "MAQ0166": { + "title": "瀵逛簬鎴戞潵璇达紝璇存湇鍒汉鏄欢瀹规槗鐨勪簨" + }, + "MAQ0167": { + "title": "鏈夋椂鎴戝彂鐜板伐浣滀笂鐨勬媴蹇ф垨闂浼氬鎴戠殑涓汉鐢熸椿浜х敓璐熼潰褰卞搷" + }, + "MAQ0168": { + "title": "鎴戞浘缁忓湪娌℃湁鐪熺殑鐢熺梾鐨勬儏鍐典笅锛屽悜鍏徃鎴栧鏍¤杩囩梾鍋�" + }, + "MAQ0169": { + "title": "鎴戞湁鏃朵細鎸夌収鑷繁鐨勫叴瓒h�屼笉鏄换鍔$殑杞婚噸缂撴�ユ潵鍐冲畾鑷繁鐨勫伐浣滈『搴�" + }, + "MAQ0170": { + "title": "宸ヤ綔璁╂垜鍏呮弧娲诲姏锛� 浠ヨ嚦浜庢垜鍙戠幇鑷繁甯稿父娌夋蹈鍦ㄥ伐浣滀腑锛岃繃浜嗙潯瑙夌殑鐐归兘涓嶇煡閬�" + }, + "MAQ0171": { + "title": "鎴戣寰楀彉鍖栨槸闈炲父浠や汉鍏村鐨勶紝灏界瀵瑰叾浠栦汉鏉ヨ鍙兘寰堥毦" + }, + "MAQ0172": { + "title": "鎴戞搮闀挎敼鍙樺埆浜虹殑瑙傜偣鍜岀湅娉�" + }, + "MAQ0173": { + "title": "鎴戝苟涓嶆槸鎬昏兘鍋氬埌瑷�琛屼竴鑷�" + }, + "MAQ0174": { + "title": "鏈夋椂鎴戝彂鐜版敼鍙樺埆浜虹殑瑙傜偣鍜岀湅娉曞緢闅�" + }, + "MAQ0175": { + "title": "褰撻亣鍒拌嚜宸变笉鍠滄鎴栨瘮杈冨洶闅剧殑浠诲姟鏃讹紝鎴戦�氬父浼氭嫋寤朵竴娈垫椂闂村啀寮�濮�" + }, + "MAQ0176": { + "title": "鎴戝枩娆笌鍏朵粬鍥㈤槦鎴愬憳杩涜鍗忎綔锛屼互閬垮厤閲嶅鎴栨棤鏁堢殑宸ヤ綔" + }, + "MAQ0178": { + "title": "鎴戞�绘槸鎸夋椂瀹屾垚宸ヤ綔浠诲姟" + }, + "MAQ0179": { + "title": "鎴戠涓�娆¤鍒板埆浜烘椂灏卞彲浠ュ緢瀹规槗鍦拌鎳備粬浠紝浣嗘槸涓嶇绗竴鍗拌薄濡備綍锛屾垜閮戒細淇濇寔绀艰矊鍜屽懆鍒�" + }, + "MAQ0180": { + "title": "鎴戠粡甯告槸绗竴涓嚜鎰块瀵兼垨鍔犲叆椤圭洰鍥㈤槦鐨勪汉" + }, + "MAQ0181": { + "title": "褰撴墜澶存鍦ㄥ仛鐨勯」鐩嚭鐜版剰澶栫殑鍥伴毦鏃讹紝鎴戝彂鐜版湁鏃舵垜浼氬仠涓嬫潵锛岃浆鑰屽仛鍏跺畠椤圭洰" + }, + "MAQ0182": { + "title": "鎴戜細瀹氭湡鍚戞垜鐨勫洟闃熸垚鍛樻彁渚涘弽棣堬紝浠ュ府鍔╀粬浠釜浜哄彂灞曞苟瀹炵幇鑱屼笟鐩爣" + }, + "MAQ0183": { + "title": "鎴戝枩娆㈢珛鍗冲紑濮嬪鐞嗗洶闅剧殑浠诲姟锛岃�屼笉鏄嫋寤�" + }, + "MAQ0184": { + "title": "鍦ㄥ紑浼氭椂鎴戞�绘槸涓撴敞浜庝富棰橈紝涓庝粬浜轰簰鍔紝骞朵笓蹇冨湴鍊惧惉浠栦汉鐨勫彂瑷�" + }, + "MAQ0185": { + "title": "鎴戜笉鍠滄涓鸿嚜宸辨垨鍥㈤槦璁剧珛鎸戞垬鎬х殑鐩爣锛屽苟涓嶅緱涓嶈姳棰濆鐨勬椂闂村幓杈炬垚杩欎簺鐩爣" + }, + "MAQ0187": { + "title": "鐩告瘮涓庝粬浜哄悎浣滐紝鎴戞洿鎰挎剰鑷繁涓�浜哄畬鎴愬伐浣滀换鍔�" + }, + "MAQ0190": { + "title": "姣忔寮�濮嬫柊宸ヤ綔鎴栨柊椤圭洰鏃讹紝鎴戦�氬父浼氬厖婊′俊蹇�" + }, + "MAQ0191": { + "title": "鎴戝彂鐜颁富鍔ㄤ笌鍒氳璇嗙殑浜烘攢璋堟槸瀹规槗鐨勪簨" + }, + "MAQ0192": { + "title": "鎴戞効鎰忚嚜宸卞仛鍐冲畾骞舵帴鍙楃浉搴旂殑鍚庢灉" + }, + "MAQ0193": { + "title": "鎴戝伓灏斿洜涓哄繀椤诲畬鎴愬叾浠栭噸瑕佺殑浜嬫儏鑰屾病鏈夋寜鏃跺畬鎴愬伐浣滀换鍔�" + }, + "MAQ0194": { + "title": "鍙鎰挎剰锛屾垜鍙互杞绘澗鍦颁笌浠讳綍浜轰氦鏈嬪弸" + }, + "MAQ0195": { + "title": "鎴戝枩娆㈠澶嶆潅鏂规鐨勫埄寮婅繘琛屽叏闈㈢殑鍒嗘瀽" + }, + "MAQ0197": { + "title": "鎴戜笉浼氬皾璇曡嚜宸卞幓鎻愬嚭鏂版兂娉曪紝鑰屾槸甯屾湜鎶婃绫讳簨鎯呰缁欏姝ゆ劅鍏磋叮鐨勪汉鍘诲仛" + }, + "MAQ0199": { + "title": "鎴戞�绘槸鑳藉緢蹇兂鍑鸿鏈嶅埆浜虹殑鏈�浣虫柟娉�" + }, + "MAQ0200": { + "title": "鎴戜笉浼氳鎸姌鎴栧け鏈涘鎴戠殑宸ヤ綔琛ㄧ幇浜х敓璐熼潰褰卞搷" + }, + "MAQ0201": { + "title": "褰撴垜鍦ㄥ伐浣滀腑閬亣鎸姌鎴栧け璐ユ椂锛屾垜闇�瑕佽緝闀挎椂闂存墠鑳藉畬鍏ㄦ仮澶嶈嚜淇�" + }, + "MAQ0202": { + "title": "瀵逛簬鎴戜笉鍠滄鐨勪汉锛屾垜鏃犳硶鎬绘槸淇濇寔绀艰矊鍜屾伃鏁�" + }, + "MAQ0203": { + "title": "澶у鏁颁汉鏈�缁堥兘浼氬悓鎰忔垜鐨勮鐐�" + }, + "MAQ0204": { + "title": "濡傛灉鎴戣涓哄垰璁よ瘑鐨勪汉瀵规垜涓嶇ぜ璨岋紝涔熶笉灏婇噸鎴戯紝閭f垜涔熶笉浼氬浠栦滑鏈夌ぜ璨屾垨灏婇噸" + }, + "MAQ0205": { + "title": "鍦ㄨ繘琛屾煇涓」鐩椂锛屾垜浼氬畾鏈熺洃鎺ч」鐩噸瑕佽妭鐐圭殑瀹屾垚杩涘害锛屽苟璺熻繘璐熻矗鍚勪釜鍏蜂綋妯″潡鐨勫洟闃熸垚鍛�" + }, + "MAQ0206": { + "title": "鍦ㄥ拰浠栦汉璋堝垽鐨勬椂鍊欙紝鎴戝伓灏斾細瑙夊緱缂轰箯鑷俊" + }, + "MAQ0207": { + "title": "鏈夋椂鎴戝緢闅捐鏈嶅埆浜烘帴鍙楁垜鐨勫缓璁�" + }, + "MAQ0208": { + "title": "鍗充娇涓嶆儏鎰匡紝鎴戜篃浼氶潪甯镐粩缁嗗湴妫�鏌ュ摢鎬曟渶灏忕殑缁嗚妭" + }, + "MAQ0209": { + "title": "浠栦汉璁や负鎴戣兘鍔涗竴鑸�" + }, + "MAQ0210": { + "title": "鎴戜笉鍠滄鍩硅鍥㈤槦涓殑鏂板憳宸ヤ互纭繚浠栦滑鍋氫簨鏂瑰紡鏄纭殑" + }, + "MAQ0211": { + "title": "濡傛灉闇�瑕佺殑璇濓紝鎴戞�昏兘鎵惧埌鏇村鐨勬椂闂存潵瀹屾垚宸ヤ綔" + }, + "MAQ0212": { + "title": "涓庢垜鐨勫悓浜嬬浉姣旓紝鎴戜笉澶枩娆㈡敹闆嗗拰鍒嗘瀽鏁版嵁銆�" + }, + "MAQ0213": { + "title": "鎴戠‘淇濆厬鐜版墍鏈夊伐浣滀笂鐨勬壙璇猴紝鍥犱负杩欏鎴戣�岃█鏄竴涓弗鑲冦�佺鍦g殑鍘熷垯" + }, + "MAQ0214": { + "title": "鍚屼簨浠粡甯告潵璇锋暀鎴戝簲璇ュ浣曞拰鍒汉娌熼�氭晱鎰熻瘽棰�" + }, + "MAQ0216": { + "title": "灏界鏈夋椂鍙兘涓嶆柟渚匡紝浣嗘垜濮嬬粓閬靛畧鏀跨瓥鍜岃瀹�" + }, + "MAQ0218": { + "title": "瀵逛簬閭d簺鎴戣涓烘瘮杈冨洶闅炬垨鑰呮垚鍔熷彲鑳芥�т笉楂樼殑椤圭洰锛屾垜缁忓父鎷栧欢鏃堕棿锛岃�屼笉绔嬪嵆鍚姩" + }, + "MAQ0219": { + "title": "鎴戜粠鏈洜宸ヤ綔涓婄殑澶辫触鑰岀伆蹇�" + }, + "MAQ0220": { + "title": "褰撴垜鐨勫伐浣滆礋鑽峰鍔犳椂锛屾湁鏃舵垜浼氭劅鍒板け鍘昏�愬績銆佸績鐑︽剰涔�" + }, + "MAQ0221": { + "title": "鎴戝缁堢‘淇濇仾瀹堟垜鎵�鏈夌殑鑱屼笟鎵胯骞朵俊瀹堣瑷�" + }, + "MAQ0223": { + "title": "鎴戞洿鍠滄閭d簺鍙互鍏呭垎鍙戞尌鍒涢�犳�х殑宸ヤ綔" + }, + "MAQ0224": { + "title": "鏈夋椂鍊欏伐浣滀腑鐨勫け鏈涘拰澶辫触浼氫娇鎴戝ソ鍑犲ぉ閮芥棤娉曢泦涓敞鎰忓姏" + }, + "MAQ0225": { + "title": "鎴戜笉鍠滄涓嶆柇鍦拌鏈嶅埆浜烘帴鍙楁垜鐨勫缓璁�" + }, + "MAQ0226": { + "title": "鎴戝湪鍚屼簨涓湁鑳藉渾铻嶅湴鍜岄毦鐩稿鐨勪汉鎵撲氦閬撶殑鍚嶅0" + }, + "MAQ0227": { + "title": "鎴戠粡甯稿鐞嗗緢澶氫笉鍚岀殑椤圭洰銆佹兂娉曟垨鑰呰璁猴紝鎴戝彂鐜拌繖璁╀汉绮剧鎸" + }, + "MAQ0228": { + "title": "褰撲簨鎯呮病鏈夋寜鐓ф垜鐨勯鎯冲彂灞曟椂锛屾垜浼氬彉寰楁伯涓�" + }, + "MAQ0229": { + "title": "鎴戝枩娆㈠弬鍔犲晢涓氱ぞ浜ゆ椿鍔�" + }, + "MAQ0230": { + "title": "鏈夋椂鎴戝浜よ皥瀵硅薄鐨勬枃鍖栬儗鏅�佷範淇椼�佸拰绂佸繉涓嶅鏁忔劅" + }, + "MAQ0231": { + "title": "鍦ㄧぞ浜や簰鍔ㄤ腑锛屾垜閫氬父瀵瑰埆浜虹殑闇�姹備笉澶熸晱鎰�" + }, + "MAQ0232": { + "title": "鎴戝浠栦汉鐨勭涓�鍗拌薄閫氬父鏄噯纭殑" + }, + "MAQ0233": { + "title": "鎴戦�氬父鑳藉湪宸ヤ綔涓帶鍒跺ソ鑷繁鐨勬儏缁�" + }, + "MAQ0234": { + "title": "褰撴垜鍦ㄦ煇涓伐浣滈」鐩腑纰板埌鍥伴毦鏃讹紝鎴戞湁鏃朵細涓璇ラ」鐩紝杞�屽幓鍋氬叾瀹冮」鐩�" + }, + "MAQ0235": { + "title": "鍦ㄦ垜鐨勭敓娲诲拰鑱屼笟涓紝鎴戞�绘槸鐭ラ亾鑷繁鎯宠浠�涔�" + }, + "MAQ0236": { + "title": "鍜屾柊璁よ瘑鐨勪汉锛屾垜浠庝笉浼氭劅鍒版病璇濆彲璇�" + }, + "MAQ0237": { + "title": "鍗充娇鍥㈤槦涓殑澶ч儴鍒嗘垚鍛樿窡鎴戠殑鎰忚/鐪嬫硶鐩稿乏锛屾垜閫氬父涔熶笉鎰挎剰鏀惧純鑷繁鐨勬剰瑙�/鐪嬫硶锛岃窡澶т紮鍎胯揪鎴愪竴鑷淬��" + }, + "MAQ0240": { + "title": "濡傛灉鎴戝拰鍏朵粬浜哄悎浣滀竴椤逛换鍔★紝鎴戜細绛夌潃浠栦滑鏉ユ壘鎴戝崗璋冨伐浣�" + }, + "MAQ0241": { + "title": "鎴戝皬鏃跺�欐浘缁忔嬁杩囨湰涓嶅睘浜庤嚜宸辩殑涓滆タ" + }, + "MAQ0242": { + "title": "鍦ㄥ緱鍒拌�佹澘鐨勬槑纭寚绀哄墠锛屾垜閫氬父涓嶄細閲囧彇琛屽姩" + }, + "MAQ0243": { + "title": "鎴戝父甯稿湪涓嬪睘鐨勫伐浣滄姤鍛婁腑鍙戠幇閿欒" + }, + "MAQ0244": { + "title": "鎴戜粠鏈繚鍙嶈繃浜ら�氳鍒�" + }, + "MAQ0245": { + "title": "鎴戝湪鍥㈤槦涓粡甯告槸鍕囦簬鎸戞垬鍥㈤槦宸ヤ綔璁炬兂鍜屾柟鍚戠殑浜�" + }, + "MAQ0247": { + "title": "鍦ㄥ伐浣滈」鐩紑濮嬩箣鍓嶏紝鎴戜細鍜屽洟闃熸垚鍛樺厛寮�浼氬崗璋冿紝鍋氬ソ椤圭洰璁″垝" + }, + "MAQ0248": { + "title": "鎴戜笉鎬庝箞鑺辨椂闂翠笌涓嬪睘璁ㄨ浠栦滑鐨勮亴涓氬彂灞曠洰鏍囨垨杩涘睍" + }, + "MAQ0249": { + "title": "鎴戜粠涓嶆祻瑙堜笉濂界殑缃戠珯" + }, + "MAQ0250": { + "title": "鎴戞湁鏃朵細闂茶亰鍒汉鐨勫闀块噷鐭�" + }, + "MAQ0251": { + "title": "鏈璇烽�夆�滃悓鎰忊��" + }, + "MAQ0252": { + "title": "鏈璇烽�夆�滈潪甯镐笉鍚屾剰鈥�" + } + } + }, + "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�", + "hint": "杩欐槸淇敼鍚庣殑浜嬩腑鎻愮ず璇�", + "name": "楂樻槑", + "email": "2077506045@qq.com", + "add": { + "company": "TAI娴嬭瘯", + "type": "浜烘牸娴嬭瘯鍖�", + "area": "缇庡浗", + "product": "MAQV2", + "hrEmail": "4c08@qq.com", + "invalid": "2024-01-01 00:00:00", + "memberLang": "English", + "hrReportLang": "English", + "reportTemplate": "MAQV2-Complete-English", + "memberReportLang": "English" + }, + "edit": { + "company": "TAI娴嬭瘯淇敼", + "area": "涓浗", + "type": "浜烘牸娴嬭瘯鍖�", + "product": "MAQV2", + "hrEmail": "2077506045@qq.com", + "invalid": "2025-01-01 09:00:00", + "memberLang": "涓枃", + "hrReportLang": "涓枃", + "reportTemplate": "MAQV2-Complete-Chinese", + "memberReportLang": "涓枃" + }, + "info": { + "position":"鑱屽憳", + "dept": "浜轰簨閮�" + }, + "downloadWaitTime": 20 + }, + "memberDetail": { + "add": { + "name": "鐧界憺杈�", + "dept": "浜轰簨閮�", + "email": "sadfasldf@qq.com", + "phone": "15930084180", + "remark": "杩欐槸涓�涓娉ㄤ俊鎭�" + }, + "edit": { + "name": "楂樻槑", + "dept": "浜嬩笟閮�", + "email": "2077506045@qq.com", + "phone": "15011947664", + "remark": "杩欐槸涓�涓慨鏀瑰悗鐨勫娉ㄤ俊鎭�" + }, + "downloadWaitTime": 20 + }, + "productAccredit": { + "menu": "娴嬭瘯鍖呯鐞�/浜у搧鍖呮巿鏉�", + "username": "ZCH2023", + "product": "CAQ", + "password": "123456", + "code": "ots", + "add": { + "company": "TAI浜у搧鍖呮巿鏉冩祴璇�", + "area": "涓浗", + "type": "鏅哄姏娴嬮獙鍖�", + "product": "CAQ", + "hrEmail": "2077506045@qq.com", + "invalid": "2025-01-01 09:00:00", + "memberLang": "涓枃", + "hrReportLang": "涓枃", + "reportTemplate": "CAQ-CAQ-Chinese", + "memberReportLang": "涓枃" + } + + }, + "groupReport": { } -} \ No newline at end of file +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/export_test_data_elements.py b/elements/export_test_data_elements.py new file mode 100644 index 0000000..d5fe2a7 --- /dev/null +++ b/elements/export_test_data_elements.py @@ -0,0 +1,30 @@ +from selenium.webdriver.common.by import By + + +class ExportTestDataElements: + # 鏌ョ湅璇勬祴鎶ュ憡tab_name + tab_name_report = "鏌ョ湅璇勬祴鎶ュ憡" + + # this-iframe + this_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/report/reportView/evaluationReport')]") + + # 浜у搧鍖卻elect + product_select = (By.XPATH, "//select[@name='productId']") + # 浜у搧鍖卭ption + product_option = (By.XPATH, "//select[@name='productId']/option") + # 娴嬭瘯寮�濮嬫椂闂� + test_begin_time_input = (By.XPATH, "//input[@name='params[beginTime]']") + # 娴嬭瘯缁撴潫鏃堕棿 + test_end_time_input = (By.XPATH, "//input[@name='params[endTime]']") + # this-table澶村閫夋 + table_thead_checkbox = (By.XPATH, "//table[@id='bootstrap-table']/thead/tr//input") + # this-瀵煎嚭娴嬭瘯鏁版嵁鎸夐挳 + export_test_data_btn = (By.XPATH, "//a[@onclick='exportDataReport();']") + # 鎼滅储鎸夐挳 + search_btn = (By.XPATH, "//a[@onclick='$.table.search()']") + # 瀵煎嚭鏁版嵁 + export_data_btn = (By.XPATH, "//a[contains(@onclick,'exportDataReport();')]") + + + # 鍔犺浇妗� + layer_reload = (By.XPATH, "//div[@class='loaderbox']/div") diff --git a/elements/group_report_elements.py b/elements/group_report_elements.py new file mode 100644 index 0000000..612f672 --- /dev/null +++ b/elements/group_report_elements.py @@ -0,0 +1,36 @@ +from selenium.webdriver.common.by import By + + +class GroupReportElements: + # 鏌ョ湅璇勬祴鎶ュ憡tab_name + tab_name_report = "缁勫埆鎶ュ憡" + + # this-iframe + this_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/groupReport')]") + # 鏂板缁勫埆鎶ュ憡iframe + add_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/groupReport/add')]") + + # 鏂板鎸夐挳 + add_btn = (By.XPATH, "//a[@onclick='$.operate.add()']") + # 鍒犻櫎鎸夐挳 + delete_btn = (By.XPATH, "//a[@onclick='$.operate.removeAll()']") + # 绗竴涓粍鍒暟鎹寜閽� + group_data_btn = (By.XPATH, "//a[contains(@onclick,'downGroupData')]") + # 绗竴涓粍鍒姤鍛婃寜閽� + group_report_btn = (By.XPATH, "//a[contains(@onclick,'downReport')]") + # 鎼滅储鎸夐挳 + search_btn = (By.XPATH, "//a[@onclick='$.table.search()']") + + # add-鍚嶇О + add_name_input = (By.XPATH, "//input[@name='name']") + # add-瀵煎叆鏁版嵁 + add_load_file_input = (By.XPATH, "//input[@name='locationFile']") + + # this-浜屾纭鎸夐挳 + layer_confirm_btn = (By.XPATH, "//div/a[text()='纭']") + + # this-table澶村閫夋 + table_thead_checkbox = (By.XPATH, "//table[@id='bootstrap-table']/thead/tr//input") + + # 鍔犺浇妗� + layer_reload = (By.XPATH, "//div[@class='loaderbox']/div") diff --git a/elements/home_elements.py b/elements/home_elements.py index 5202115..8465060 100644 --- a/elements/home_elements.py +++ b/elements/home_elements.py @@ -1,8 +1,17 @@ from selenium.webdriver.common.by import By +elements = [ + {'name': 'menu_ul', 'desc': '渚ц竟鏍忚彍鍗�', 'loc': (By.XPATH, "//ul[@id='side-menu']"), 'action': None} +] + class HomeElements: # 渚ц竟鏍忚彍鍗� menu_ul = (By.XPATH, "//ul[@id='side-menu']") + # 鐢ㄦ埛鑿滃崟3 + user_menu_3 = (By.XPATH, "//ul[@class='nav navbar-top-links navbar-right welcome-message']/li[3]") + # 鐧诲嚭鎸夐挳 + logout_btn = (By.XPATH, "//a[@href='logout']") - + # page鎵�鏈塼ab鐨刟鏍囩 + nav_tabs = (By.XPATH, "//nav[@class='page-tabs menuTabs']/div/a") \ No newline at end of file diff --git a/elements/login_elements.py b/elements/login_elements.py index d19e2bd..6a72e1e 100644 --- a/elements/login_elements.py +++ b/elements/login_elements.py @@ -1,6 +1,13 @@ from selenium.webdriver.common.by import By +# elements = [ +# {'name': 'username_ipt', 'desc': '鐢ㄦ埛鍚嶈緭鍏�', 'loc': (By.XPATH, "//form//input[@name='username']"), 'action': 'send_keys()'}, +# {'name': 'password_ipt', 'desc': '鐧诲綍瀵嗙爜杈撳叆', 'loc': (By.XPATH, "//form//input[@name='password']"), 'action': 'send_keys()'}, +# {'name': 'code_ipt', 'desc': '楠岃瘉鐮佽緭鍏�', 'loc': (By.XPATH, "//form//input[@name='validateCode']"), 'action': 'send_keys()'}, +# {'name': 'login_btn', 'desc': '鐧诲綍鎸夐挳鐐瑰嚮', 'loc': (By.XPATH, "//form//button"), 'action': 'click()'}, +# ] + class LoginElements: # 鐧诲綍鐢ㄦ埛鍚嶈緭鍏ユ username_input = (By.XPATH, "//form//input[@name='username']") @@ -10,4 +17,5 @@ validate_code_input = (By.XPATH, "//form//input[@name='validateCode']") # 鐧诲綍鎸夐挳 login_btn = (By.XPATH, "//form//button") - + # 棣栭〉宸︿笂logo + home_logo = (By.XPATH, "//span[text()='TAI-OTS']") diff --git a/elements/maq_answer_elements.py b/elements/maq_answer_elements.py index e14a358..5f0a9ad 100644 --- a/elements/maq_answer_elements.py +++ b/elements/maq_answer_elements.py @@ -1,9 +1,22 @@ from selenium.webdriver.common.by import By +# elements = [ +# {'name': 'start_btn', 'desc': '寮�濮嬫祴璇曟寜閽�', 'loc': (By.XPATH, "//button"), 'action': 'click()'}, +# {'name': 'options', 'desc': '棰樼洰閫夐」', 'loc': (By.XPATH, "//span[@class='q-item-span-content']"), 'action': None}, +# {'name': 'continue_testing_btn', 'desc': '缁х画娴嬭瘯鎸夐挳', 'loc': (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']"), 'action': None}, +# {'name': 'submit_btn', 'desc': '鎻愪氦鎸夐挳', 'loc': (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/.."), 'action': None}, +# {'name': 'upload_success_title', 'desc': '涓婁紶鎴愬姛鏍囬', +# 'loc': (By.XPATH, "//main/h2[contains(text(), '鏁版嵁宸茬粡鎴愬姛鍦颁笂浼犺嚦鏈嶅姟鍣�')]"), 'wait': 10, 'action': 'text()'}, +# {'name': 'loading_text', 'desc': '鍔犺浇妗嗘枃瀛�', 'loc': (By.XPATH, "//div[@class='el-loading-spinner']/p"), +# 'action': 'text()'}, +# {'name': 'title', 'desc': '鏍囬鏂囧瓧', 'loc': (By.XPATH, "//div[@class='align-center']/span[2]"), 'wait': 10, 'action': 'text()'}, +# ] class MAQAnswerElements: # 寮�濮嬫祴璇曟寜閽� start_btn = (By.XPATH, "//button") + # 棰樼洰 + q_title = (By.XPATH, "//div[@class='q-title']") # 棰樼洰閫夐」 options = (By.XPATH, "//span[@class='q-item-span-content']") # 绂佺敤鐨勯�夐」 @@ -14,10 +27,14 @@ submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..") # 涓婁紶鎴愬姛鏍囬 upload_success_title = (By.XPATH, "//main/h2[contains(text(), '鏁版嵁宸茬粡鎴愬姛鍦颁笂浼犺嚦鏈嶅姟鍣�')]") + # 涓婁紶鎴愬姛鏍囬 + network_exception_title = (By.XPATH, "//main/h2[contains(text(), '缃戠粶寮傚父')]") # 鍔犺浇妗嗘枃瀛� loading_text = (By.XPATH, "//div[@class='el-loading-spinner']/p") + # 浜嬩腑鎻愮ず璇唴瀹� + hint_text = (By.XPATH, "//main[@class='el-main']/div/p[2]/span[3]/font") + # 鏍囬鏂囧瓧 title = (By.XPATH, "//div[@class='align-center']/span[2]") - diff --git a/elements/member_detail_elements.py b/elements/member_detail_elements.py new file mode 100644 index 0000000..f077ecf --- /dev/null +++ b/elements/member_detail_elements.py @@ -0,0 +1,95 @@ +from selenium.webdriver.common.by import By + + +class MemberDetailElements: + # 鍙戦�佺姸鎬乼ab_name + tab_name_send_status = "鏌ョ湅鍙戦�佺姸鎬�" + # 鏌ョ湅鎶ュ憡tab_name + tab_name_report = "鏌ョ湅鍙戦�佺姸鎬�" + # 璇勬祴浜哄憳鍚嶅崟tab_name + tab_name_member_detail = "璇勬祴浜哄憳鍚嶅崟" + # 鏌ョ湅鎶ュ憡閭欢鍙戦�佽褰� + tab_name_report_send_log = "鏌ョ湅鎶ュ憡閭欢鍙戦�佽褰�" + + # 璇勬祴浜哄憳鍚嶅崟iframe + this_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/testMember/memberDetail')]") + # 鏂板iframe + add_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/testMember/add')]") + # 淇敼娴嬭瘯鍖卛frame + edit_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/testMember/edit')]") + # 鏌ョ湅鍙戦�佺姸鎬乮frame + send_status_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/sendtask/condition')]") + # 鏌ョ湅鎶ュ憡iframe + report_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/report/member/reportView')]") + # 鏌ョ湅鎶ュ憡閭欢鍙戦�佽褰昳frame + report_send_log_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/report/hrSendlog')]") + + + # this-鏂板鎸夐挳 + create_btn = (By.XPATH, "//a[@onclick='$.operate.add()']") + # this-淇敼鎸夐挳 + edit_btn = (By.XPATH, "//a[@onclick='$.operate.edit()']") + # this-鍒楄〃閭鍦板潃 + table_email_td = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr/td[4]") + # this-鍒楄〃tr + table_data_tr = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr") + # this-table澶村閫夋 + table_thead_checkbox = (By.XPATH, "//table[@id='bootstrap-table']/thead/tr//input") + # this-table绗竴琛宼r鏌ョ湅鎶ュ憡鎸夐挳 + table_report_btn = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr[1]//a") + # this-鍒犻櫎鎸夐挳 + delete_btn = (By.XPATH, "//a[@onclick='$.operate.removeAll()']") + # this-瀵煎嚭鎸夐挳 + export_btn = (By.XPATH, "//a[@onclick='$.table.exportExcel()']") + # this-鎵归噺瀵煎叆鎸夐挳 + import_btn = (By.XPATH, "//a[@onclick='importExcel()']") + # this-鏂囦欢涓婁紶杈撳叆妗� + import_input = (By.XPATH, "//input[@id='file']") + # this-瀵煎叆鎴愬姛鎻愮ず + import_success_text = (By.XPATH, "//div[contains(text(), '鎭枩')]") + # 纭瀵煎叆鎸夐挳 + import_confirm_btn = (By.XPATH, "//a[contains(text(), '瀵煎叆')]") + # this-鍙戦�侀偖浠舵寜閽� + send_email_btn = (By.XPATH, "//a[@onclick='javascript:sendEmail()']") + # this-鍙戦�佺煭淇℃寜閽� + send_sms_btn = (By.XPATH, "//a[@onclick='javascript:sendSms()']") + # this-瀵煎嚭娴嬭瘯閾炬帴鎸夐挳 + export_url_btn = (By.XPATH, "//a[@onclick='exportExcelTestLink()']") + # this-鏌ョ湅鎶ュ憡閭欢鍙戦�佽褰曟寜閽� + report_send_log_btn = (By.XPATH, "//a[@onclick='opensendHrlog()']") + # this-鏌ョ湅鍙戦�佺姸鎬佹寜閽� + send_status_btn = (By.XPATH, "//a[@onclick='opensendlog()']") + # this-浜屾纭鎸夐挳 + layer_confirm_btn = (By.XPATH, "//div/a[text()='纭']") + + # add-濮撳悕 + add_member_name_input = (By.XPATH, "//input[@name='memberName']") + # add-閮ㄩ棬 + add_member_dept_input = (By.XPATH, "//input[@name='memberDept']") + # add-閭 + add_member_email_input = (By.XPATH, "//textarea[@name='memberEmail']") + # add-鎵嬫満鍙风爜 + add_member_phone_input = (By.XPATH, "//input[@name='memberPhone']") + # add-澶囨敞 + add_remark_input = (By.XPATH, "//input[@name='remark']") + # add-纭鎸夐挳 + add_confirm_btn = (By.XPATH, "//iframe[contains(@src,'/exam/testMember/add')]/../../div[3]/a[1]") + + # edit-纭鎸夐挳 + edit_confirm_btn = (By.XPATH, "//iframe[contains(@src,'/exam/testMember/edit')]/../../div[3]/a[1]") + edit_cancel_btn = (By.XPATH, "//iframe[contains(@src,'/exam/testMember/edit')]/../../div[3]/a[2]") + + # send_status-table鍒楄〃tr + send_status_table_tr = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr") + + # report_send_log-HR閭欢琛ュ彂 + hr_resend_btn = (By.XPATH, "//a[@onclick='reissueEmailNew(1)']") + # report_send_log-娴嬭瘯鑰呴偖浠惰ˉ鍙� + member_resend_btn = (By.XPATH, "//a[@onclick='reissueEmailNew(2)']") + # report_send_log-table绗竴琛岄噸璇曟鏁� + resend_number_text = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr[1]/td[10]") + + # 鎿嶄綔鎴愬姛寮圭獥 + operate_success_layer = (By.XPATH, "//div[text()='鎿嶄綔鎴愬姛']") + # 鍔犺浇妗� + layer_reload = (By.XPATH, "//div[@class='loaderbox']/div") diff --git a/elements/product_accredit__elements.py b/elements/product_accredit__elements.py new file mode 100644 index 0000000..e52bb4c --- /dev/null +++ b/elements/product_accredit__elements.py @@ -0,0 +1,35 @@ +from selenium.webdriver.common.by import By + + +class ProductAccreditElements: + # 鏌ョ湅璇勬祴鎶ュ憡tab_name + tab_name_report = "浜у搧鍖呮巿鏉�" + + # this-iframe + this_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/paper/dis')]") + # 鎺堟潈绐楀彛 + accredit_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/paper/edit/')]") + + # 鐢ㄦ埛鍚嶆 + search_username_input = (By.XPATH, "//input[@name='loginName']") + # 鎼滅储鎸夐挳 + search_btn = (By.XPATH, "//a[@onclick='$.table.search()']") + # this-table澶村閫夋 + table_thead_checkbox = (By.XPATH, "//table[@id='bootstrap-table']/thead/tr//input") + + # 浜у搧鍖呮巿鏉冩寜閽� + product_btn = (By.XPATH, "//a[contains(@onclick,'$.operate.edit')]") + + # 鎺堟潈绐楀彛浜у搧鍖呭垪琛╯elect + accredit_product_select = (By.XPATH, "//select[@name='prodId']") + # 鎺堟潈绐楀彛浜у搧鍖呭垪琛╫ption + accredit_product_option = (By.XPATH, "//select[@name='prodId']/option") + # 鎶ュ憡妯℃澘绗竴涓� + accredit_temp_checkbox = (By.XPATH, "//ui[@id='tempB']/li[1]/span/input") + # 浜у搧鍖呮巿鏉冩寜閽� + accredit_accredit_btn = (By.XPATH, "//a[contains(@onclick,'insertRow()')]") + # this-浜屾纭鎸夐挳 + layer_confirm_btn = (By.XPATH, "//div/a[text()='纭']") + + # 鍔犺浇妗� + layer_reload = (By.XPATH, "//div[@class='loaderbox']/div") diff --git a/elements/report_elements.py b/elements/report_elements.py new file mode 100644 index 0000000..8fb1139 --- /dev/null +++ b/elements/report_elements.py @@ -0,0 +1,27 @@ +from selenium.webdriver.common.by import By + + +class ReportElements: + # 鏌ョ湅璇勬祴鎶ュ憡tab_name + tab_name_report = "鏌ョ湅璇勬祴鎶ュ憡" + + # this-iframe + this_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/report/reportView')]") + + # 閲嶆柊鐢熸垚鎶ュ憡骞跺鍑� + generate_export_btn = (By.XPATH, "//a[@onclick='exportDetailReportExcel();']") + + # 涓嬭浇宸茬敓鎴愭姤鍛� + download_report_btn = (By.XPATH, "//a[@onclick='exportSendedReportExcel();']") + + # 瀵煎嚭鎶ュ憡 + export_btn = (By.XPATH, "//a[contains(@onclick,'testerReport')]") + + # 瀵煎嚭鏁版嵁 + export_data_btn = (By.XPATH, "//a[contains(@onclick,'exportDataReport();')]") + + # this-table澶村閫夋 + table_thead_checkbox = (By.XPATH, "//table[@id='bootstrap-table']/thead/tr//input") + + # 鍔犺浇妗� + layer_reload = (By.XPATH, "//div[@class='loaderbox']/div") diff --git a/elements/share_add_elements.py b/elements/share_add_elements.py index 4dd516f..738d200 100644 --- a/elements/share_add_elements.py +++ b/elements/share_add_elements.py @@ -1,6 +1,40 @@ from selenium.webdriver.common.by import By +# elements = [ +# {'name': 'name_input', 'desc': '濮撳悕鏂囨湰妗�', 'loc': (By.XPATH, "//input[@name='memberName']"), 'action': 'send_keys()'}, +# {'name': 'email_input', 'desc': '閭鏂囨湰妗�', 'loc': (By.XPATH, "//textarea[@name='memberEmail']"), 'action': 'send_keys()'}, +# {'name': 'phone_input', 'desc': '鎵嬫満鍙风爜鏂囨湰妗�', 'loc': (By.XPATH, "//textarea[@name='memberPhone']"), 'action': 'send_keys()'}, +# {'name': 'submit_btn', 'desc': '鎻愪氦鎸夐挳', 'loc': (By.XPATH, "//button"), 'wait': 10, 'action': 'click()'}, +# +# {'name': 'test_url_text', 'desc': '娴嬭瘯閾炬帴', 'loc': (By.XPATH, "//a"), 'action': 'text()'}, +# +# {'name': 'fill_email_input', 'desc': '鍩烘湰淇℃伅-鐢靛瓙閭', 'loc': (By.XPATH, "//form/div[2]//input"), 'action': 'send_keys()'}, +# {'name': 'fill_position_input', 'desc': '鍩烘湰淇℃伅-鑱屼綅', 'loc': (By.XPATH, "//form/div[3]//input"), 'action': 'send_keys()'}, +# {'name': 'fill_dept_input', 'desc': '鍩烘湰淇℃伅-閮ㄩ棬', 'loc': (By.XPATH, "//form/div[4]//input"), 'action': 'send_keys()'}, +# +# {'name': 'ciaq_email_input', 'desc': 'ciaq-閭', 'loc': (By.XPATH, "//form/div[2]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_sex_select', 'desc': 'ciaq-鎬у埆閫夋嫨', 'loc': (By.XPATH, "//form/div[3]//input"), 'optionsLoc': (By.XPATH, "//form/div[3]//ul/li[contains(@class,'el-select-dropdown__item')]/span"), 'action': 'select()'}, +# {'name': 'ciaq_age_input', 'desc': 'ciaq-骞撮緞', 'loc': (By.XPATH, "//form/div[4]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_grade_select', 'desc': 'ciaq-骞寸骇閫夋嫨', 'loc': (By.XPATH, "//form/div[5]//input"), 'optionsLoc': (By.XPATH, "//form/div[5]//ul/li[contains(@class,'el-select-dropdown__item')]/span"), 'action': 'select()'}, +# {'name': 'ciaq_address_input', 'desc': 'ciaq-楂樹腑鍦板潃', 'loc': (By.XPATH, "//form/div[6]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_university_input', 'desc': 'ciaq-澶у鍚嶇О', 'loc': (By.XPATH, "//form/div[7]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_universityAddress_input', 'desc': 'ciaq-澶у鍦板潃', 'loc': (By.XPATH, "//form/div[8]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_college_input', 'desc': 'ciaq-瀛﹂櫌鍚嶇О', 'loc': (By.XPATH, "//form/div[9]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_major_input', 'desc': 'ciaq-涓撲笟鍚嶇О', 'loc': (By.XPATH, "//form/div[10]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_subject_select', 'desc': 'ciaq-涓撲笟绫诲埆閫夋嫨', 'loc': (By.XPATH, "//form/div[11]//input"), +# 'optionsLoc': (By.XPATH, "//form/div[11]//ul/li[contains(@class,'el-select-dropdown__item')]/span"), +# 'action': 'select()'}, +# {'name': 'ciaq_GPA_input', 'desc': 'ciaq-GPA', 'loc': (By.XPATH, "//form/div[12]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_work_input', 'desc': 'ciaq-GPA', 'loc': (By.XPATH, "//form/div[13]//input"), 'action': 'send_keys()'}, +# {'name': 'ciaq_status_select', 'desc': 'ciaq-姹傝亴鐘舵�侀�夋嫨', 'loc': (By.XPATH, "//form/div[14]//input"), +# 'optionsLoc': (By.XPATH, "//form/div[14]//ul/li[contains(@class,'el-select-dropdown__item')]/span"), +# 'action': 'select()'}, +# {'name': 'ciaq_workExperience_select', 'desc': 'ciaq-宸ヤ綔缁忛獙閫夋嫨', 'loc': (By.XPATH, "//form/div[15]//input"), +# 'optionsLoc': (By.XPATH, "//form/div[15]//ul/li[contains(@class,'el-select-dropdown__item')]/span"), +# 'action': 'select()'}, +# ] + class ShareAddElements: # 濮撳悕 name = (By.XPATH, "//input[@name='memberName']") diff --git a/elements/test_package_list_elements.py b/elements/test_package_list_elements.py index a8a6406..5230fe7 100644 --- a/elements/test_package_list_elements.py +++ b/elements/test_package_list_elements.py @@ -1,29 +1,91 @@ from selenium.webdriver.common.by import By +# elements = [ +# {'name': 'this_iframe', 'desc': '娴嬭瘯鍖呭垪琛╥frame', 'loc': (By.XPATH, "//iframe[@src='/exam/test_package']"), 'action': 'iframe()'}, +# {'name': 'add_iframe', '娣诲姞娴嬭瘯鍖卛frame': '渚ц竟鏍忚彍鍗�', 'loc': (By.XPATH, "//iframe[@src='/exam/test_package/add']"), 'action': 'iframe()'}, +# {'name': 'prodTree_iframe', 'desc': '浜у搧鍖呮爲iframe', 'loc': (By.XPATH, "//iframe[contains(@src,'/exam/product/getProdList')]"), 'action': 'iframe()'}, +# {'name': 'share_iframe', 'desc': '鍒嗕韩iframe', 'loc': (By.XPATH, "//iframe[contains(@src,'/exam/test_package/share')]"), 'action': 'iframe()'}, +# +# {'name': 'create_btn', 'desc': '鍒涘缓鎸夐挳', 'loc': (By.XPATH, "//a[@onclick='$.operate.add()']"), 'action': 'click()'}, +# {'name': 'table_packageName_a', 'desc': '娴嬭瘯鍖呭垪琛ㄦ祴璇曞寘鍚嶇Оa鏍囩', 'loc': (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr/td[2]/a"), 'action': None}, +# {'name': 'table_packageName_option', 'desc': '娴嬭瘯鍖呭垪琛ㄦ祴璇曞寘鍚嶇Оa鏍囩', 'loc': (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr/td[2]/a"), 'action': 'option()'}, +# {'name': 'table_package_tr', 'desc': '鍒楄〃tr', 'loc': (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr"), 'action': None}, +# {'name': 'share_1_btn', 'desc': '鐢熸垚鍒嗕韩閾炬帴鎸夐挳', 'loc': (By.XPATH, "//a[@onclick='share(1)']"), 'action': 'click()'}, +# {'name': 'delete_btn', 'desc': '鍒犻櫎鎸夐挳', 'loc': (By.XPATH, "//a[@onclick='$.operate.removeAll()']"), 'action': 'click()'}, +# {'name': 'delete_confirm_btn', 'desc': '鍒犻櫎纭鎸夐挳', 'loc': (By.XPATH, "//div/a[text()='纭']"), 'action': 'click()'}, +# +# {'name': 'add_testPackageName_input', 'desc': 'add-娴嬭瘯鍖呭悕绉拌緭鍏�', 'loc': (By.XPATH, "//input[@name='testName']"), 'action': 'send_keys()'}, +# {'name': 'add_reportCompanyName_input', 'desc': 'add-鎶ュ憡浼佷笟鍚嶇О杈撳叆', 'loc': (By.XPATH, "//input[@name='reportCompanyName']"), 'action': 'send_keys()'}, +# {'name': 'add_testPackageType_select', 'desc': 'add-绫诲瀷閫夋嫨', 'loc': (By.XPATH, "//select[@name='testType']/../span"), 'optionsLoc': (By.XPATH, "//ul[contains(@id,'select2-testType')]/li"), 'action': 'select()'}, +# {'name': 'add_testPackageArea_select', 'desc': 'add-鍖哄煙閫夋嫨', 'loc': (By.XPATH, "//select[@name='testArea']/../span"), 'optionsLoc': (By.XPATH, "//ul[contains(@id,'select2-testArea')]/li"), 'action': 'select()'}, +# {'name': 'add_prodTree_btn', 'desc': 'add-浜у搧鍖呮爲寮瑰嚭鎸夐挳', 'loc': (By.XPATH, "//span[@onclick='selectProdTree()']"), 'action': 'click()'}, +# {'name': 'add_hrEmail_input', 'desc': 'add-HR鎺ユ敹鎶ュ憡閭杈撳叆', 'loc': (By.XPATH, "//input[@name='testEmail']"), 'action': 'send_keys()'}, +# {'name': 'add_invalidTime_input', 'desc': 'add-鏈夋晥鏈熻緭鍏�', 'loc': (By.XPATH, "//input[@name='invalidTime']"), 'action': 'send_keys()'}, +# {'name': 'add_invalidTime_btn', 'desc': 'add-鏈夋晥鏈熺偣鍑�', 'loc': (By.XPATH, "//input[@name='invalidTime']"), 'action': 'click()'}, +# {'name': 'add_templateLangType_select', 'desc': 'add-娴嬭瘯鑰呴個璇烽偖浠跺唴瀹规ā鏉块�夋嫨', 'loc': (By.XPATH, "//select[@name='templateLangType']/../button"), 'optionsLoc': (By.XPATH, "//select[@name='templateLangType']/../div/div/ul/li/a/span[2]"), 'action': 'select()'}, +# {'name': 'add_hrTemplateLangType_select', 'desc': 'add-hr璇█绫诲瀷閫夋嫨', 'loc': (By.XPATH, "//select[@name='hrTemplateLangType']/../button"), 'optionsLoc': (By.XPATH, "//select[@name='hrTemplateLangType']/../div/div/ul/li/a/span[2]"), 'action': 'select()'}, +# {'name': 'add_reportTemplateId_select', 'desc': 'add-鎶ュ憡妯℃澘閫夋嫨', 'loc': (By.XPATH, "//select[@name='reportTemplateId']/../button"), 'optionsLoc': (By.XPATH, "//select[@name='reportTemplateId']/../div/div/ul/li/a/span[2]"), 'action': 'select()'}, +# {'name': 'add_position_input', 'desc': 'add-瑕佽瘎浠风殑宀椾綅杈撳叆', 'loc': (By.XPATH, "//input[@name='position']"), 'action': 'send_keys()'}, +# {'name': 'add_professionalCategory_input', 'desc': 'add-鑱屼笟澶х被杈撳叆', 'loc': (By.XPATH, "//input[@name='professionalCategory']"), 'action': 'send_keys()'}, +# {'name': 'add_superiorPosition_input', 'desc': 'add-涓婄骇宀椾綅杈撳叆', 'loc': (By.XPATH, "//input[@name='superiorPosition']"), 'action': 'send_keys()'}, +# {'name': 'add_autoSendReport_checkbox', 'desc': 'add-娴嬭瘯鑰呮帴鏀舵姤鍛婂閫夋', 'loc': (By.XPATH, "//input[@name='autoSendReport']"), 'action': 'click()'}, +# {'name': 'add_memberTemplateLangType_select', 'desc': 'add-娴嬭瘯鑰呮姤鍛婅瑷�绫诲瀷閫夋嫨', 'loc': (By.XPATH, "//select[@name='memberTemplateLangType']/../button"), 'optionsLoc': (By.XPATH, "//select[@name='memberTemplateLangType']/../div/div/ul/li/a/span[2]"), 'action': 'select()'}, +# {'name': 'add_code_checkbox', 'desc': 'add-浜哄彛瀛︾紪鐮侀�夋', 'loc': (By.XPATH, "//label[@class='check-box']"), 'action': None}, +# {'name': 'add_confirm_btn', 'desc': 'add-纭鎸夐挳', 'loc': (By.XPATH, "//iframe[@src='/exam/test_package/add']/../../div[3]/a[1]"), 'action': 'click()'}, +# +# {'name': 'prodTree_option', 'desc': 'prodTree-浜у搧鍖呴�夐」', 'loc': (By.XPATH, "//div[@id='tree']/li/a/span[2]"), 'action': 'option()'}, +# {'name': 'prodTree_confirm_btn', 'desc': 'proTree-纭鎸夐挳', 'loc': (By.XPATH, "//iframe[contains(@src,'/exam/product/getProdList')]/../../div[3]/a[1]"), 'action': 'click()'}, +# +# {'name': 'share_url_text', 'desc': 'share-url鏂囨湰', 'loc': (By.XPATH, "//input[@id='shareUrl']"), 'action': 'value_js()'}, +# {'name': 'share_cancel_btn', 'desc': 'share-鍏抽棴鎸夐挳', 'loc': (By.XPATH, "//iframe[contains(@src,'/exam/test_package/share')]/../../div[3]/a[2]"), 'action': 'click()'}, +# +# +# ] class TestPackageListElements: + # this-tab + tab_name_this = "娴嬭瘯鍖呭垪琛�" + + # 娴嬭瘯鍖呭垪琛╥frame this_iframe = (By.XPATH, "//iframe[@src='/exam/test_package']") # 娣诲姞娴嬭瘯鍖卛frame add_iframe = (By.XPATH, "//iframe[@src='/exam/test_package/add']") + # 淇敼娴嬭瘯鍖卛frame + edit_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/test_package/edit')]") # 浜у搧鍖呮爲iframe prodTree_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/product/getProdList')]") # 鍒嗕韩iframe share_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/test_package/share')]") - + # 浜嬩腑鎻愮ず璇璱frame + hint_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/test_package/editHint')]") + # 鏌ョ湅鎶ュ憡iframe + report_iframe = (By.XPATH, "//iframe[contains(@src,'/exam/report/reportView')]") # this-鍒涘缓鎸夐挳 create_btn = (By.XPATH, "//a[@onclick='$.operate.add()']") + # this-淇敼鎸夐挳 + edit_btn = (By.XPATH, "//a[@onclick='$.operate.edit()']") # this-娴嬭瘯鍖呭垪琛ㄦ祴璇曞寘鍚嶇Оa鏍囩 table_packageName_a = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr/td[2]/a") # this-鍒楄〃tr table_package_tr = (By.XPATH, "//table[@id='bootstrap-table']/tbody/tr") + # this-table澶村閫夋 + table_thead_checkbox = (By.XPATH, "//table[@id='bootstrap-table']/thead/tr//input") # this-鐢熸垚鍒嗕韩閾炬帴鎸夐挳 share_1_btn = (By.XPATH, "//a[@onclick='share(1)']") + # this-鍥炴敹娴嬭瘯鍖呮寜閽� + recover_btn = (By.XPATH, "//a[@onclick='javascript:recover()']") + # this-浜嬩腑鎻愮ず璇寜閽� + hint_btn = (By.XPATH, "//a[@onclick='editHint()']") + # this-鎶ュ憡鎸夐挳 + report_btn = (By.XPATH, "//a[@onclick='javascript:testReport()']") # this-鍒犻櫎鎸夐挳 delete_btn = (By.XPATH, "//a[@onclick='$.operate.removeAll()']") # this-鍒犻櫎纭鎸夐挳 delete_confirm_btn = (By.XPATH, "//div/a[text()='纭']") + # this-浜屾纭鎸夐挳 + layer_confirm_btn = (By.XPATH, "//div/a[text()='纭']") # add-娴嬭瘯鍖呭悕绉� add_testPackageName_input = (By.XPATH, "//input[@name='testName']") @@ -31,12 +93,18 @@ add_reportCompanyName_input = (By.XPATH, "//input[@name='reportCompanyName']") # add-绫诲瀷 add_testPackageType_select = (By.XPATH, "//select[@name='testType']/../span") + # add-绫诲瀷鏂囨湰 + add_testPackageType_text = (By.XPATH, "//select[@name='testType']/../span/span/span/span[1]") # add-绫诲瀷閫夐」 add_testPackageType_option = (By.XPATH, "//ul[contains(@id,'select2-testType')]/li") # add-鍖哄煙 add_testPackageArea_select = (By.XPATH, "//select[@name='testArea']/../span") + # add-鍖哄煙鏂囨湰 + add_testPackageArea_text = (By.XPATH, "//select[@name='testArea']/../span/span/span/span[1]") # add-鍖哄煙閫夐」 add_testPackageArea_option = (By.XPATH, "//ul[contains(@id,'select2-testArea')]/li") + # add-浜у搧鍖呰緭鍏ユ + add_prodTree_input = (By.XPATH, "//input[@name='prodName']") # add-浜у搧鍖呮爲寮瑰嚭鎸夐挳 add_prodTree_btn = (By.XPATH, "//span[@onclick='selectProdTree()']") # add-HR鎺ユ敹鎶ュ憡閭 @@ -47,30 +115,43 @@ add_templateLangType_select = (By.XPATH, "//select[@name='templateLangType']/../button") # add-娴嬭瘯鑰呴個璇烽偖浠跺唴瀹规ā鏉块�夐」 add_templateLangType_option = (By.XPATH, "//select[@name='templateLangType']/../div/div/ul/li/a/span[2]") + # add-娴嬭瘯鑰呴個璇烽偖浠跺唴瀹� + add_templateLangType_text = (By.XPATH, "//textarea[@name='template']") # add-HR璇█绫诲瀷 add_hrTemplateLangType_select = (By.XPATH, "//select[@name='hrTemplateLangType']/../button") # add-HR璇█绫诲瀷閫夐」 add_hrTemplateLangType_option = (By.XPATH, "//select[@name='hrTemplateLangType']/../div/div/ul/li/a/span[2]") + # add-娴嬭瘯鑰呴個璇烽偖浠跺唴瀹� + add_hrTemplateLangType_text = (By.XPATH, "//textarea[@name='hrTemplate']") # add-鎶ュ憡妯℃澘 add_reportTemplateId_select = (By.XPATH, "//select[@name='reportTemplateId']/../button") + # add-鎶ュ憡妯℃澘閫夐」 + add_reportTemplateId_option = (By.XPATH, "//select[@name='reportTemplateId']/../div/div/ul/li/a/span[2]") + # add-鎶ュ憡妯℃澘鍐呭 + add_reportTemplateId_text = (By.XPATH, "//select[@name='reportTemplateId']/../button/div/div/div") # add-瑕佽瘎浠风殑宀椾綅 add_position_input = (By.XPATH, "//input[@name='position']") # add-鑱屼笟澶х被 add_professionalCategory_input = (By.XPATH, "//input[@name='professionalCategory']") # add-涓婄骇宀椾綅 add_superiorPosition_input = (By.XPATH, "//input[@name='superiorPosition']") - # add-鎶ュ憡妯℃澘閫夐」 - add_reportTemplateId_option = (By.XPATH, "//select[@name='reportTemplateId']/../div/div/ul/li/a/span[2]") # add-娴嬭瘯鑰呮帴鏀舵姤鍛� add_autoSendReport_checkbox = (By.XPATH, "//input[@name='autoSendReport']") # add-娴嬭瘯鑰呮姤鍛婅瑷�绫诲瀷 - add_memberTemplateLangType_select = (By.XPATH, "//select[@name='memberTemplateLangType']/../button") + add_memberReportLangType_select = (By.XPATH, "//select[@name='memberTemplateLangType']/../button") # add-娴嬭瘯鑰呮姤鍛婅瑷�绫诲瀷閫夐」 - add_memberTemplateLangType_option = (By.XPATH, "//select[@name='memberTemplateLangType']/../div/div/ul/li/a/span[2]") + add_memberReportLangType_option = (By.XPATH, "//select[@name='memberTemplateLangType']/../div/div/ul/li/a/span[2]") + # add-娴嬭瘯鑰呮姤鍛婂唴瀹� + add_memberReportLangType_text = (By.XPATH, "//textarea[@name='memberTemplate']") # 浜哄彛瀛︾紪鐮侀�夐」 add_code_checkbox = (By.XPATH, "//label[@class='check-box']") # add-纭鎸夐挳 add_confirm_btn = (By.XPATH, "//iframe[@src='/exam/test_package/add']/../../div[3]/a[1]") + + # edit-纭鎸夐挳 + edit_confirm_btn = (By.XPATH, "//iframe[contains(@src,'/exam/test_package/edit')]/../../div[3]/a[1]") + edit_cancel_btn = (By.XPATH, "//iframe[contains(@src,'/exam/test_package/edit')]/../../div[3]/a[2]") + # prodTree-浜у搧鍖呴�夐」 prodTree_option = (By.XPATH, "//div[@id='tree']/li/a/span[2]") @@ -81,3 +162,14 @@ share_url_input = (By.XPATH, "//input[@id='shareUrl']") # share-鍏抽棴鎸夐挳 share_cancel_btn = (By.XPATH, "//iframe[contains(@src,'/exam/test_package/share')]/../../div[3]/a[2]") + + # hint-绗洓涓寚瀵艰鏂囨湰鍩� + hint_textarea = (By.XPATH, "//div[@class='ibox float-e-margins']/div/div[10]//textarea") + # hint-妯℃�佺獥鍙f枃鏈爣绛� + hint_modal_span = (By.XPATH, "//div[@id='modalWindow']//div[@class='note-editable']/p[3]/font/span") + # hint-妯℃�佺獥鍙d繚瀛樻寜閽� + hint_modal_save_btn = (By.XPATH, "//div[@id='modalWindow']//div[@class='modal-footer']/button[@id='save']") + + + # 鎿嶄綔鎴愬姛寮圭獥 + operate_success_layer = (By.XPATH, "//div[text()='鎿嶄綔鎴愬姛']") diff --git a/main.py b/main.py index fa7772c..9de8852 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,7 @@ def run_testcases(): - pytest.main(['-vs', '--html=report/report.html', 'testcase']) + pytest.main(['-vs', '--html=report/report.html', 'testcase/test_2package_list.py']) if __name__ == '__main__': diff --git a/po/caq_answer_page.py b/po/caq_answer_page.py index 73dcc4b..2816cf5 100644 --- a/po/caq_answer_page.py +++ b/po/caq_answer_page.py @@ -1,7 +1,7 @@ import random from base.base_page import BasePage -from elements.caq_answer_elements import CAQAnswerElements as Answer +from elements.caq_answer_elements import CAQAnswerElements from selenium.common.exceptions import * import time @@ -13,52 +13,56 @@ """ loading_count = 0 + es = CAQAnswerElements + def answer(self): + # 鐐瑰嚮寮�濮嬫寜閽� + self.click(self.es.start_btn, timeout=10) # 鏆傚仠3绉� time.sleep(3) i = 0 while i < 27: if i == 0: - self.click_wait(Answer.continue_testing_btn) + self.click(self.es.continue_testing_btn, timeout=10) elif i < 4: # 鑾峰彇鍒版墍鏈夐�夐」 - options_1 = self.elements_is_visibility(Answer.options_1) + options_1 = self.elements_is_visibility(self.es.options_1) number = random.randint(0, 4) self.click_element_js(options_1[number]) - options_2 = self.elements_is_visibility(Answer.options_2) + options_2 = self.elements_is_visibility(self.es.options_2) self.click_element_js(options_2[number]) - options_3 = self.elements_is_visibility(Answer.options_3) + options_3 = self.elements_is_visibility(self.es.options_3) self.click_element_js(options_3[number]) - options_4 = self.elements_is_visibility(Answer.options_4) + options_4 = self.elements_is_visibility(self.es.options_4) self.click_element_js(options_4[number]) - options_5 = self.elements_is_visibility(Answer.options_5) + options_5 = self.elements_is_visibility(self.es.options_5) self.click_element_js(options_5[number]) - self.click_js(Answer.next_btn) + self.click_js(self.es.next_btn) if i == 4: - self.click_wait(Answer.continue_testing_btn) + self.click(self.es.continue_testing_btn, timeout=10) # # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse # if not self.title_is_display(): # return False if 4 < i < 26: - options_6 = self.elements_is_visibility(Answer.options_6) + options_6 = self.elements_is_visibility(self.es.options_6) number = random.randint(0, 4) self.click_element_js(options_6[number]) if i == 23: - self.click_js(Answer.submit_btn) + self.click_js(self.es.submit_btn) # 鏁版嵁鏄惁涓婁紶瀹屾垚 time.sleep(15) if self.upload_is_success(): return True else: - self.click_js(Answer.next_btn) + self.click_js(self.es.next_btn) i += 1 def upload_is_success(self): @@ -69,7 +73,7 @@ i = 0 while i < 60: try: - self.get_element_wait(Answer.upload_success_title) + self.get_element_wait(self.es.upload_success_title) return True except TimeoutException: i += 1 @@ -82,7 +86,7 @@ :return: """ try: - button = self.get_element(Answer.submit_btn) + button = self.get_ele(self.es.submit_btn) if button.is_enabled(): return True else: @@ -97,7 +101,7 @@ """ try: # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳 - button = self.get_element(Answer.continue_testing_btn) + button = self.get_ele(self.es.continue_testing_btn) if button.is_enabled(): return True else: @@ -112,7 +116,7 @@ """ try: # 鑾峰彇鏍囬 - self.get_element_wait(Answer.title) + self.get_element_wait(self.es.title) return True except TimeoutException: return False @@ -125,7 +129,7 @@ i = 0 while i < 10: try: - self.get_element(Answer.loading_text) + self.get_element(self.es.loading_text) i += 1 time.sleep(1) except: @@ -138,4 +142,4 @@ 寮�濮嬫祴璇曟寜閽� :return: """ - self.click_wait(Answer.start_btn) + self.click_wait(self.es.start_btn) diff --git a/po/export_test_data_page.py b/po/export_test_data_page.py new file mode 100644 index 0000000..d78b066 --- /dev/null +++ b/po/export_test_data_page.py @@ -0,0 +1,38 @@ +import time + +from base.base_page import BasePage +from elements.export_test_data_elements import ExportTestDataElements +from selenium.common.exceptions import TimeoutException, NoSuchElementException + + +class ExportTestDataPage(BasePage): + """ + 瀵煎嚭娴嬭瘯鏁版嵁椤甸潰 + """ + # 椤甸潰鍏冪礌 + es = ExportTestDataElements + + def __init__(self, driver): + super().__init__(driver) + try: + self.driver.switch_to.default_content() + self.switch_iframe(self.es.this_iframe) + except: + pass + + def wait_layer_reload_hide(self, timeout=600): + """ + 绛夊緟鍔犺浇妗嗘秷澶� + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + for i in range(1, 600): + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + self.get_ele(self.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + + diff --git a/po/group_report_page.py b/po/group_report_page.py new file mode 100644 index 0000000..9847a36 --- /dev/null +++ b/po/group_report_page.py @@ -0,0 +1,27 @@ +from base.base_page import BasePage +from elements.group_report_elements import GroupReportElements +from selenium.common.exceptions import TimeoutException + + +class GroupReportPage(BasePage): + """ + 缁勫埆鎶ュ憡椤甸潰 + """ + # 椤甸潰鍏冪礌 + es = GroupReportElements + + def __init__(self, driver): + super().__init__(driver) + try: + self.driver.switch_to.default_content() + self.switch_iframe(self.es.this_iframe) + except: + pass + + + + + + + + diff --git a/po/home_page.py b/po/home_page.py index 2802d29..74690e9 100644 --- a/po/home_page.py +++ b/po/home_page.py @@ -1,5 +1,6 @@ from base.base_page import BasePage from selenium.webdriver.common.by import By +from elements.home_elements import HomeElements import time @@ -7,6 +8,20 @@ """ 涓婚〉闈晶杈规爮鑿滃崟涓巘ab鏍忔搷浣滈〉闈� """ + + es = HomeElements + + def __init__(self, driver): + super().__init__(driver) + self.driver = driver + # 鍒囨崲鍒版渶椤跺眰鐨勬枃妗� + driver.switch_to.default_content() + + def logout(self): + # 鐐瑰嚮绗笁涓敤鎴疯彍鍗� + self.click(self.es.user_menu_3) + # 鐐瑰嚮鐧诲嚭 + self.click(self.es.logout_btn) def menu_select(self, menu_text, is_first=True): """ @@ -29,19 +44,34 @@ if is_first: # 鑿滃崟鍏冪礌瀹氫綅 menu_loc = (By.XPATH, "//ul[@id='side-menu']//span[text()='" + menu + "']") - # 鑾峰彇鑿滃崟鍏冪礌 - menu_element = self.get_element(menu_loc) - # 鐐瑰嚮鑿滃崟 - menu_element.click() - time.sleep(1) + # 鑿滃崟涓媢l瀹氫綅 + menu_ul_loc = (By.XPATH, "//ul[@id='side-menu']//span[text()='" + menu + "']/../../ul") + # 鑾峰彇鍒皍l鍏冪礌 + ul = self.get_ele(menu_ul_loc) + # 鑾峰彇ul鐨刢lass灞炴�� + ul_class = ul.get_attribute("class") + # 鍒ゆ柇class鏄惁鍖呭惈in瀛楃涓� + if "in" not in ul_class: + # 涓嶅寘鍚垯涓烘湭鎵撳紑鐘舵�侊紝鍙互鐐瑰嚮 + self.click(menu_loc, timeout=10) else: # 鑿滃崟鍏冪礌瀹氫綅 menu_loc = (By.XPATH, "//ul[@id='side-menu']//a[text()='" + menu + "']") - # 鑾峰彇鑿滃崟鍏冪礌 - menu_element = self.get_element(menu_loc) - # 鐐瑰嚮鑿滃崟 - menu_element.click() - time.sleep(1) + # 鍒ゆ柇menu_text鏄惁杩樺寘鍚�/ + if "/" in menu_text: + # 鍖呭惈鍒欒〃绀鸿繕鏈変笅绾ц彍鍗曪紝鍒ゆ柇涓嬬骇鑿滃崟鏄惁涓哄睍寮�鐘舵�� + # 鑿滃崟涓媢l瀹氫綅 + menu_ul_loc = (By.XPATH, "//ul[@id='side-menu']//a[text()='" + menu + "']/../ul") + # 鑾峰彇鍒皍l鍏冪礌 + ul = self.get_ele(menu_ul_loc) + # 鑾峰彇ul鐨刢lass灞炴�� + ul_class = ul.get_attribute("class") + # 鍒ゆ柇class鏄惁鍖呭惈in瀛楃涓� + if "in" not in ul_class: + # 涓嶅寘鍚垯涓烘湭鎵撳紑鐘舵�侊紝鍙互鐐瑰嚮 + self.click(menu_loc, timeout=10) + else: + self.click(menu_loc, timeout=10) if "/" in menu_text: # 鑾峰彇/绗竴娆″嚭鐜扮殑浣嶇疆 @@ -50,3 +80,14 @@ menu_text = menu_text[index + 1: len(menu_text)] # 閫掑綊璋冪敤 self.menu_select(menu_text, False) + + + + def close_tab(self, tab_name): + """鍏抽棴椤甸潰tab""" + # 鑾峰彇鎵�鏈塼ab + tabs = self.get_eles(self.es.nav_tabs) + for tab in tabs: + if tab.text == tab_name: + # 鐐瑰嚮鍏抽棴鍥炬爣 + tab.find_element(By.XPATH, "i").click() diff --git a/po/login_page.py b/po/login_page.py index 08b28b2..14cd9cc 100644 --- a/po/login_page.py +++ b/po/login_page.py @@ -1,65 +1,43 @@ from base.base_page import BasePage -from elements.login_elements import LoginElements as Login +from elements.login_elements import LoginElements +from selenium.common.exceptions import TimeoutException class LoginPage(BasePage): """ 鐧诲綍椤甸潰 """ + # 椤甸潰鍏冪礌 + es = LoginElements - def username_input(self, username): - """ - 濉啓鐢ㄦ埛鍚� - :param username: 鐢ㄦ埛鍚� - :return: - """ - self.send_text(username, Login.username_input) + def __init__(self, driver): + super().__init__(driver) + self.driver = driver + # 鍒囨崲鍒版渶椤跺眰鏂囨。 + driver.switch_to.default_content() - def password_input(self, password): - """ - 濉啓瀵嗙爜 - :param password: 瀵嗙爜 - :return: - """ - self.send_text(password, Login.password_input) + def login(self, username, password, code): + # 杈撳叆鐢ㄦ埛鍚� + self.fill(self.es.username_input, username) + # 杈撳叆瀵嗙爜 + self.fill(self.es.password_input, password) + # 杈撳叆楠岃瘉鐮� + self.fill(self.es.validate_code_input, code) + # 鐐瑰嚮鐧诲綍鎸夐挳 + self.click(self.es.login_btn) - def validate_code_input(self, validate_code): - """ - 濉啓楠岃瘉鐮� - :param validate_code: 楠岃瘉鐮� - :return: - """ - self.send_text(validate_code, Login.validate_code_input) - - def login_btn(self): - """ - 鐐瑰嚮鐧诲綍鎸夐挳 - :return: - """ - self.click(Login.login_btn) - - def login(self, username, password, validate_code): - """ - 鐧诲綍 - :param username: 鐢ㄦ埛鍚� - :param password: 瀵嗙爜 - :param validate_code: 楠岃瘉鐮� - :return: - """ - self.username_input(username) - self.password_input(password) - self.validate_code_input(validate_code) - self.login_btn() - - def is_login_success(self): + def login_assert(self): """ 鍒ゆ柇鏄惁鐧诲綍鎴愬姛 :return: bool """ - current_url = self.driver.current_url - if "index" in self.driver.current_url: - return True - else: + try: + ele = self.get_ele(self.es.home_logo, timeout=10) + if ele.text == "TAI-OTS": + return True + except TimeoutException: return False + + diff --git a/po/maq_answer_page.py b/po/maq_answer_page.py index d95deb6..fbf2696 100644 --- a/po/maq_answer_page.py +++ b/po/maq_answer_page.py @@ -1,7 +1,7 @@ import random from base.base_page import BasePage -from elements.maq_answer_elements import MAQAnswerElements as Answer +from elements.maq_answer_elements import MAQAnswerElements from selenium.common.exceptions import * import time @@ -11,15 +11,30 @@ """ 绛旈椤甸潰 """ + loading_count = 0 - def answer(self): + se = MAQAnswerElements + + def answer(self, hint=None, question: dict = None): + flag = False # 鏆傚仠3绉� time.sleep(3) + # 鐐瑰嚮寮�濮嬬瓟棰� + self.click(self.se.start_btn) + question_title = None while True: + # time.sleep(0.5) # 缁х画娴嬭瘯鎸夐挳鍑虹幇鍒欑偣鍑� if self.continue_btn_is_display(): - self.click(Answer.continue_testing_btn) + # 鍒ゆ柇hint鏄惁鏈夊唴瀹� + if hint: + # 鑾峰彇鎻愮ず璇唴瀹� + hint_text = self.get_ele(self.se.hint_text).text + # 鍒ゆ柇鎻愮ず璇唴瀹规槸鍚﹀寘鍚紶鍏ョ殑hint + if hint in hint_text: + flag = True + self.click(self.se.continue_testing_btn) # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse if not self.title_is_display(): @@ -27,22 +42,41 @@ try: # 鑾峰彇鍒版墍鏈夐�夐」 - options = self.get_elements(Answer.options) + options = self.get_eles(self.se.options) if len(options) < 6: continue number = random.randint(0, 5) if options[number].is_enabled(): + # 鑾峰彇鍒伴鐩� + # q_title = self.get_ele(self.se.q_title).text + # q_title涓巕uestion_title涓嶇浉鍚屽垯鍐欏叆question涓� + # 閬嶅巻瀛楀吀 + # if question: + # for key in question.keys(): + # q_title = self.get_ele(self.se.q_title).text + # if question[key]["title"] in q_title and "answer" not in question[key]: + # question[key]["answer"] = number + 1 + # question_title = q_title + # break options[number].click() except: pass # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑� if self.submit_btn_is_display(): - self.click(Answer.submit_btn) + self.click(self.se.submit_btn) # 鏁版嵁鏄惁涓婁紶瀹屾垚 time.sleep(15) if self.upload_is_success(): + if hint: + return flag return True + # 鏄惁缃戠粶寮傚父 + try: + self.get_ele(self.se.network_exception_title) + return "缃戠粶寮傚父" + except NoSuchElementException: + pass return False def upload_is_success(self): @@ -53,7 +87,7 @@ i = 0 while i < 60: try: - self.get_element_wait(Answer.upload_success_title) + self.get_ele(self.se.upload_success_title, timeout=5) return True except TimeoutException: i += 1 @@ -66,7 +100,7 @@ :return: """ try: - button = self.get_element(Answer.submit_btn) + button = self.get_ele(self.se.submit_btn) if button.is_enabled(): return True else: @@ -81,7 +115,7 @@ """ try: # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳 - button = self.get_element(Answer.continue_testing_btn) + button = self.get_ele(self.se.continue_testing_btn) if button.is_enabled(): return True else: @@ -96,30 +130,23 @@ """ try: # 鑾峰彇鏍囬 - self.get_element_wait(Answer.title) + self.get_ele(self.se.title, timeout=10) return True except TimeoutException: return False - def loadin_text(self): - """ - 鍒ゆ柇鍔犺浇妗嗗姞杞斤紝濡傛灉鍔犺浇瓒呰繃10绉掔洿鎺ラ��鍑哄綋鍓嶆祴璇� - :return: - """ - i = 0 - while i < 10: - try: - self.get_element(Answer.loading_text) - i += 1 - time.sleep(1) - except: - return False - else: - return True - - def start_btn(self): - """ - 寮�濮嬫祴璇曟寜閽� - :return: - """ - self.click_wait(Answer.start_btn) + # def loadin_text(self): + # """ + # 鍒ゆ柇鍔犺浇妗嗗姞杞斤紝濡傛灉鍔犺浇瓒呰繃10绉掔洿鎺ラ��鍑哄綋鍓嶆祴璇� + # :return: + # """ + # i = 0 + # while i < 10: + # try: + # self.oper_elem("") + # i += 1 + # time.sleep(1) + # except: + # return False + # else: + # return True diff --git a/po/member_detail_page.py b/po/member_detail_page.py new file mode 100644 index 0000000..49a6dad --- /dev/null +++ b/po/member_detail_page.py @@ -0,0 +1,164 @@ +from base.base_page import BasePage +from selenium.webdriver.common.by import By +from elements.member_detail_elements import MemberDetailElements +from datetime import datetime +import time + + +class MemberDetailPage(BasePage): + """ + 娴嬭瘯鍖呭垪琛ㄩ〉闈� + """ + + es = MemberDetailElements + + def __init__(self, driver): + """鍒濆鍖栨椂灏唅frame鍒囨崲鍒板綋鍓嶉〉闈�""" + super().__init__(driver) + try: + self.driver.switch_to.default_content() + self.switch_iframe(self.es.this_iframe) + except: + pass + + def add_member(self, data: dict): + """ + 鏂板娴嬭瘎浜哄憳 + :param data: + :return: + """ + # 鐐瑰嚮鏂板鎸夐挳 + self.click(self.es.create_btn) + # 鍒囨崲鍒癮dd鐨刬frame + self.switch_iframe(self.es.add_iframe) + # 濉啓淇℃伅 + self.fill(self.es.add_member_name_input, data["name"]) + self.fill(self.es.add_member_dept_input, data["dept"]) + self.fill(self.es.add_member_email_input, data["email"]) + self.fill(self.es.add_member_phone_input, data["phone"]) + self.fill(self.es.add_remark_input, data["remark"]) + # 鍥炲埌涓婁竴灞俰frame + self.switch_parent_iframe() + # 鐐瑰嚮纭畾鎸夐挳 + self.click(self.es.add_confirm_btn) + return data["email"] + + def edit_member(self, memberEmail, data: dict): + """ + 淇敼娴嬭瘎浜哄憳 + :param memberEmail: + :param data: + :return: + """ + # 鍕鹃�夋祴璇勪汉鍛� + self.select_email_checkbox(memberEmail) + # 鐐瑰嚮淇敼鎸夐挳 + self.click(self.es.edit_btn) + # 鍒囨崲鍒癳dit鐨刬frame + self.switch_iframe(self.es.edit_iframe) + # 濉啓淇℃伅 + self.fill(self.es.add_member_name_input, data["name"]) + self.fill(self.es.add_member_dept_input, data["dept"]) + self.fill(self.es.add_member_email_input, data["email"]) + self.fill(self.es.add_member_phone_input, data["phone"]) + self.fill(self.es.add_remark_input, data["remark"]) + # 鍥炲埌涓婁竴灞俰frame + self.switch_parent_iframe() + # 鐐瑰嚮纭畾鎸夐挳 + self.click(self.es.edit_confirm_btn) + return data["email"] + + def is_edit_success(self, memberEmail, data: dict): + """鍒ゆ柇鏄惁淇敼鎴愬姛""" + # 鍕鹃�夋祴璇勪汉鍛� + self.select_email_checkbox(memberEmail) + # 鐐瑰嚮淇敼鎸夐挳 + self.click(self.es.edit_btn) + # 鍒囨崲鍒癳dit鐨刬frame + self.switch_iframe(self.es.edit_iframe) + # 鍒ゆ柇淇℃伅 + flag = self.equals(self.es.add_member_name_input, data["name"]) + if not flag: + return flag + flag = self.equals(self.es.add_member_dept_input, data["dept"]) + if not flag: + return flag + flag = self.equals(self.es.add_member_email_input, data["email"]) + if not flag: + return flag + flag = self.equals(self.es.add_member_phone_input, data["phone"]) + if not flag: + return flag + flag = self.equals(self.es.add_remark_input, data["remark"]) + if not flag: + return flag + # 鍥炲埌涓婁竴灞俰frame + self.switch_parent_iframe() + # 鐐瑰嚮鍏抽棴鎸夐挳 + self.click(self.es.edit_cancel_btn) + return True + + def is_create_success(self, memberEmail): + """鍒ゆ柇鏄惁鍒涘缓鎴愬姛""" + emails = self.get_eles(self.es.table_email_td) + for email in emails: + if email.text == memberEmail: + return True + return False + + def is_remote_success(self): + """鍒ゆ柇鏄惁鍒犻櫎鎴愬姛""" + + def select_email_checkbox(self, memberEmail): + """ + 閫変腑璇勬祴浜哄憳 + :param memberEmail: + :return: + """ + # 鑾峰彇鍒皌able鐨勬墍鏈塼r + table_trs = self.get_eles(self.es.table_data_tr) + for tr in table_trs: + # 鍒ゆ柇澶嶉�夋鏄惁涓洪�変腑鐘舵�� + tr_class = tr.get_attribute("class") + if tr_class == "selected": + # 宸茬偣鍑昏繘琛屼笅涓�娆″惊鐜� + continue + # 閭鍦╰r涓殑瀹氫綅 + email_loc = (By.XPATH, "td[4]") + # 鑾峰彇tr涓殑娴嬭瘯鍖呭悕绉� + tr_email = tr.find_element(*email_loc).text + if tr_email == memberEmail: + # 澶嶉�夋鍦╰r涓殑瀹氫綅 + package_checkbox_loc = (By.XPATH, "td[1]/input") + # 鑾峰彇澶嶉�夋鍏冪礌 + tr_checkbox = tr.find_element(*package_checkbox_loc) + # 鐐瑰嚮澶嶉�夋 + tr_checkbox.click() + break + + def unselect_email_checkbox(self, memberEmail): + """ + 閫変腑璇勬祴浜哄憳 + :param memberEmail: + :return: + """ + # 鑾峰彇鍒皌able鐨勬墍鏈塼r + table_trs = self.get_eles(self.es.table_data_tr) + for tr in table_trs: + # 鍒ゆ柇澶嶉�夋鏄惁涓洪�変腑鐘舵�� + tr_class = tr.get_attribute("class") + if tr_class != "selected": + # 宸茬偣鍑昏繘琛屼笅涓�娆″惊鐜� + continue + # 閭鍦╰r涓殑瀹氫綅 + email_loc = (By.XPATH, "td[4]") + # 鑾峰彇tr涓殑娴嬭瘯鍖呭悕绉� + tr_email = tr.find_element(*email_loc).text + if tr_email == memberEmail: + # 澶嶉�夋鍦╰r涓殑瀹氫綅 + package_checkbox_loc = (By.XPATH, "td[1]/input") + # 鑾峰彇澶嶉�夋鍏冪礌 + tr_checkbox = tr.find_element(*package_checkbox_loc) + # 鐐瑰嚮澶嶉�夋 + tr_checkbox.click() + break diff --git a/po/product_accredit_page.py b/po/product_accredit_page.py new file mode 100644 index 0000000..c9fd916 --- /dev/null +++ b/po/product_accredit_page.py @@ -0,0 +1,38 @@ +import time + +from base.base_page import BasePage +from elements.product_accredit__elements import ProductAccreditElements +from selenium.common.exceptions import TimeoutException, NoSuchElementException + + +class ProductAccreditPage(BasePage): + """ + 鐧诲綍椤甸潰 + """ + # 椤甸潰鍏冪礌 + es = ProductAccreditElements + + def __init__(self, driver): + super().__init__(driver) + try: + self.driver.switch_to.default_content() + self.switch_iframe(self.es.this_iframe) + except: + pass + + def wait_layer_reload_hide(self, timeout=600): + """ + 绛夊緟鍔犺浇妗嗘秷澶� + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + for i in range(1, 600): + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + self.get_ele(self.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + + diff --git a/po/report_page.py b/po/report_page.py new file mode 100644 index 0000000..42cfd21 --- /dev/null +++ b/po/report_page.py @@ -0,0 +1,38 @@ +import time + +from base.base_page import BasePage +from elements.report_elements import ReportElements +from selenium.common.exceptions import TimeoutException, NoSuchElementException + + +class ReportPage(BasePage): + """ + 鐧诲綍椤甸潰 + """ + # 椤甸潰鍏冪礌 + es = ReportElements + + def __init__(self, driver): + super().__init__(driver) + try: + self.driver.switch_to.default_content() + self.switch_iframe(self.es.this_iframe) + except: + pass + + def wait_layer_reload_hide(self, timeout=600): + """ + 绛夊緟鍔犺浇妗嗘秷澶� + :param timeout: 瓒呮椂鏃堕棿 + :return: + """ + for i in range(1, 600): + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + self.get_ele(self.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + + diff --git a/po/share_add_page.py b/po/share_add_page.py index e3de559..a20733a 100644 --- a/po/share_add_page.py +++ b/po/share_add_page.py @@ -1,5 +1,5 @@ from base.base_page import BasePage -from elements.share_add_elements import ShareAddElements as Share +from elements.share_add_elements import ShareAddElements import time @@ -8,44 +8,23 @@ 鍒嗕韩閾炬帴鎵撳紑鐨勯〉闈� """ - def name_input(self, name): - """ - 杈撳叆濮撳悕 - :param name: - :return: - """ - self.send_text(name, Share.name) + es = ShareAddElements - def email_input(self, email): + def get_test_url(self, name, email): """ - 杈撳叆閭 - :param email: - :return: - """ - self.send_text(email, Share.email) - - def submit_btn(self): - """ - 鐐瑰嚮鎻愪氦 - :return: - """ - self.click_wait(Share.submit_btn) - - def page_default_operation(self, name, email): - """ - 椤甸潰榛樿鎿嶄綔 + 濉啓淇℃伅骞舵彁浜わ紝杩斿洖娴嬭瘯閾炬帴 :param name: :param email: :return: """ # 杈撳叆濮撳悕 - self.name_input(name) + self.fill(self.es.name, name, timeout=10) # 杈撳叆閭 - self.email_input(email) + self.fill(self.es.email, email) # 鐐瑰嚮鎻愪氦 - self.submit_btn() + self.click(self.es.submit_btn) # 鑾峰彇娴嬭瘯閾炬帴骞惰繑鍥� - return self.get_element_wait(Share.test_url).text + return self.get_ele(self.es.test_url).text def fill_info(self, email, position, dept): """ @@ -55,11 +34,10 @@ :param dept: 閮ㄩ棬 :return: """ - self.send_text_wait(email, Share.fill_email) - self.send_text_wait(position, Share.fill_position) - self.send_text_wait(dept, Share.fill_dept) - self.click(Share.submit_btn) - time.sleep(2) + self.fill(self.es.fill_email, email, timeout=10) + self.fill(self.es.fill_position, position) + self.fill(self.es.fill_dept, dept) + self.click(self.es.submit_btn) def fill_info_CIAQ(self, info): """ @@ -67,21 +45,21 @@ :param info: :return: """ - self.send_text_wait(info["email"], Share.ciaq_email_input) - self.selector(Share.ciaq_sex_select, Share.ciaq_sex_option, info["sex"]) - self.send_text_wait(info["age"], Share.ciaq_age_input) - self.selector(Share.ciaq_grade_select, Share.ciaq_grade_option, info["grade"]) - self.send_text_wait(info["address"], Share.ciaq_address_input) - self.send_text_wait(info["university"], Share.ciaq_university_input) - self.send_text_wait(info["universityAddress"], Share.ciaq_universityAddress_input) - self.send_text_wait(info["college"], Share.ciaq_college_input) - self.send_text_wait(info["major"], Share.ciaq_major_input) - self.selector(Share.ciaq_subject_select, Share.ciaq_subject_option, info["subject"]) - self.send_text_wait(info["GPA"], Share.ciaq_GPA_input) - self.send_text_wait(info["work"], Share.ciaq_work_input) - self.selector(Share.ciaq_status_select, Share.ciaq_status_option, info["status"]) - self.selector(Share.ciaq_workExperience_select, Share.ciaq_workExperience_option, info["workExperience"]) - self.click_wait(Share.submit_btn) + self.send_text_wait(info["email"], self.es.ciaq_email_input) + self.selector(self.es.ciaq_sex_select, self.es.ciaq_sex_option, info["sex"]) + self.send_text_wait(info["age"], self.es.ciaq_age_input) + self.selector(self.es.ciaq_grade_select, self.es.ciaq_grade_option, info["grade"]) + self.send_text_wait(info["address"], self.es.ciaq_address_input) + self.send_text_wait(info["university"], self.es.ciaq_university_input) + self.send_text_wait(info["universityAddress"], self.es.ciaq_universityAddress_input) + self.send_text_wait(info["college"], self.es.ciaq_college_input) + self.send_text_wait(info["major"], self.es.ciaq_major_input) + self.selector(self.es.ciaq_subject_select, self.es.ciaq_subject_option, info["subject"]) + self.send_text_wait(info["GPA"], self.es.ciaq_GPA_input) + self.send_text_wait(info["work"], self.es.ciaq_work_input) + self.selector(self.es.ciaq_status_select, self.es.ciaq_status_option, info["status"]) + self.selector(self.es.ciaq_workExperience_select, self.es.ciaq_workExperience_option, info["workExperience"]) + self.click_wait(self.es.submit_btn) def selector(self, select_loc, options_loc, text): """ diff --git a/po/test_package_list_page.py b/po/test_package_list_page.py index 6725bb6..d7f54cf 100644 --- a/po/test_package_list_page.py +++ b/po/test_package_list_page.py @@ -1,6 +1,7 @@ from base.base_page import BasePage from selenium.webdriver.common.by import By -from elements.test_package_list_elements import TestPackageListElements as PackageList +from elements.test_package_list_elements import TestPackageListElements +from datetime import datetime import time @@ -9,66 +10,252 @@ 娴嬭瘯鍖呭垪琛ㄩ〉闈� """ + es = TestPackageListElements + def __init__(self, driver): """鍒濆鍖栨椂灏唅frame鍒囨崲鍒板綋鍓嶉〉闈�""" super().__init__(driver) try: self.driver.switch_to.default_content() - self.switch_iframe(PackageList.this_iframe) + self.switch_iframe(self.es.this_iframe) except: pass - def create_btn(self): + def create_package(self, data: dict): """ - 鐐瑰嚮鍒涘缓鎸夐挳 + 鍒涘缓娴嬭瘯鍖� + :param data: 娴嬭瘯鍖呭弬鏁� :return: """ - self.click_wait(PackageList.create_btn) - # 鍒囨崲鍒癮dd绐楀彛鐨刬frame - self.switch_iframe(PackageList.add_iframe) + # 鐐瑰嚮鍒涘缓鎸夐挳 + self.click(self.es.create_btn) + # 鍒囨崲鍒癮dd鐨刬frame + self.switch_iframe(self.es.add_iframe) + # 鑾峰彇褰撳墠鏃堕棿 + current_time = datetime.now() + # 杞崲涓哄瓧绗︿覆 + time_str = current_time.strftime("%Y%m%d%H%M%S") + # 鍒涘缓娴嬭瘯鍖呭~鍐欑殑鍙傛暟 + # 娴嬭瘯鍖呭悕绉� + test_package_name = data["product"] + "鑷姩娴嬭瘯鍖�-" + time_str + # 濉啓娴嬭瘯鍖呭悕绉� + self.fill(self.es.add_testPackageName_input, test_package_name, timeout=10) + # 濉啓鎶ュ憡浼佷笟鍚嶇О + self.fill(self.es.add_reportCompanyName_input, data["company"], timeout=10) + # 閫夋嫨娴嬭瘯鍖呯被鍨� + self.select(self.es.add_testPackageType_select, self.es.add_testPackageType_option, data["type"]) + # 閫夋嫨鍖哄煙 + self.select(self.es.add_testPackageArea_select, self.es.add_testPackageArea_option, data["area"]) + # 閫夋嫨浜у搧鍖� + self.prodTree_select(data["product"]) + # 杈撳叆hr閭 + self.fill(self.es.add_hrEmail_input, data["hrEmail"]) + # 杈撳叆鏈夋晥鏈� + self.fill(self.es.add_invalidTime, data["invalid"]) + # 鐐瑰嚮鏈夋晥鏈熻緭鍏ユ鏉ラ殣钘忔棩鏈熼�夋嫨鍣� + self.click(self.es.add_invalidTime) + # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷 + self.select(self.es.add_templateLangType_select, self.es.add_templateLangType_option, data["memberLang"]) + # 閫夋嫨HR閭欢璇█绫诲瀷 + self.select(self.es.add_hrTemplateLangType_select, self.es.add_hrTemplateLangType_option, data["hrReportLang"]) + # 閫夋嫨鎶ュ憡妯℃澘 + self.select(self.es.add_reportTemplateId_select, self.es.add_reportTemplateId_option, data["reportTemplate"]) - def delete_package(self): + # 鍒ゆ柇鏄惁涓哄伐浣滃垎鏋愬寘 + if data["type"] == "宸ヤ綔鍒嗘瀽鍖�": + # 濡傛灉鏄垯濉啓 + # 杈撳叆瑕佽瘎浠风殑宀椾綅 + self.fill(self.es.add_position_input, data["position"]) + # 杈撳叆鑱屼笟澶х被 + self.fill(self.es.add_professionalCategory_input, data["professionalCategory"]) + # 杈撳叆涓婄骇宀椾綅 + self.fill(self.es.add_superiorPosition_input, data["superiorPosition"]) + + # 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛� + self.click(self.es.add_autoSendReport_checkbox) + # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷 + self.select(self.es.add_memberReportLangType_select, self.es.add_memberReportLangType_option, + data["memberReportLang"]) + # 鍥炲埌涓婁竴灞俰frame + self.switch_parent_iframe() + # 鐐瑰嚮纭鎸夐挳 + self.click(self.es.add_confirm_btn) + return test_package_name + + def edit_package(self, data: dict): + """ + 淇敼娴嬭瘯鍖� + :param data: + :return: + """ + # 鍒囨崲鍒癳dit鐨刬frame + self.switch_iframe(self.es.edit_iframe) + # 鑾峰彇褰撳墠鏃堕棿 + current_time = datetime.now() + # 杞崲涓哄瓧绗︿覆 + time_str = current_time.strftime("%Y%m%d%H%M%S") + # 鍒涘缓娴嬭瘯鍖呭~鍐欑殑鍙傛暟 + # 娴嬭瘯鍖呭悕绉� + test_package_name = data["product"] + "鑷姩娴嬭瘯鍖�-" + time_str + # 濉啓娴嬭瘯鍖呭悕绉� + self.fill(self.es.add_testPackageName_input, test_package_name, timeout=10) + # 濉啓鎶ュ憡浼佷笟鍚嶇О + self.fill(self.es.add_reportCompanyName_input, data["company"], timeout=10) + # 閫夋嫨鍖哄煙 + self.select(self.es.add_testPackageArea_select, self.es.add_testPackageArea_option, data["area"]) + # 杈撳叆hr閭 + self.fill(self.es.add_hrEmail_input, data["hrEmail"]) + # 杈撳叆鏈夋晥鏈� + self.fill(self.es.add_invalidTime, data["invalid"]) + # 鐐瑰嚮鏈夋晥鏈熻緭鍏ユ鏉ラ殣钘忔棩鏈熼�夋嫨鍣� + self.click(self.es.add_invalidTime) + # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷 + self.select(self.es.add_templateLangType_select, self.es.add_templateLangType_option, data["memberLang"]) + # 閫夋嫨HR閭欢璇█绫诲瀷 + self.select(self.es.add_hrTemplateLangType_select, self.es.add_hrTemplateLangType_option, data["hrReportLang"]) + # 閫夋嫨鎶ュ憡妯℃澘 + self.select(self.es.add_reportTemplateId_select, self.es.add_reportTemplateId_option, data["reportTemplate"]) + + # 鍒ゆ柇鏄惁涓哄伐浣滃垎鏋愬寘 + if data["type"] == "宸ヤ綔鍒嗘瀽鍖�": + # 濡傛灉鏄垯濉啓 + # 杈撳叆瑕佽瘎浠风殑宀椾綅 + self.fill(self.es.add_position_input, data["position"]) + # 杈撳叆鑱屼笟澶х被 + self.fill(self.es.add_professionalCategory_input, data["professionalCategory"]) + # 杈撳叆涓婄骇宀椾綅 + self.fill(self.es.add_superiorPosition_input, data["superiorPosition"]) + # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷 + self.select(self.es.add_memberReportLangType_select, self.es.add_memberReportLangType_option, + data["memberReportLang"]) + # 鍥炲埌涓婁竴灞俰frame + self.switch_parent_iframe() + # 鐐瑰嚮纭鎸夐挳 + self.click(self.es.edit_confirm_btn) + return test_package_name + + def verify_edit_success(self, package_name, data): + """ + 楠岃瘉淇敼鏄惁鎴愬姛 + :param package_name: 娴嬭瘯鍖呭悕绉� + :param data: + :return: + """ + # 鍕鹃�夊搴旀祴璇曞寘 + self.select_package_checkbox(package_name) + # 鐐瑰嚮淇敼鎸夐挳 + self.click(self.es.edit_btn) + time.sleep(2) + # 鍒囨崲鍒癳dit鐨刬frame + self.switch_iframe(self.es.edit_iframe) + # 鍒ゆ柇娴嬭瘯鍖呭悕绉� + flag = self.equals(self.es.add_testPackageName_input, package_name) + if not flag: + return flag + # 鍒ゆ柇鎶ュ憡浼佷笟鍚嶇О + flag = self.equals(self.es.add_reportCompanyName_input, data["company"]) + if not flag: + return flag + # 鍒ゆ柇绫诲瀷 + flag = self.equals(self.es.add_testPackageType_text, data["type"]) + if not flag: + return flag + # 鍒ゆ柇鍖哄煙 + flag = self.equals(self.es.add_testPackageArea_text, data["area"]) + if not flag: + return flag + # 鍒ゆ柇浜у搧鍖� + flag = self.equals(self.es.add_prodTree_input, data["product"]) + if not flag: + return flag + # 鍒ゆ柇HR鎺ユ敹鎶ュ憡閭 + flag = self.equals(self.es.add_hrEmail_input, data["hrEmail"]) + if not flag: + return flag + # 鍒ゆ柇鏈夋晥鏈� + flag = self.equals(self.es.add_invalidTime, data["invalid"]) + if not flag: + return flag + + # 鍒ゆ柇璇█绫诲瀷 + text = "浜茬埍鐨�" + if data["memberLang"] == "English": + text = "Dear" + elif data["memberLang"] == "喙勦笚喔�": + text = "喙�喔`傅喔⑧笝" + # 鍒ゆ柇娴嬭瘯鑰呴個璇峰唴瀹� + flag = self.contains(self.es.add_templateLangType_text, text) + if not flag: + return flag + + # 鍒ゆ柇璇█绫诲瀷 + text = "浜茬埍鐨�" + if data["hrReportLang"] == "English": + text = "Dear HR Staff at" + elif data["hrReportLang"] == "喙勦笚喔�": + text = "喙�喔`傅喔⑧笝喔澿箞喔侧涪喔氞父喔勦竸喔ム競喔竾" + # 鍒ゆ柇HR閭欢鍐呭 + flag = self.contains(self.es.add_hrTemplateLangType_text, text) + if not flag: + return flag + + # 鍒ゆ柇鎶ュ憡妯℃澘 + flag = self.contains(self.es.add_reportTemplateId_text, data["reportTemplate"]) + if not flag: + return flag + + # 鍒ゆ柇鏄惁涓哄伐浣滃垎鏋愬寘 + if data["type"] == "宸ヤ綔鍒嗘瀽鍖�": + # 鍒ゆ柇瑕佽瘎浠风殑宀椾綅 + flag = self.equals(self.es.add_position_input, data["position"]) + if not flag: + return flag + # 鍒ゆ柇鑱屼笟澶х被 + flag = self.equals(self.es.add_professionalCategory_input, data["professionalCategory"]) + if not flag: + return flag + # 鍒ゆ柇涓婄骇宀椾綅 + flag = self.equals(self.es.add_superiorPosition_input, data["superiorPosition"]) + if not flag: + return flag + + # 鍒ゆ柇璇█绫诲瀷 + text = "浜茬埍鐨�" + if data["memberReportLang"] == "English": + text = "Dear HR Staff at" + elif data["memberReportLang"] == "喙勦笚喔�": + text = "喙�喔`傅喔⑧笝" + # 鍒ゆ柇娴嬭瘯鑰� + flag = self.contains(self.es.add_memberReportLangType_text, text) + if not flag: + return flag + + # 鍒ゆ柇浜哄彛瀛︾紪鐮� + if "checkCode" in data: + # 鏍¢獙琚嬀閫夌殑浜哄彛閫夌紪鐮� + flag = self.verify_code_checked(data["checkCode"]) + if not flag: + return flag + if "uncheckCode" in data: + # 鏍¢獙琚彇娑堝嬀閫夌殑浜哄彛閫夌紪鐮� + flag = self.verify_code_unchecked(data["checkCode"]) + if not flag: + return flag + + return flag + + + def delete_package(self, package_name): """ 鍒犻櫎娴嬭瘯鍖� :return: """ + # 鍕鹃�夊搴旀祴璇曞寘 + self.select_package_checkbox(package_name) # 鐐瑰嚮鍒犻櫎鎸夐挳 - self.click_wait(PackageList.delete_btn) + self.click(self.es.delete_btn) # 鐐瑰嚮纭鎸夐挳 - self.click_wait(PackageList.delete_confirm_btn) - - def testPackageName_input(self, testPackageName): - """ - 杈撳叆娴嬭瘯鍖呭悕绉� - :param testPackageName: 娴嬭瘯鍖呭悕绉� - :return: - """ - self.send_text_wait(testPackageName, PackageList.add_testPackageName_input) - - def reportCompanyName_input(self, reportCompanyName): - """ - 杈撳叆鎶ュ憡浼佷笟鍚嶇О - :param reportCompanyName: 鎶ュ憡浼佷笟鍚嶇О - :return: - """ - self.send_text_wait(reportCompanyName, PackageList.add_reportCompanyName_input) - - def testPackageType_select(self, testPackageType): - """ - 閫夋嫨娴嬭瘯鍖呯被鍨� - :param testPackageType: - :return: - """ - # 鐐瑰嚮涓嬫媺妗� - self.click_wait(PackageList.add_testPackageType_select) - # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(PackageList.add_testPackageType_option) - # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑 - for opt in options: - if opt.text == testPackageType: - # 鐩哥瓑鍒欑偣鍑昏閫夐」 - opt.click() - break + self.click(self.es.delete_confirm_btn) def prodTree_select(self, prodName): """ @@ -77,12 +264,11 @@ :return: """ # 鐐瑰嚮鏌ヨ鎸夐挳 - self.click_wait(PackageList.add_prodTree_btn) + self.click(self.es.add_prodTree_btn) # 鍒囨崲鍒皃rodTree鐨刬frame - self.switch_iframe_wait(PackageList.prodTree_iframe) - time.sleep(2) + self.switch_iframe_wait(self.es.prodTree_iframe) # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(PackageList.prodTree_option) + options = self.get_eles(self.es.prodTree_option, timeout=10) # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ラ�夐」鐩哥瓑 for opt in options: if opt.text == prodName: @@ -91,137 +277,7 @@ # 鍒囨崲鍒颁笂涓�灞傜殑iframe self.switch_parent_iframe() # 鐐瑰嚮纭鎸夐挳 - self.click_wait(PackageList.prodTree_confirm_btn) - - def hrReportEmail_input(self, hr_email): - """ - 杈撳叆HR鎺ユ敹鎶ュ憡閭 - :param hr_email: - :return: - """ - self.send_text_wait(hr_email, PackageList.add_hrEmail_input) - - def invalidTime_input(self, invalid_time): - """ - 杈撳叆鏈夋晥鏈� - :param invalid_time: - :return: - """ - self.send_text_wait(invalid_time, PackageList.add_invalidTime) - self.click_wait(PackageList.add_invalidTime) - - def testTemplateLangType_select(self, text): - """ - 閫夋嫨娴嬭瘯鑰呴個璇烽偖浠跺唴瀹规ā鏉� - :param text: 璇█绫诲瀷锛屽彲浠ラ�夋嫨澶氫釜锛屼娇鐢� , 鍒嗛殧 - :return: - """ - # 鍒嗗壊text - lang_types = text.split(",") - # 鐐瑰嚮涓嬫媺妗� - self.click_wait(PackageList.add_templateLangType_select) - # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(PackageList.add_templateLangType_option) - # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑 - for opt in options: - for lang_type in lang_types: - if opt.text == lang_type: - # 鐩哥瓑鍒欑偣鍑昏閫夐」 - opt.click() - break - - def hrTemplateLangType_select(self, text): - """ - 閫夋嫨HR閭欢鍐呭妯℃澘 - :param text: 璇█绫诲瀷锛屽彲浠ラ�夋嫨澶氫釜锛屼娇鐢� , 鍒嗛殧 - :return: - """ - # 鍒嗗壊text - lang_types = text.split(",") - # 鐐瑰嚮涓嬫媺妗� - self.click_wait(PackageList.add_hrTemplateLangType_select) - # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(PackageList.add_hrTemplateLangType_option) - # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑 - for opt in options: - for lang_type in lang_types: - if opt.text == lang_type: - # 鐩哥瓑鍒欑偣鍑昏閫夐」 - opt.click() - break - - def reportTemplate_select(self, text): - """ - 鎶ュ憡妯℃澘閫夋嫨 - :param text: 妯℃澘锛屽彲浠ラ�夋嫨澶氫釜锛屼娇鐢� , 鍒嗛殧 - :return: - """ - # 鍒嗗壊text - templates = text.split(",") - # 鐐瑰嚮涓嬫媺妗� - self.click_wait(PackageList.add_reportTemplateId_select) - # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(PackageList.add_reportTemplateId_option) - # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑 - for opt in options: - for template in templates: - if opt.text == template: - # 鐩哥瓑鍒欑偣鍑昏閫夐」 - opt.click() - break - # 鍐嶆鐐瑰嚮涓嬫媺妗� - self.click_wait(PackageList.add_reportTemplateId_select) - - def position_input(self, text): - """ - 杈撳叆瑕佽瘎浠风殑宀椾綅 - :param text: - :return: - """ - self.send_text_wait(text, PackageList.add_position_input) - - def professionalCategory_input(self, text): - """ - 杈撳叆鑱屼笟澶х被 - :param text: - :return: - """ - self.send_text_wait(text, PackageList.add_professionalCategory_input) - - def superiorPosition_input(self, text): - """ - 杈撳叆涓婄骇宀椾綅 - :param text: - :return: - """ - self.send_text_wait(text, PackageList.add_superiorPosition_input) - - def autoSendReport_checkbox(self): - """ - 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛� - :return: - """ - self.click_wait(PackageList.add_autoSendReport_checkbox) - - def memberReportLangType_select(self, text): - """ - 娴嬭瘯鑰呮姤鍛婇偖浠惰瑷�绫诲瀷 - :param text: 璇█绫诲瀷锛屽彲浠ラ�夋嫨澶氫釜锛屼娇鐢� , 鍒嗛殧 - :return: - """ - # 鍒嗗壊text - lang_types = text.split(",") - # 鐐瑰嚮涓嬫媺妗� - self.click_wait(PackageList.add_memberTemplateLangType_select) - # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(PackageList.add_memberTemplateLangType_option) - # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑 - for opt in options: - for lang_type in lang_types: - if opt.text == lang_type: - # 鐩哥瓑鍒欑偣鍑昏閫夐」 - opt.click() - break + self.click(self.es.prodTree_confirm_btn) def select_code_checkbox(self, check_text, uncheck_text): """ @@ -231,32 +287,23 @@ :return: """ # 鑾峰彇鎵�鏈変汉鍙i�夌紪鐮侀�夋鍏冪礌 - code_boxs = self.get_elements_wait(PackageList.add_code_checkbox) + code_boxs = self.get_elements_wait(self.es.add_code_checkbox) # 灏哻heck_text鍒嗗壊 code_check_texts = check_text.split(',') + # 閫夋嫨浜哄彛瀛︾紪鐮� for code_text in code_check_texts: for code_box in code_boxs: if code_text == code_box.text: code_box.click() - # 灏哻heck_text鍒嗗壊 + # 灏唘ncheck_text鍒嗗壊 code_uncheck_texts = uncheck_text.split(',') + # 鍙栨秷閫夋嫨浜哄彛瀛︾紪鐮� for code_text in code_uncheck_texts: for code_box in code_boxs: if code_text == code_box.text: code_box.click() - - - - def add_confirm(self): - """ - 鐐瑰嚮纭鎸夐挳 - :return: - """ - # 鍥炲埌涓婁竴灞俰frame - self.switch_parent_iframe() - self.click_wait(PackageList.add_confirm_btn) def is_create_success(self, packageName): """ @@ -264,72 +311,101 @@ :param packageName: 娴嬭瘯鍖呭悕绉� :return: bool """ - names = self.get_elements_wait(PackageList.table_packageName_a) + names = self.get_eles(self.es.table_packageName_a) for name in names: if name.text == packageName: return True return False - def click_package_checkbox(self, packageName): + def select_package_checkbox(self, packageName): """ 閫変腑娴嬭瘯鍖咃紝鍕鹃�夊搴旀祴璇曞寘鍒楄〃鐨勫閫夋 :param packageName: 娴嬭瘯鍖呭悕绉� :return: """ # 鑾峰彇鍒皌able鐨勬墍鏈塼r - table_trs = self.get_elements_wait(PackageList.table_package_tr) + table_trs = self.get_eles(self.es.table_package_tr) for tr in table_trs: + # 鍒ゆ柇澶嶉�夋鏄惁涓洪�変腑鐘舵�� + tr_class = tr.get_attribute("class") + if tr_class == "selected": + # 宸茬偣鍑荤洿鎺ラ��鍑哄惊鐜� + continue # 娴嬭瘯鍖呭悕绉板湪tr涓殑瀹氫綅 package_name_loc = (By.XPATH, "td[2]/a") # 鑾峰彇tr涓殑娴嬭瘯鍖呭悕绉� - tr_package_name = self.get_element_in(tr, package_name_loc).text + tr_package_name = tr.find_element(*package_name_loc).text if tr_package_name == packageName: # 澶嶉�夋鍦╰r涓殑瀹氫綅 package_checkbox_loc = (By.XPATH, "td[1]/input") # 鑾峰彇澶嶉�夋鍏冪礌 - tr_checkbox = self.get_element_in(tr, package_checkbox_loc) + tr_checkbox = tr.find_element(*package_checkbox_loc) # 鐐瑰嚮澶嶉�夋 tr_checkbox.click() break - def click_share_1_btn(self): + def click_package_name(self, packageName): """ - 鐐瑰嚮鐢熸垚鍒嗕韩閾炬帴鎸夐挳 + 鐐瑰嚮鍖呭悕绉拌烦杞〉闈� + :param packageName: :return: """ - self.click_wait(PackageList.share_1_btn) + # 鑾峰彇鍒版墍鏈夋祴璇曞寘鍚嶇Оa鏍囩 + package_names = self.get_eles(self.es.table_packageName_a) + for name in package_names: + if name.text == packageName: + name.click() - def get_share_url(self): + def get_share_url(self, package_name): """ 鑾峰彇鍒嗕韩閾炬帴 :return: url """ + # 鍕鹃�夋祴璇曞寘 + self.select_package_checkbox(package_name) + # 鐐瑰嚮鐢熸垚鍒嗕韩閾炬帴鎸夐挳 + self.click(self.es.share_1_btn) # 鍒囨崲鍒皊hare鐨刬frame涓� - self.switch_iframe(PackageList.share_iframe) + self.switch_iframe(self.es.share_iframe) # 鑾峰彇url - url = self.get_input_value_js(PackageList.share_url_input) + url = self.get_value_js(self.es.share_url_input) # 閫�鍥炰笂涓�灞俰frame self.switch_parent_iframe() # 鐐瑰嚮鍏抽棴鎸夐挳 - self.click_wait(PackageList.share_cancel_btn) - time.sleep(1) + self.click(self.es.share_cancel_btn) + time.sleep(2) return url - def selector(self, click_loc, options_loc, text): + def verify_code_checked(self, text: str): """ - 閫氱敤閫夋嫨鍣紝鐩存帴璋冪敤閫夋嫨涓嬫媺妗嗛�夐」 - :param click_loc: 鐐瑰嚮鍚庡嚭鐜颁笅鎷夐�夐」鐨勫厓绱犲畾浣� - :param options_loc: 閫夐」鐨勫厓绱犲畾浣� - :param text: 鍒ゆ柇鐐瑰嚮鐨勬枃鏈� + 鏍¢獙浜哄彛瀛︾紪鐮佹槸鍚﹀嬀閫� :return: """ - # 鐐瑰嚮涓嬫媺妗� - self.click_wait(click_loc) - # 鑾峰彇鎵�鏈夐�夐」 - options = self.get_elements_wait(options_loc) - # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑 - for opt in options: - if opt.text == text: - # 鐩哥瓑鍒欑偣鍑昏閫夐」 - opt.click() - break + texts = text.split(",") + # 鑾峰彇鍒版墍鏈変汉鍙e缂栫爜鐨刲abel + eles = self.get_eles(self.es.add_code_checkbox) + for ele in eles: + for t in texts: + if t == ele.text: + ele_class = ele.find_element(By.XPATH, "div").get_attribute("class") + # 濡傛灉class涓嶅寘鍚玞hecked鍒欒繑鍥濬alse + if "checked" not in ele_class: + return False + + + def verify_code_unchecked(self, text: str): + """ + 鏍¢獙浜哄彛瀛︾紪鐮佹槸鍚︽病鏈夎鍕鹃�� + :return: + """ + texts = text.split(",") + # 鑾峰彇鍒版墍鏈変汉鍙e缂栫爜鐨刲abel + eles = self.get_eles(self.es.add_code_checkbox) + for ele in eles: + for t in texts: + if t== ele.text: + ele_class = ele.find_element(By.XPATH, "div").get_attribute("class") + # 濡傛灉class鍖呭惈checked鍒欒繑鍥濬alse + if "checked" in ele_class: + return False + diff --git a/report/report.html b/report/report.html index f7900d7..ba2fafe 100644 --- a/report/report.html +++ b/report/report.html @@ -253,10 +253,10 @@ } </script> <h1>report.html</h1> - <p>Report generated on 18-Jul-2023 at 17:34:03 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p> + <p>Report generated on 28-Jul-2023 at 16:53:13 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p> <h2>Summary</h2> - <p>5 tests ran in 133.54 seconds. </p> - <p class="filter" hidden="true">(Un)check the boxes to filter the results.</p><input checked="true" class="filter" data-test-result="passed" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">5 passed</span>, <input checked="true" class="filter" data-test-result="skipped" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="skipped">0 skipped</span>, <input checked="true" class="filter" data-test-result="failed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">0 failed</span>, <input checked="true" class="filter" data-test-result="error" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="error">0 errors</span>, <input checked="true" class="filter" data-test-result="xfailed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xfailed">0 expected failures</span>, <input checked="true" class="filter" data-test-result="xpassed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xpassed">0 unexpected passes</span> + <p>19 tests ran in 567.35 seconds. </p> + <p class="filter" hidden="true">(Un)check the boxes to filter the results.</p><input checked="true" class="filter" data-test-result="passed" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">19 passed</span>, <input checked="true" class="filter" data-test-result="skipped" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="skipped">0 skipped</span>, <input checked="true" class="filter" data-test-result="failed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">0 failed</span>, <input checked="true" class="filter" data-test-result="error" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="error">0 errors</span>, <input checked="true" class="filter" data-test-result="xfailed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xfailed">0 expected failures</span>, <input checked="true" class="filter" data-test-result="xpassed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xpassed">0 unexpected passes</span> <h2>Results</h2> <table id="results-table"> <thead id="results-table-head"> @@ -270,8 +270,8 @@ <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> - <td class="col-name">testcase/test_ciaq.py::TestCIAQ::test_login[login]</td> - <td class="col-duration">5.01</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_create_package[testPackageList]</td> + <td class="col-duration">9.81</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> @@ -279,8 +279,8 @@ <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> - <td class="col-name">testcase/test_ciaq.py::TestCIAQ::test_create_package[CIAQ]</td> - <td class="col-duration">2.07</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_edit_package[testPackageList]</td> + <td class="col-duration">10.59</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> @@ -288,8 +288,8 @@ <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> - <td class="col-name">testcase/test_ciaq.py::TestCIAQ::test_open_url[CIAQ]</td> - <td class="col-duration">17.20</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_add_member[memberDetail]</td> + <td class="col-duration">10.96</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> @@ -297,8 +297,8 @@ <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> - <td class="col-name">testcase/test_ciaq.py::TestCIAQ::test_answer</td> - <td class="col-duration">101.78</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_edit_member[memberDetail]</td> + <td class="col-duration">6.59</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> @@ -306,8 +306,134 @@ <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> - <td class="col-name">testcase/test_ciaq.py::TestCIAQ::test_delete_package</td> - <td class="col-duration">7.31</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_member[memberDetail]</td> + <td class="col-duration">2.31</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_url[memberDetail]</td> + <td class="col-duration">1.13</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_import[memberDetail]</td> + <td class="col-duration">4.23</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_send_email[memberDetail]</td> + <td class="col-duration">8.24</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_send_sms[memberDetail]</td> + <td class="col-duration">9.00</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_skip_report[memberDetail]</td> + <td class="col-duration">5.16</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_remove_member[memberDetail]</td> + <td class="col-duration">1.87</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_edit_prompt[testPackageList]</td> + <td class="col-duration">368.04</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_verify_member_status[testPackageList]</td> + <td class="col-duration">5.39</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_generate_export_report[testPackageList]</td> + <td class="col-duration">26.83</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_download_report[testPackageList]</td> + <td class="col-duration">2.08</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_report[testPackageList]</td> + <td class="col-duration">20.38</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_data[testPackageList]</td> + <td class="col-duration">2.18</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_hr_resend[testPackageList]</td> + <td class="col-duration">30.40</td> + <td class="col-links"></td></tr> + <tr> + <td class="extra" colspan="4"> + <div class="empty log">No log output captured.</div></td></tr></tbody> + <tbody class="passed results-table-row"> + <tr> + <td class="col-result">Passed</td> + <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_member_resend[testPackageList]</td> + <td class="col-duration">37.73</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> diff --git a/testcase/conftest.py b/testcase/conftest.py index 84df2a8..d82f962 100644 --- a/testcase/conftest.py +++ b/testcase/conftest.py @@ -5,9 +5,23 @@ import pytest import json import os +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.chrome.service import Service +from webdriver_manager.chrome import ChromeDriverManager -@pytest.fixture +@pytest.fixture(scope="session") +def driver(request): + options = Options() + options.debugger_address = "127.0.0.1:9222" + # 鍒濆鍖杦ebdriver + driver = webdriver.Chrome(options=options) + request.addfinalizer(driver.quit) + return driver + + +@pytest.fixture(scope="session") def data_read(request) -> dict: """ 璇诲彇娴嬭瘯浣跨敤鐨勬暟鎹� @@ -16,6 +30,8 @@ """ # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� root_path = os.getcwd() + if "\\testcase" in root_path: + root_path = root_path[0:root_path.rfind("\\testcase")] # 鑾峰彇鍒拌鑾峰彇鏁版嵁鐨勯敭 key = request.param # 璇诲彇鏁版嵁 diff --git a/testcase/test_2package_list.py b/testcase/test_2package_list.py new file mode 100644 index 0000000..79c0606 --- /dev/null +++ b/testcase/test_2package_list.py @@ -0,0 +1,820 @@ +import os +from datetime import datetime +import time +from selenium.webdriver.common.by import By +from selenium.common.exceptions import TimeoutException +from selenium.common.exceptions import NoSuchElementException + +import pytest +from comm.comm import * +from comm.read_data import * +from comm.write_data import * +from selenium import webdriver +from po.login_page import LoginPage +from po.home_page import HomePage +from po.test_package_list_page import TestPackageListPage +from po.member_detail_page import MemberDetailPage +from po.report_page import ReportPage +from po.share_add_page import ShareAddPage +from po.maq_answer_page import MAQAnswerPage +from po.caq_answer_page import CAQAnswerPage +from comm.my_random import * + + +class TestPackageList: + driver = None + test_package_name = "MAQV2鑷姩娴嬭瘯鍖�-20230727155906" + member_email = None + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_create_package(self, data_read: dict, driver): + """ + 鍒涘缓娴嬭瘯鍖� + :param data_read: 璇诲彇鏁版嵁 + :return: + """ + # 鍒涘缓home椤甸潰鐨勫璞� + home_page = HomePage(driver) + # 鐐瑰嚮宸︿晶鑿滃崟杩涘叆椤甸潰 + home_page.menu_select(data_read["menu"]) + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鍒涘缓娴嬭瘯鍖呭苟鎺ユ敹鍒涘缓鐨勬祴璇曞寘鍚嶇О + create_package_name = test_package_list.create_package(data_read["add"]) + # 璧嬪�煎埌绫诲彉閲� + TestPackageList.test_package_name = create_package_name + time.sleep(5) + # 鍒ゆ柇鏄惁鎴愬姛鍒涘缓 + assert test_package_list.is_create_success(create_package_name) + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_edit_package(self, data_read: dict, driver): + """ + 淇敼娴嬭瘯鍖� + :return: + """ + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鍕鹃�夋柊鍒涘缓鐨勬祴璇曞寘 + test_package_list.select_package_checkbox(TestPackageList.test_package_name) + # 鐐瑰嚮淇敼鎸夐挳 + test_package_list.click(test_package_list.es.edit_btn) + # 鑾峰彇淇敼鏁版嵁 + edit_data = data_read["edit"] + # 淇敼娴嬭瘯鍖� + test_package_name = test_package_list.edit_package(edit_data) + TestPackageList.test_package_name = test_package_name + time.sleep(5) + # 鏍¢獙鏄惁淇敼鎴愬姛 + flag = test_package_list.verify_edit_success(test_package_name, edit_data) + # 鍒囨崲鍒颁笂涓�灞俰frame + test_package_list.switch_parent_iframe() + # 鐐瑰嚮鍏抽棴鎸夐挳 + test_package_list.click(test_package_list.es.edit_cancel_btn) + assert flag + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_add_member(self, data_read: dict, driver): + """ + 鏂板璇勬祴浜哄憳 + :param data_read: + :param driver: + :return: + """ + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鐐瑰嚮娴嬭瘯鍖呭悕绉� + test_package_list.click_package_name(TestPackageList.test_package_name) + time.sleep(5) + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鏂板娴嬭瘎浜哄憳 + member_email = member_detail.add_member(data_read["add"]) + TestPackageList.member_email = member_email + time.sleep(5) + # 鏍¢獙鏄惁鏂板鎴愬姛 + assert member_detail.is_create_success(member_email) + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_edit_member(self, data_read: dict, driver): + """ + 淇敼娴嬭瘎浜哄憳 + :param data_read: + :param driver: + :return: + """ + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 淇敼娴嬭瘎浜哄憳 + member_email = member_detail.edit_member(TestPackageList.member_email, data_read["edit"]) + TestPackageList.member_email = member_email + time.sleep(5) + # 鏍¢獙鏄惁淇敼鎴愬姛 + assert member_detail.is_edit_success(TestPackageList.member_email, data_read["edit"]) + + + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_export_member(self, data_read: dict, driver): + """瀵煎嚭""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + old_file_names.append(filename) + + # 鐐瑰嚮瀵煎嚭鎸夐挳 + member_detail.click(member_detail.es.export_btn) + # 鐐瑰嚮纭妗嗙‘璁� + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + new_file_names.append(filename) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + assert True + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_export_url(self, data_read: dict, driver): + """瀵煎嚭娴嬭瘯閾炬帴""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + old_file_names.append(filename) + + # 鐐瑰嚮瀵煎嚭娴嬭瘯閾炬帴鎸夐挳 + member_detail.click(member_detail.es.export_url_btn) + # 鐐瑰嚮纭妗嗙‘璁� + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + new_file_names.append(filename) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + assert True + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_import(self, data_read: dict, driver): + """鎵归噺瀵煎叆""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴瀵煎叆鏂囦欢璺緞 + file_path = root_path + r"\import\member_import.xlsx" + # 鐐瑰嚮鎵归噺瀵煎叆鎸夐挳 + member_detail.click(member_detail.es.import_btn) + # 鍙戦�佹枃浠惰矾寰勫埌鏂囦欢涓婁紶杈撳叆妗� + member_detail.fill(member_detail.es.import_input, file_path) + time.sleep(2) + # 鐐瑰嚮瀵煎叆鎸夐挳 + member_detail.click(member_detail.es.import_confirm_btn) + time.sleep(2) + # 鍒ゆ柇鏄惁瀵煎叆鎴愬姛 + try: + member_detail.get_ele(member_detail.es.import_success_text, timeout=10) + # 鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn) + assert True + except TimeoutException: + try: + # 鐐瑰嚮纭鎸夐挳锛屽鏋滀笉瀛樺湪鍒欎笉鐐瑰嚮 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + except TimeoutException: + pass + assert False + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_send_email(self, data_read: dict, driver): + """鍙戦�侀偖浠�""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鍕鹃�塼able澶村閫夋 + member_detail.click(member_detail.es.table_thead_checkbox) + # 鍕鹃�変笉鍙戦�佺殑娴嬭瘎浜哄憳 + member_detail.unselect_email_checkbox(TestPackageList.member_email) + # 鐐瑰嚮鍙戦�侀偖浠舵寜閽� + member_detail.click(member_detail.es.send_email_btn) + # 鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + time.sleep(2) + # 鍐嶆鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + # 鐐瑰嚮鏌ョ湅鍙戦�佺姸鎬佹寜閽� + member_detail.click(member_detail.es.send_status_btn) + time.sleep(5) + # 鍒囨崲鍒颁笂涓�灞俰frame + member_detail.switch_parent_iframe() + # 鍒囨崲鍒板彂閫佺姸鎬乮frame + member_detail.switch_iframe(member_detail.es.send_status_iframe) + # 鑾峰彇鍒版墍鏈塼r鍒楄〃 + trs = member_detail.get_eles(member_detail.es.send_status_table_tr) + # 鍒ゆ柇鏁伴噺鏄惁澶т簬0 + if len(trs) > 0: + assert True + else: + assert False + # 鍒犻櫎鍙戦�佷换鍔� + # 鍕鹃�夋墍鏈夎褰� + member_detail.click(member_detail.es.table_thead_checkbox) + # 鐐瑰嚮鍒犻櫎鎸夐挳 + member_detail.click(member_detail.es.delete_btn) + # 鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + # 鍏抽棴鏍囩 + # 鍒涘缓home椤甸潰瀵硅薄 + home = HomePage(driver) + # 鍏抽棴鍙戦�佺姸鎬侀〉闈� + home.close_tab(member_detail.es.tab_name_send_status) + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_send_sms(self, data_read: dict, driver): + """鍙戦�佺煭淇�""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鍕鹃�塼able澶村閫夋 + member_detail.click(member_detail.es.table_thead_checkbox) + # 鍕鹃�変笉鍙戦�佺殑娴嬭瘎浜哄憳 + member_detail.unselect_email_checkbox(TestPackageList.member_email) + # 鐐瑰嚮鍙戦�侀偖浠舵寜閽� + member_detail.click(member_detail.es.send_sms_btn) + # 鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + time.sleep(2) + # 鍐嶆鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + # 鐐瑰嚮鏌ョ湅鍙戦�佺姸鎬佹寜閽� + member_detail.click(member_detail.es.send_status_btn) + time.sleep(5) + # 鍒囨崲鍒颁笂涓�灞俰frame + member_detail.switch_parent_iframe() + # 鍒囨崲鍒板彂閫佺姸鎬乮frame + member_detail.switch_iframe(member_detail.es.send_status_iframe) + # 鑾峰彇鍒版墍鏈塼r鍒楄〃 + trs = member_detail.get_eles(member_detail.es.send_status_table_tr) + # 鍒ゆ柇鏁伴噺鏄惁澶т簬0 + if len(trs) > 0: + assert True + else: + assert False + # 鍒犻櫎鍙戦�佷换鍔� + # 鍕鹃�夋墍鏈夎褰� + member_detail.click(member_detail.es.table_thead_checkbox) + # 鐐瑰嚮鍒犻櫎鎸夐挳 + member_detail.click(member_detail.es.delete_btn) + # 鐐瑰嚮纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + # 鍏抽棴鏍囩 + # 鍒涘缓home椤甸潰瀵硅薄 + home = HomePage(driver) + # 鍏抽棴鍙戦�佺姸鎬侀〉闈� + home.close_tab(member_detail.es.tab_name_send_status) + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_skip_report(self, data_read: dict, driver): + """璺宠浆鏌ョ湅鎶ュ憡椤甸潰""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鐐瑰嚮鏌ョ湅鎶ュ憡 + member_detail.click(member_detail.es.table_report_btn) + time.sleep(5) + # 杩斿洖涓婁竴灞俰frame + member_detail.switch_parent_iframe() + # 鍒ゆ柇鏄惁瀛樺湪鏌ョ湅鎶ュ憡鐨刬frame + try: + member_detail.get_ele(member_detail.es.report_iframe, timeout=10) + # 鍏抽棴鏍囩 + # 鍒涘缓home椤甸潰瀵硅薄 + home = HomePage(driver) + # 鍏抽棴鍙戦�佺姸鎬侀〉闈� + home.close_tab(member_detail.es.tab_name_send_status) + assert True + except TimeoutException: + assert False + + @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + def test_remove_member(self, data_read: dict, driver): + """ + 鍒犻櫎娴嬭瘎浜哄憳 + :param data_read: + :param driver: + :return: + """ + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鍕鹃�塼able澶村閫夋 + member_detail.click(member_detail.es.table_thead_checkbox) + # 鍕鹃�変笉鍒犻櫎鐨勬祴璇勪汉鍛� + member_detail.unselect_email_checkbox(TestPackageList.member_email) + # 鐐瑰嚮鍒犻櫎鎸夐挳 + member_detail.click(member_detail.es.delete_btn) + # 鐐瑰嚮鍒犻櫎纭鎸夐挳 + member_detail.click(member_detail.es.layer_confirm_btn, timeout=10) + # 鍒ゆ柇鍒犻櫎鏄惁鎴愬姛 + try: + member_detail.wait_visible(member_detail.es.operate_success_layer) + assert True + except TimeoutException: + assert False + # 鍒涘缓home椤甸潰瀵硅薄 + home = HomePage(driver) + # 鍏抽棴褰撳墠椤甸潰 + home.close_tab(member_detail.es.tab_name_member_detail) + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_edit_prompt(self, data_read: dict, driver): + """浜嬩腑鎻愮ず璇慨鏀�""" + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鍕鹃�夋柊鍒涘缓鐨勬祴璇曞寘 + test_package_list.select_package_checkbox(TestPackageList.test_package_name) + # 鐐瑰嚮浜嬩腑鎻愮ず璇寜閽� + test_package_list.click(test_package_list.es.hint_btn) + # 鍒囨崲鍒癷frame + test_package_list.switch_iframe(test_package_list.es.hint_iframe) + # 鐐瑰嚮绗洓涓緭鍏ユ + test_package_list.click(test_package_list.es.hint_textarea) + # 淇敼鍐呭 + test_package_list.fill(test_package_list.es.hint_modal_span, data_read["hint"]) + # 鐐瑰嚮淇濆瓨 + test_package_list.click(test_package_list.es.hint_modal_save_btn) + # 杩斿洖涓婁竴灞� + test_package_list.switch_parent_iframe() + # 鐐瑰嚮纭鎸夐挳 + test_package_list.click(test_package_list.es.layer_confirm_btn) + # 鍒ゆ柇鎿嶄綔鎴愬姛寮圭獥鏄惁瀛樺湪 + flag = True + try: + test_package_list.get_ele(test_package_list.es.operate_success_layer, timeout=20) + except TimeoutException: + flag = False + + if flag: + time.sleep(2) + # 鑾峰彇鍒板垎浜摼鎺� + url = test_package_list.get_share_url(TestPackageList.test_package_name) + # 鎵撳紑鏂版爣绛鹃〉鍔犺浇url + test_package_list.goto_new_table(url) + # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄 + share_add = ShareAddPage(driver) + # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺� + test_url = share_add.get_test_url(data_read["name"], data_read["email"]) + # 褰撳墠椤甸潰鎵撳紑閾炬帴 + share_add.goto(test_url) + # 鐐瑰嚮鎻愪氦鎸夐挳 + share_add.click(share_add.es.submit_btn, timeout=10) + # 鑾峰彇鏁版嵁 + info = data_read["info"] + # 濉啓鍩烘湰淇℃伅骞舵彁浜� + share_add.fill_info(data_read["email"], info["position"], info["dept"]) + # 鍒涘缓answer瀵硅薄 + answer_page = MAQAnswerPage(driver) + # 寮�濮嬬瓟棰� + flag = answer_page.answer(hint=data_read["hint"], question=data_read["question"]["MAQ"]) + # 绛斿畬棰樺叧闂綋鍓嶆爣绛鹃〉 + driver.close() + # 鍒囨崲鍒扮涓�涓爣绛鹃〉 + answer_page.switch_window(0) + # 缃戠粶寮傚父閲嶆柊绛旈 + if flag == "缃戠粶寮傚父": + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鍕鹃�夋柊鍒涘缓鐨勬祴璇曞寘 + test_package_list.select_package_checkbox(TestPackageList.test_package_name) + # 鑾峰彇鍒板垎浜摼鎺� + url = test_package_list.get_share_url(TestPackageList.test_package_name) + # 鎵撳紑鏂版爣绛鹃〉鍔犺浇url + test_package_list.goto_new_table(url) + # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄 + share_add = ShareAddPage(driver) + # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺� + test_url = share_add.get_test_url(data_read["name"], data_read["email"]) + # 褰撳墠椤甸潰鎵撳紑閾炬帴 + share_add.goto(test_url) + # 鐐瑰嚮鎻愪氦鎸夐挳 + share_add.click(share_add.es.submit_btn, timeout=10) + # 鑾峰彇鏁版嵁 + info = data_read["info"] + # 濉啓鍩烘湰淇℃伅骞舵彁浜� + share_add.fill_info(data_read["email"], info["position"], info["dept"]) + # 鍒涘缓answer瀵硅薄 + answer_page = MAQAnswerPage(driver) + # 寮�濮嬬瓟棰� + flag = answer_page.answer(hint=data_read["hint"], question=data_read["question"]["MAQ"]) + # 绛斿畬棰樺叧闂綋鍓嶆爣绛鹃〉 + driver.close() + # 鍒囨崲鍒扮涓�涓爣绛鹃〉 + answer_page.switch_window(0) + if flag is not None or not flag: + assert flag + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_verify_member_status(self, data_read: dict, driver): + """楠岃瘉娴嬭瘎浜哄憳鐘舵��""" + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鐐瑰嚮娴嬭瘯鍖呭悕绉� + test_package_list.click_package_name(TestPackageList.test_package_name) + time.sleep(5) + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟椤甸潰瀵硅薄 + member_detail = MemberDetailPage(driver) + # 鑾峰彇鍒楄〃 + tr = member_detail.get_eles(member_detail.es.table_data_tr)[0] + # 鑾峰彇褰撳墠鏃ユ湡 + now = datetime.now() + # 鎻愬彇骞淬�佹湀銆佹棩 + year = now.year + month = now.month + if month < 10: + month = "0" + str(month) + day = now.day + if day < 10: + day = "0" + str(day) + # 鎷兼帴鏃ユ湡 + date = f"{year}-{month}-{day}" + # 鑾峰彇绛旈寮�濮嬫椂闂� + start_time = tr.find_element(By.XPATH, "td[6]").text + # 鑾峰彇绛旈缁撴潫鏃堕棿 + end_time = tr.find_element(By.XPATH, "td[7]").text + # 鑾峰彇鐘舵�� + status = tr.find_element(By.XPATH, "td[12]/span").text + # 楠岃瘉 + if date in start_time and date in end_time and status == "瀹屾垚": + assert True + else: + assert False + # 鍒涘缓home椤甸潰瀵硅薄 + home = HomePage(driver) + # 鍏抽棴鍙戦�佺姸鎬侀〉闈� + home.close_tab(member_detail.es.tab_name_member_detail) + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_generate_export_report(self, data_read: dict, driver): + """閲嶆柊鐢熸垚骞跺鍑烘姤鍛�""" + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鍕鹃�夋祴璇曞寘 + test_package_list.select_package_checkbox(TestPackageList.test_package_name) + # 鐐瑰嚮璇勬祴鎶ュ憡鎸夐挳 + test_package_list.click(test_package_list.es.report_btn) + time.sleep(5) + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + old_file_names.append(filename) + + # 鍒涘缓report椤甸潰瀵硅薄 + report = ReportPage(driver) + # 鍕鹃�夋墍鏈夎褰� + report.click(report.es.table_thead_checkbox) + # 鐐瑰嚮閲嶆柊鐢熸垚鎶ュ憡骞跺鍑� + report.click(report.es.generate_export_btn) + time.sleep(2) + while True: + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + report.get_ele(report.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + new_file_names.append(filename) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + assert True + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_download_report(self, data_read: dict, driver): + """涓嬭浇宸茬敓鎴愭姤鍛�""" + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + old_file_names.append(filename) + + # 鍒涘缓report椤甸潰瀵硅薄 + report = ReportPage(driver) + # 鐐瑰嚮涓嬭浇宸茬敓鎴愭姤鍛� + report.click(report.es.download_report_btn) + time.sleep(2) + while True: + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + report.get_ele(report.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + new_file_names.append(filename) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + assert True + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_export_report(self, data_read: dict, driver): + """瀵煎嚭鎶ュ憡""" + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = listdir(dir_path) + # 鍒涘缓report椤甸潰瀵硅薄 + report = ReportPage(driver) + # 鐐瑰嚮涓嬭浇宸茬敓鎴愭姤鍛� + report.click(report.es.export_btn) + time.sleep(2) + + # 绛夊緟鍔犺浇妗嗘秷澶� + report.wait_layer_reload_hide() + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = listdir(dir_path) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + assert True + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_export_data(self, data_read: dict, driver): + """瀵煎嚭娴嬭瘯鏁版嵁""" + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = listdir(dir_path) + # 鍒涘缓report椤甸潰瀵硅薄 + report = ReportPage(driver) + # 鐐瑰嚮瀵煎嚭娴嬭瘯鏁版嵁鎸夐挳 + report.click(report.es.export_data_btn) + time.sleep(2) + + # 绛夊緟鍔犺浇妗嗘秷澶� + report.wait_layer_reload_hide() + + new_file_names = [] + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = listdir(dir_path) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍒ゆ柇鏂扮殑鏂囦欢鍚嶆槸鍚﹀寘鍚湭纭 + for file_name in new_file_names: + if "鏈‘璁�" in file_name: + new_file_names = listdir(dir_path) + break + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + + # 鑾峰彇涓や釜鍒楄〃涓殑宸泦 + result = set(old_file_names).symmetric_difference(set(new_file_names)) + result_list = list(result) + file_name = dir_path + "\\" + result_list[0] + # 璇诲彇鏂囦欢鏁版嵁 + data_list = read_excel(file_name, "Sheet1") + # 瀵煎嚭鐨勬暟鎹� + excel_data = data_list[3] + # 绛旈鐨勬暟鎹� + answer_data: dict = data_read["question"]["MAQ"] + # 瀵规瘮鏁版嵁 + for key in answer_data.keys(): + if str(excel_data[key]) != str(excel_data[key]): + print(key + "鏁版嵁閿欒") + # 鍒涘缓report椤甸潰瀵硅薄 + report = ReportPage(driver) + home = HomePage(driver) + # 鍏抽棴鏍囩椤� + home.close_tab(report.es.tab_name_report) + assert False + # 鍒涘缓report椤甸潰瀵硅薄 + report = ReportPage(driver) + home = HomePage(driver) + # 鍏抽棴鏍囩椤� + home.close_tab(report.es.tab_name_report) + assert True + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_hr_resend(self, data_read: dict, driver): + """HR閭欢琛ュ彂""" + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鐐瑰嚮娴嬭瘯鍖呭悕绉� + test_package_list.click_package_name(TestPackageList.test_package_name) + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟瀵硅薄 + member = MemberDetailPage(driver) + # 鐐瑰嚮鏌ョ湅鎶ュ憡閭欢鍙戦�佽褰� + member.click(member.es.report_send_log_btn) + time.sleep(5) + member.switch_parent_iframe() + # 鍒囨崲iframe + member.switch_iframe(member.es.report_send_log_iframe) + # 鑾峰彇琛ュ彂涔嬪墠鐨勯噸璇曟鏁� + before_resend_number = int(member.get_ele(member.es.resend_number_text).text) + # 鐐瑰嚮鍏ㄩ�夋寜閽� + member.click(member.es.table_thead_checkbox) + # 鐐瑰嚮HR閭欢琛ュ彂鎸夐挳 + member.click(member.es.hr_resend_btn) + # 鐐瑰嚮纭鎸夐挳 + member.click(member.es.layer_confirm_btn) + time.sleep(2) + # 绛夊緟鍔犺浇瀹屾垚 + while True: + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + member.get_ele(member.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + time.sleep(2) + # 鑾峰彇琛ュ彂涔嬪悗鐨勯噸璇曟鏁� + after_resend_number = int(member.get_ele(member.es.resend_number_text).text) + # 姣旇緝涓ゆ + if before_resend_number + 1 == after_resend_number: + assert True + else: + assert False + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_member_resend(self, data_read: dict, driver): + """娴嬭瘯鑰呴偖浠惰ˉ鍙�""" + # 鍒涘缓娴嬭瘎浜哄憳鍚嶅崟瀵硅薄 + member = MemberDetailPage(driver) + member.switch_parent_iframe() + # 鍒囨崲iframe + member.switch_iframe(member.es.report_send_log_iframe) + # 鑾峰彇琛ュ彂涔嬪墠鐨勯噸璇曟鏁� + before_resend_number = int(member.get_ele(member.es.resend_number_text).text) + # 鐐瑰嚮鍏ㄩ�夋寜閽� + member.click(member.es.table_thead_checkbox) + # 鐐瑰嚮娴嬭瘯鑰呴偖浠惰ˉ鍙戞寜閽� + member.click(member.es.member_resend_btn) + # 鐐瑰嚮纭鎸夐挳 + member.click(member.es.layer_confirm_btn) + time.sleep(2) + # 绛夊緟鍔犺浇瀹屾垚 + while True: + try: + # 鍔犺浇妗嗗瓨鍦ㄧ潯鐪犱竴绉� + member.get_ele(member.es.layer_reload) + time.sleep(1) + except NoSuchElementException: + # 涓嶅瓨鍦ㄨ烦鍑哄惊鐜� + break + time.sleep(2) + # 鑾峰彇琛ュ彂涔嬪悗鐨勯噸璇曟鏁� + after_resend_number = int(member.get_ele(member.es.resend_number_text).text) + # 姣旇緝涓ゆ + if before_resend_number + 1 == after_resend_number: + assert True + else: + assert False + home = HomePage(driver) + # 鍏抽棴鏍囩椤� + home.close_tab(member.es.tab_name_report_send_log) + home.close_tab(member.es.tab_name_member_detail) + + # @pytest.mark.parametrize('data_read', ["memberDetail"], indirect=True) + # def test_recover_package(self, data_read: dict, driver): + # # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + # test_package_list = TestPackageListPage(driver) + # # 鐐瑰嚮鍥炴敹娴嬭瘯鍖呮寜閽� + # test_package_list.click(test_package_list.es.recover_btn) + # # 鐐瑰嚮纭鎸夐挳 + # test_package_list.click(test_package_list.es.layer_confirm_btn) + # time.sleep(2) + # # 鍐嶆鐐瑰嚮纭鎸夐挳 + # test_package_list.click(test_package_list.es.layer_confirm_btn) + # # 鑾峰彇鍒板垎浜摼鎺� + # url = test_package_list.get_share_url(TestPackageList.test_package_name) + # # 鎵撳紑鏂版爣绛鹃〉鍔犺浇url + # test_package_list.goto_new_table(url) + # # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄 + # share_add = ShareAddPage(driver) + # # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺� + # test_url = share_add.get_test_url(data_read["edit"]["name"], data_read["edit"]["email"]) + # # 褰撳墠椤甸潰鎵撳紑閾炬帴 + # share_add.goto(test_url) + # # 鍒ゆ柇鏄惁鑳藉鑾峰彇鍒版彁浜ゆ寜閽� + # try: + # share_add.get_ele(share_add.es.submit_btn, timeout=10) + # assert False + # except TimeoutException: + # assert True + # + # # 鍏抽棴褰撳墠鏍囩椤� + # driver.close() + # # 鍒囨崲鍒扮涓�涓爣绛鹃〉 + # share_add.switch_window(0) + + + + + +if __name__ == '__main__': + pytest.main(["-s", __file__]) + + + + + + + + + + diff --git a/testcase/test_3export_test_data.py b/testcase/test_3export_test_data.py new file mode 100644 index 0000000..ad11842 --- /dev/null +++ b/testcase/test_3export_test_data.py @@ -0,0 +1,124 @@ +import os +from datetime import datetime +import time +from selenium.webdriver.common.by import By +from selenium.common.exceptions import TimeoutException +from selenium.common.exceptions import NoSuchElementException + +import pytest +from comm.comm import * +from comm.read_data import * +from comm.write_data import * +from selenium import webdriver +from po.login_page import LoginPage +from po.home_page import HomePage +from po.export_test_data_page import ExportTestDataPage +from po.member_detail_page import MemberDetailPage +from po.report_page import ReportPage +from po.share_add_page import ShareAddPage +from po.maq_answer_page import MAQAnswerPage +from po.caq_answer_page import CAQAnswerPage +from comm.my_random import * + + +class TestPackageList: + driver = None + test_package_name = "MAQV2鑷姩娴嬭瘯鍖�-20230727155906" + member_email = None + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_export_test_data(self, data_read: dict, driver): + home = HomePage(driver) + home.menu_select("娴嬭瘯鍖呯鐞�/瀵煎嚭娴嬭瘯鏁版嵁") + time.sleep(5) + export = ExportTestDataPage(driver) + # 閫夋嫨浜у搧鍖� + export.select(export.es.product_select, export.es.product_option, data_read["edit"]["product"]) + + # 鑾峰彇褰撳墠鏃ユ湡 + now = datetime.now() + # 鎻愬彇骞淬�佹湀銆佹棩 + year = now.year + month = now.month + if month < 10: + month = "0" + str(month) + day = now.day + if day < 10: + day = "0" + str(day) + # 鎷兼帴鏃ユ湡 + date = f"{year}-{month}-{day}" + # 杈撳叆瀹屾垚鏃堕棿 + export.fill(export.es.test_begin_time_input, date) + export.fill(export.es.test_end_time_input, date) + # 鐐瑰嚮鎼滅储鎸夐挳 + export.click(export.es.search_btn) + time.sleep(5) + + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = listdir(dir_path) + + # 鍕鹃�� + export.click(export.es.table_thead_checkbox) + # 鐐瑰嚮瀵煎嚭 + export.click(export.es.export_test_data_btn) + + # 绛夊緟鍔犺浇妗嗘秷澶� + export.wait_layer_reload_hide() + + new_file_names = [] + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = listdir(dir_path) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍒ゆ柇鏂扮殑鏂囦欢鍚嶆槸鍚﹀寘鍚湭纭 + for file_name in new_file_names: + if "鏈‘璁�" in file_name: + new_file_names = listdir(dir_path) + break + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + + # 鑾峰彇涓や釜鍒楄〃涓殑宸泦 + result = set(old_file_names).symmetric_difference(set(new_file_names)) + result_list = list(result) + file_name = dir_path + "\\" + result_list[0] + # 璇诲彇鏂囦欢鏁版嵁 + data_list = read_excel(file_name, "Sheet1") + # 瀵煎嚭鐨勬暟鎹� + excel_data = data_list[3] + # 绛旈鐨勬暟鎹� + answer_data: dict = data_read["question"]["MAQ"] + # 瀵规瘮鏁版嵁 + for key in answer_data.keys(): + if excel_data[key] != answer_data[key]["answer"]: + print(key + "鏁版嵁閿欒") + assert False + assert True + + +if __name__ == '__main__': + pytest.main(["-s", __file__]) + + + + + + + + + + diff --git a/testcase/test_caq.py b/testcase/test_caq.py index cd7bf3c..30cac35 100644 --- a/testcase/test_caq.py +++ b/testcase/test_caq.py @@ -1,6 +1,7 @@ from datetime import datetime import time from selenium.webdriver.common.by import By +from selenium.common.exceptions import TimeoutException import pytest from selenium import webdriver @@ -16,149 +17,57 @@ driver = None test_package_name = "CAQ鑷姩娴嬭瘯鍖�-20230718101350" - @pytest.mark.parametrize('data_read', ["login"], indirect=True) - def test_login(self, data_read: dict): - """ - 鎵撳紑椤甸潰骞惰繘琛岀櫥褰曟祴璇� - :param data_read: 鎵ц鏁版嵁璇诲彇鐨勫嚱鏁板苟鑾峰彇鍒拌繑鍥炲�� - :return: - """ - TestCAQ.driver = webdriver.Chrome() - driver = TestCAQ.driver - login_page = LoginPage(driver) - try: - # 鎵撳紑閾炬帴 - driver.get(data_read["url"]) - except: - # 閾炬帴鎵撳紑鍑虹幇寮傚父璇存槑閾炬帴鏃犳硶璁块棶,鎹曡幏寮傚父浣嗕笉鍋氬鐞� - pass - - # 娴忚鍣ㄧ獥鍙f渶澶у寲 - driver.maximize_window() - # 鑾峰彇鍒板埛鏂版寜閽苟姣�10绉掔偣鍑讳竴娆�,鐭ラ亾鍒锋柊鎸夐挳娑堝け - while True: - try: - # 鍒ゆ柇鎵撳紑鐨勯〉闈㈡槸鍚﹀瓨鍦ㄥ埛鏂版寜閽� - reload_btn = login_page.get_element((By.XPATH, "//div[@id='buttons']/div/button[@id='reload-button']")) - # 鐐瑰嚮鍒锋柊鎸夐挳 - reload_btn.click() - time.sleep(10) - except: - # 鍑虹幇寮傚父琛ㄧず涓嶅瓨鍦ㄥ埛鏂版寜閽� - # 鎺ョ潃鍒ゆ柇鏄惁瀛樺湪nginx error! - try: - nginx_error = login_page.get_element((By.XPATH, "//strong[text() = 'nginx error!']")) - # 瀛樺湪鍒欑潯鐪�10绉� - time.sleep(10) - except: - break - - login_page.login(data_read["username"], data_read["password"], data_read["code"]) - time.sleep(2) - assert login_page.is_login_success() - @pytest.mark.parametrize('data_read', ["CAQ"], indirect=True) - def test_create_package(self, data_read: dict): + def test_create_package(self, data_read: dict, driver): """ 鍒涘缓娴嬭瘯鍖� :param data_read: 璇诲彇鏁版嵁 :return: """ - # 鑾峰彇driver - driver = TestCAQ.driver # 鍒涘缓home椤甸潰鐨勫璞� home_page = HomePage(driver) # 鐐瑰嚮宸︿晶鑿滃崟杩涘叆椤甸潰 home_page.menu_select(data_read["menu"]) # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 test_package_list = TestPackageListPage(driver) - # 鐐瑰嚮鍒涘缓鎸夐挳 - test_package_list.create_btn() - # 鑾峰彇褰撳墠鏃堕棿 - current_time = datetime.now() - # 杞崲涓哄瓧绗︿覆 - time_str = current_time.strftime("%Y%m%d%H%M%S") - # 鍒涘缓娴嬭瘯鍖呭~鍐欑殑鍙傛暟 - # 娴嬭瘯鍖呭悕绉� - test_package_name = "CAQ鑷姩娴嬭瘯鍖�-" + time_str - # 璁剧疆娴嬭瘯鍖呭悕绉颁负绫诲彉閲� - TestCAQ.test_package_name = test_package_name - # 鑾峰彇鍒涘缓娴嬭瘯鍖呯殑鏁版嵁 - create_data = data_read["add"] - # 濉啓娴嬭瘯鍖呭悕绉� - test_package_list.testPackageName_input(test_package_name) - # 濉啓鎶ュ憡浼佷笟鍚嶇О - test_package_list.reportCompanyName_input(create_data["company"]) - # 閫夋嫨娴嬭瘯鍖呯被鍨� - test_package_list.testPackageType_select(create_data["type"]) - # 閫夋嫨浜у搧鍖� - test_package_list.prodTree_select(create_data["product"]) - # 杈撳叆hr閭 - test_package_list.hrReportEmail_input(create_data["hrEmail"]) - # 杈撳叆鏈夋晥鏈� - test_package_list.invalidTime_input(create_data["invalid"]) - # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷 - test_package_list.testTemplateLangType_select(create_data["memberLang"]) - # 閫夋嫨HR閭欢璇█绫诲瀷 - test_package_list.hrTemplateLangType_select(create_data["hrReportLang"]) - # 閫夋嫨鎶ュ憡妯℃澘 - test_package_list.reportTemplate_select(create_data["reportTemplate"]) - # 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛� - test_package_list.autoSendReport_checkbox() - # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷 - test_package_list.memberReportLangType_select(create_data["memberReportLang"]) - # 鐐瑰嚮纭鎸夐挳 - test_package_list.add_confirm() - time.sleep(2) - # 鍒ゆ柇鏄惁鎴愬姛鍒涘缓 - assert test_package_list.is_create_success(test_package_name) + # 鍒涘缓娴嬭瘯鍖呭苟鎺ユ敹鍒涘缓鐨勬祴璇曞寘鍚嶇О + create_package_name = test_package_list.create_package(data_read["add"]) + # 璧嬪�煎埌绫诲彉閲� + TestCAQ.test_package_name = create_package_name time.sleep(5) + # 鍒ゆ柇鏄惁鎴愬姛鍒涘缓 + assert test_package_list.is_create_success(create_package_name) @pytest.mark.parametrize('data_read', ["CAQ"], indirect=True) - def test_open_url(self, data_read: dict): + def test_open_url(self, data_read: dict, driver): """ 鎵撳紑鍒嗕韩閾炬帴 :return: """ - # 鑾峰彇driver - driver = TestCAQ.driver - # # 鍒涘缓home椤甸潰鐨勫璞� - # home_page = HomePage(driver) - # # 鐐瑰嚮宸︿晶鑿滃崟杩涘叆椤甸潰 - # home_page.menu_select(data_read["menu"]) # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 test_package_list = TestPackageListPage(driver) - # 鍕鹃�夋柊鍒涘缓鐨勬祴璇曞寘 - test_package_list.click_package_checkbox(TestCAQ.test_package_name) - # 鐐瑰嚮鐢熸垚鍒嗕韩閾炬帴鎸夐挳 - test_package_list.click_share_1_btn() - # 鑾峰彇鍒皍rl - url = test_package_list.get_share_url() + # 鑾峰彇鍒板垎浜摼鎺� + url = test_package_list.get_share_url(TestCAQ.test_package_name) # 鎵撳紑鏂版爣绛鹃〉鍔犺浇url - test_package_list.open_new_table_to_url(url) + test_package_list.goto_new_table(url) # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄 share_add = ShareAddPage(driver) # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺� name = random_string(8) email = name + "@gmail.com" - test_url = share_add.page_default_operation(name, email) + test_url = share_add.get_test_url(name, email) # 褰撳墠椤甸潰鎵撳紑閾炬帴 - driver.get(test_url) + share_add.goto(test_url) # 鐐瑰嚮鎻愪氦鎸夐挳 - share_add.submit_btn() + share_add.click(share_add.es.submit_btn, timeout=10) # 鑾峰彇鏁版嵁 info = data_read["info"] # 濉啓鍩烘湰淇℃伅骞舵彁浜� share_add.fill_info(email, info["position"], info["dept"]) - time.sleep(5) - def test_answer(self): - # 鑾峰彇driver - driver = TestCAQ.driver + def test_answer(self, driver): # 鍒涘缓answer瀵硅薄 answer_page = CAQAnswerPage(driver) - # 鐐瑰嚮寮�濮嬫祴璇� - answer_page.start_btn() # 寮�濮嬬瓟棰� flag = answer_page.answer() # 绛斿畬棰樺叧闂綋鍓嶆爣绛鹃〉 @@ -169,14 +78,17 @@ assert flag return - def test_delete_package(self): - # 鑾峰彇driver - driver = TestCAQ.driver + def test_delete_package(self, driver): # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 test_package_list = TestPackageListPage(driver) # 鍒犻櫎娴嬭瘯鍖� - test_package_list.delete_package() - time.sleep(5) + test_package_list.delete_package(TestCAQ.test_package_name) + # 鍒ゆ柇鍒犻櫎鏄惁鎴愬姛 + try: + test_package_list.wait_visible(test_package_list.es.operate_success_layer) + assert True + except TimeoutException: + assert False # 鍏抽棴 driver.quit() diff --git a/testcase/test_group_report.py b/testcase/test_group_report.py new file mode 100644 index 0000000..dd365d2 --- /dev/null +++ b/testcase/test_group_report.py @@ -0,0 +1,147 @@ +import os +from datetime import datetime +import time +from selenium.webdriver.common.by import By +from selenium.common.exceptions import TimeoutException +from selenium.common.exceptions import NoSuchElementException + +import pytest +from comm.comm import * +from comm.read_data import * +from comm.write_data import * +from selenium import webdriver +from po.login_page import LoginPage +from po.home_page import HomePage +from po.group_report_page import GroupReportPage +from po.member_detail_page import MemberDetailPage +from po.report_page import ReportPage +from po.share_add_page import ShareAddPage +from po.maq_answer_page import MAQAnswerPage +from po.caq_answer_page import CAQAnswerPage +from comm.my_random import * + + +class TestGroupReport: + driver = None + name = "MAQV2鑷姩娴嬭瘯鍖�-20230727155906" + member_email = None + + @pytest.mark.parametrize('data_read', ["groupReport"], indirect=True) + def test_add(self, data_read: dict, driver): + home = HomePage(driver) + home.menu_select("娴嬭瘯鍖呯鐞�/缁勫埆鎶ュ憡") + group = GroupReportPage(driver) + # 鐐瑰嚮鏂板鎸夐挳 + group.click(group.es.add_btn) + # 鍒囨崲iframe + group.switch_iframe(group.es.add_iframe) + # 鑾峰彇闅忔満鍚嶇О + name = "缁勫埆鎶ュ憡-" + random_string(8) + TestGroupReport.name = name + # 杈撳叆鍚嶇О + group.fill(group.es.add_name_input, name) + # 鏂囦欢璺緞 + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴鏂囦欢璺緞 + if "\\testcase" in root_path: + root_path = root_path[0:root_path.rfind("\\testcase")] + file_path = root_path + r"\data\MAQ_group_data.xlsx" + # 浼犲叆鏂囦欢 + group.fill(group.es.add_load_file_input, file_path) + # 鍒囨崲iframe + group.switch_parent_iframe() + # 鐐瑰嚮纭鎸夐挳 + group.click(group.es.layer_confirm_btn) + time.sleep(10) + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_group_data(self, data_read: dict, driver): + group = GroupReportPage(driver) + # 杈撳叆鍚嶇О + group.fill(group.es.add_name_input, TestGroupReport.name) + # 鐐瑰嚮鎼滅储鎸夐挳 + group.click(group.es.search_btn) + + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + if "\\testcase" in root_path: + root_path = root_path[0:root_path.rfind("\\testcase")] + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + old_file_names.append(filename) + + # 鐐瑰嚮缁勫埆鏁版嵁 + group.click(group.es.group_data_btn) + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + new_file_names.append(filename) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + + @pytest.mark.parametrize('data_read', ["testPackageList"], indirect=True) + def test_group_report(self, data_read: dict, driver): + group = GroupReportPage(driver) + # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰� + root_path = os.getcwd() + # 鎷兼帴涓嬭浇鏂囦欢鐩綍 + if "\\testcase" in root_path: + root_path = root_path[0:root_path.rfind("\\testcase")] + dir_path = root_path + r"\download" + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + old_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + old_file_names.append(filename) + + # 鐐瑰嚮缁勫埆鏁版嵁 + group.click(group.es.group_report_btn) + + i = 0 + while i < data_read["downloadWaitTime"]: + # 鑾峰彇鐩綍涓嬫墍鏈夋枃浠� + new_file_names = [] + for filename in os.listdir(dir_path): + if os.path.isfile(os.path.join(dir_path, filename)): + new_file_names.append(filename) + # 鍒ゆ柇鏃ф枃浠剁殑鏁伴噺涓庢柊鏂囦欢鐨勬暟閲忔槸鍚︾浉鍚岋紝鐩稿悓鍒欑潯鐪犱竴绉� + if len(old_file_names) == len(new_file_names): + time.sleep(1) + i += 1 + continue + else: + # 鍚﹀垯鐩存帴閫�鍑哄惊鐜� + break + else: + assert False + + +if __name__ == '__main__': + pytest.main(["-s", __file__]) + + + + + + + + + + diff --git a/testcase/test_login.py b/testcase/test_login.py new file mode 100644 index 0000000..9391e68 --- /dev/null +++ b/testcase/test_login.py @@ -0,0 +1,53 @@ +from datetime import datetime +import time +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys + +import pytest +from selenium import webdriver +from po.login_page import LoginPage +from po.home_page import HomePage +from po.test_package_list_page import TestPackageListPage +from po.share_add_page import ShareAddPage +from po.maq_answer_page import MAQAnswerPage +from comm.my_random import * + + +class TestLogin: + driver = None + + @pytest.mark.parametrize('data_read', ["login"], indirect=True) + def test_login(self, data_read: dict, driver): + """ + 鎵撳紑椤甸潰骞惰繘琛岀櫥褰曟祴璇� + :param data_read: 鎵ц鏁版嵁璇诲彇鐨勫嚱鏁板苟鑾峰彇鍒拌繑鍥炲�� + :return: + """ + login = LoginPage(driver) + + # 鎵撳紑閾炬帴 + login.goto(data_read["url"]) + # 娴忚鍣ㄧ獥鍙f渶澶у寲 + driver.maximize_window() + # 閫氳繃鏍囬鍒ゆ柇鏄惁璁块棶姝g‘ + while True: + if driver.title == "OTS": + # 鏍囬绛変簬OTS閫�鍑哄惊鐜� + break + else: + # 鏍囬涓嶇瓑浜嶰TS浼戠湢 + time.sleep(5) + # 鐧诲綍 + login.login(data_read["username"], data_read["password"], data_read["code"]) + # 鏂█鐧诲綍鏄惁鎴愬姛 + assert login.login_assert() + + # def test_logout(self): + # driver = TestLogin.driver + # home = HomePage(driver) + # # 鐧诲嚭 + # home.logout() + + +if __name__ == '__main__': + pytest.main(["-s", __file__]) diff --git a/testcase/test_maq.py b/testcase/test_maq.py index 37f5a75..c7123eb 100644 --- a/testcase/test_maq.py +++ b/testcase/test_maq.py @@ -1,6 +1,7 @@ from datetime import datetime import time from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys import pytest from selenium import webdriver @@ -14,7 +15,7 @@ class TestMAQ: driver = None - test_package_name = None + test_package_name = "MAQ鑷姩娴嬭瘯鍖�-20230720170011" @pytest.mark.parametrize('data_read', ["login"], indirect=True) def test_login(self, data_read: dict): @@ -53,7 +54,14 @@ except: break - login_page.login(data_read["username"], data_read["password"], data_read["code"]) + # 杈撳叆鐢ㄦ埛鍚� + login_page.send_keys("username_ipt", data_read["username"]) + # 杈撳叆瀵嗙爜 + login_page.oper_elem("password_ipt", data_read["password"]) + # 杈撳叆楠岃瘉鐮� + login_page.oper_elem("code_ipt", data_read["code"]) + # 鐐瑰嚮鐧诲綍鎸夐挳 + login_page.oper_elem("login_btn") time.sleep(2) assert login_page.is_login_success() @@ -72,8 +80,13 @@ home_page.menu_select(data_read["menu"]) # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 test_package_list = TestPackageListPage(driver) + # 鍒囨崲鍒版祴璇曞寘鍒楄〃椤甸潰iframe + test_package_list.oper_elem("this_iframe") + time.sleep(2) # 鐐瑰嚮鍒涘缓鎸夐挳 - test_package_list.create_btn() + test_package_list.oper_elem("create_btn") + # 鍒囨崲鍒版坊鍔犵獥鍙g殑iframe + test_package_list.oper_elem("add_iframe") # 鑾峰彇褰撳墠鏃堕棿 current_time = datetime.now() # 杞崲涓哄瓧绗︿覆 @@ -86,33 +99,43 @@ # 鑾峰彇鍒涘缓娴嬭瘯鍖呯殑鏁版嵁 create_data = data_read["add"] # 濉啓娴嬭瘯鍖呭悕绉� - test_package_list.testPackageName_input(test_package_name) + test_package_list.oper_elem("add_testPackageName_input", test_package_name) # 濉啓鎶ュ憡浼佷笟鍚嶇О - test_package_list.reportCompanyName_input(create_data["company"]) + test_package_list.oper_elem("add_reportCompanyName_input", create_data["company"]) # 閫夋嫨娴嬭瘯鍖呯被鍨� - test_package_list.testPackageType_select(create_data["type"]) + test_package_list.oper_elem("add_testPackageType_select", create_data["type"]) + # 鐐瑰嚮浜у搧鍖呮寜閽� + test_package_list.oper_elem("add_prodTree_btn") + # 鍒囨崲鍒皃rodTree鐨刬frame + test_package_list.oper_elem("prodTree_iframe") # 閫夋嫨浜у搧鍖� - test_package_list.prodTree_select(create_data["product"]) - # 杈撳叆hr閭 - test_package_list.hrReportEmail_input(create_data["hrEmail"]) - # 杈撳叆鏈夋晥鏈� - test_package_list.invalidTime_input(create_data["invalid"]) - # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷 - test_package_list.testTemplateLangType_select(create_data["memberLang"]) - # 閫夋嫨HR閭欢璇█绫诲瀷 - test_package_list.hrTemplateLangType_select(create_data["hrReportLang"]) - # 閫夋嫨鎶ュ憡妯℃澘 - test_package_list.reportTemplate_select(create_data["reportTemplate"]) - # 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛� - test_package_list.autoSendReport_checkbox() - # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷 - test_package_list.memberReportLangType_select(create_data["memberReportLang"]) + test_package_list.oper_elem("prodTree_option", create_data["product"]) + # 鍥炲埌涓婁竴灞俰frame + test_package_list.switch_parent_iframe() # 鐐瑰嚮纭鎸夐挳 - test_package_list.add_confirm() - time.sleep(2) + test_package_list.oper_elem("prodTree_confirm_btn") + # 杈撳叆hr閭 + test_package_list.oper_elem("add_hrEmail_input", create_data["hrEmail"]) + # 杈撳叆鏈夋晥鏈熷苟鐐瑰嚮浠ュ彇娑堟棩鏈熼�夋嫨鍣ㄦ樉绀� + test_package_list.oper_elem("add_invalidTime_input", create_data["invalid"]) + test_package_list.oper_elem("add_invalidTime_btn") + # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷 + test_package_list.oper_elem("add_templateLangType_select", create_data["memberLang"]) + # 閫夋嫨HR閭欢璇█绫诲瀷 + test_package_list.oper_elem("add_hrTemplateLangType_select", create_data["hrReportLang"]) + # 閫夋嫨鎶ュ憡妯℃澘 + test_package_list.oper_elem("add_reportTemplateId_select", create_data["reportTemplate"]) + # 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛� + test_package_list.oper_elem("add_autoSendReport_checkbox") + # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷 + test_package_list.oper_elem("add_memberTemplateLangType_select", create_data["memberReportLang"]) + # 鍒囨崲鍒颁笂涓�灞俰frame + test_package_list.switch_parent_iframe() + # 鐐瑰嚮纭鎸夐挳 + test_package_list.oper_elem("add_confirm_btn") + time.sleep(5) # 鍒ゆ柇鏄惁鎴愬姛鍒涘缓 assert test_package_list.is_create_success(test_package_name) - time.sleep(5) @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True) def test_open_url(self, data_read: dict): @@ -127,9 +150,16 @@ # 鍕鹃�夋柊鍒涘缓鐨勬祴璇曞寘 test_package_list.click_package_checkbox(TestMAQ.test_package_name) # 鐐瑰嚮鐢熸垚鍒嗕韩閾炬帴鎸夐挳 - test_package_list.click_share_1_btn() + test_package_list.oper_elem("share_1_btn") + # 鍒囨崲鍒板垎浜獥鍙g殑iframe + test_package_list.oper_elem("share_iframe") # 鑾峰彇鍒皍rl - url = test_package_list.get_share_url() + url = test_package_list.oper_elem("share_url_text") + # 鍒囨崲鍒颁笂涓�灞俰frame + test_package_list.switch_parent_iframe() + # 鐐瑰嚮鍏抽棴鎸夐挳 + test_package_list.oper_elem("share_cancel_btn") + time.sleep(1) # 鎵撳紑鏂版爣绛鹃〉鍔犺浇url test_package_list.open_new_table_to_url(url) # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄 @@ -137,16 +167,24 @@ # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺� name = random_string(8) email = name + "@gmail.com" - test_url = share_add.page_default_operation(name, email) + # 濉啓閭鍜屽鍚嶅苟鎻愪氦 + share_add.oper_elem("name_input", name) + share_add.oper_elem("email_input", email) + share_add.oper_elem("submit_btn") + # 鑾峰彇鍒版祴璇曢摼鎺� + test_url = share_add.oper_elem("test_url_text") # 褰撳墠椤甸潰鎵撳紑閾炬帴 driver.get(test_url) # 鐐瑰嚮鎻愪氦鎸夐挳 - share_add.submit_btn() + share_add.oper_elem("submit_btn") # 鑾峰彇鏁版嵁 info = data_read["info"] # 濉啓鍩烘湰淇℃伅骞舵彁浜� - share_add.fill_info(email, info["position"], info["dept"]) - time.sleep(5) + share_add.oper_elem("fill_email_input", email) + share_add.oper_elem("fill_position_input", info["position"]) + share_add.oper_elem("fill_dept_input", info["dept"]) + share_add.oper_elem("submit_btn") + time.sleep(3) def test_answer(self): # 鑾峰彇driver @@ -154,13 +192,11 @@ # 鍒涘缓answer瀵硅薄 answer_page = MAQAnswerPage(driver) # 鐐瑰嚮寮�濮嬫祴璇� - answer_page.start_btn() + answer_page.oper_elem("start_btn") # 寮�濮嬬瓟棰� flag = answer_page.answer() # 绛斿畬棰樺叧闂綋鍓嶆爣绛鹃〉 driver.close() - # 鍒囨崲鍒扮涓�涓爣绛鹃〉 - answer_page.switch_window(0) if flag is not None or not flag: assert flag return @@ -170,9 +206,13 @@ driver = TestMAQ.driver # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 test_package_list = TestPackageListPage(driver) + # 鍒囨崲鍒扮涓�涓爣绛鹃〉 + test_package_list.switch_window(0) + test_package_list.oper_elem("this_iframe") # 鍒犻櫎娴嬭瘯鍖� - test_package_list.delete_package() - time.sleep(5) + test_package_list.oper_elem("delete_btn") + test_package_list.oper_elem("delete_confirm_btn") + time.sleep(3) # 鍏抽棴 driver.quit() diff --git a/testcase/test_product_accredit.py b/testcase/test_product_accredit.py new file mode 100644 index 0000000..27ae295 --- /dev/null +++ b/testcase/test_product_accredit.py @@ -0,0 +1,78 @@ +from datetime import datetime +import time +from selenium.webdriver.common.by import By +from selenium.common.exceptions import TimeoutException + +import pytest +from selenium import webdriver +from po.login_page import LoginPage +from po.home_page import HomePage +from po.product_accredit_page import ProductAccreditPage +from po.test_package_list_page import TestPackageListPage +from po.share_add_page import ShareAddPage +from po.caq_answer_page import CAQAnswerPage +from comm.my_random import * + + +class TestProductAccredit: + driver = None + test_package_name = "CAQ鑷姩娴嬭瘯鍖�-20230718101350" + + @pytest.mark.parametrize('data_read', ["productAccredit"], indirect=True) + def test_accredit(self, data_read: dict, driver): + """ + 浜у搧鍖呮巿鏉� + :param data_read: 璇诲彇鏁版嵁 + :return: + """ + # 鍒涘缓home椤甸潰鐨勫璞� + home_page = HomePage(driver) + # 鐐瑰嚮宸︿晶鑿滃崟杩涘叆椤甸潰 + home_page.menu_select(data_read["menu"]) + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + product = ProductAccreditPage(driver) + # 鎼滅储妗嗚緭鍏ヨ处鍙� + product.fill(product.es.search_username_input, data_read["username"]) + # 鐐瑰嚮鎼滅储鎸夐挳 + product.click(product.es.search_btn) + time.sleep(2) + # 鐐瑰嚮浜у搧鍖呮巿鏉冩寜閽� + product.click(product.es.product_btn) + time.sleep(2) + # 鍒囨崲iframe + product.switch_iframe(product.es.accredit_iframe) + # 閫夋嫨浜у搧鍖� + product.select(product.es.accredit_product_select, product.es.accredit_product_option, data_read["product"]) + product.click(product.es.accredit_temp_checkbox, timeout=10) + # 鐐瑰嚮浜у搧鍖呮巿鏉� + product.click(product.es.accredit_accredit_btn) + time.sleep(2) + product.switch_parent_iframe() + # 鐐瑰嚮纭鎸夐挳 + product.click(product.es.layer_confirm_btn) + time.sleep(2) + + # 閫�鍑虹櫥褰� + home = HomePage(driver) + home.logout() + time.sleep(5) + # 鐧诲綍 + login = LoginPage(driver) + login.login(data_read["username"], data_read["password"], data_read["code"]) + # 鐐瑰嚮鑿滃崟鏍� + home = HomePage(driver) + home.menu_select("娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�") + # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄 + test_package_list = TestPackageListPage(driver) + # 鍒涘缓娴嬭瘯鍖呭苟鎺ユ敹鍒涘缓鐨勬祴璇曞寘鍚嶇О + create_package_name = test_package_list.create_package(data_read["add"]) + # 璧嬪�煎埌绫诲彉閲� + TestProductAccredit.test_package_name = create_package_name + time.sleep(5) + # 鍒ゆ柇鏄惁鎴愬姛鍒涘缓 + assert test_package_list.is_create_success(create_package_name) + + + +if __name__ == '__main__': + pytest.main(["-s", __file__]) diff --git a/testcase/test_vaq.py b/testcase/test_vaq.py index a1f0a78..b19c475 100644 --- a/testcase/test_vaq.py +++ b/testcase/test_vaq.py @@ -1,7 +1,7 @@ from datetime import datetime import time from selenium.webdriver.common.by import By - +from selenium.webdriver.chrome.options import Options import pytest from selenium import webdriver from po.login_page import LoginPage @@ -23,6 +23,8 @@ :param data_read: 鎵ц鏁版嵁璇诲彇鐨勫嚱鏁板苟鑾峰彇鍒拌繑鍥炲�� :return: """ + chrome_options = Options() + chrome_options.add_argument("--headless") TestVAQ.driver = webdriver.Chrome() driver = TestVAQ.driver login_page = LoginPage(driver) -- Gitblit v1.9.1