From 84d824ab75d547484a11633c23d217f0deba4e92 Mon Sep 17 00:00:00 2001
From: 阳洁 <2077506045@qq.com>
Date: 星期一, 17 七月 2023 16:24:03 +0800
Subject: [PATCH] 测评系统自动测试

---
 elements/maq_answer_elements.py |    6 
 /dev/null                       |   71 -----
 po/maq_answer_page.py           |  121 +++++++++
 elements/jaq_answer_elements.py |   25 +
 testcase/test_jaq.py            |   93 ++----
 main.py                         |    2 
 po/test_package_list_page.py    |   67 ++--
 testcase/test_maq.py            |   82 ++---
 po/jaq_answer_page.py           |  123 +++++++++
 testcase/conftest.py            |   24 +
 data/test_data.json             |   49 +++
 report/report.html              |   98 +++++++
 12 files changed, 547 insertions(+), 214 deletions(-)

diff --git a/data/test_data.json b/data/test_data.json
new file mode 100644
index 0000000..6adf9db
--- /dev/null
+++ b/data/test_data.json
@@ -0,0 +1,49 @@
+{
+  "login": {
+    "url": "http://161.117.57.194/login?lang=zh_CN",
+    "username": "admin",
+    "password": "ots@2021!!",
+    "code": "ots"
+  },
+
+  "MAQ": {
+    "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�",
+    "add": {
+      "company": "TAI娴嬭瘯",
+      "type": "浜烘牸娴嬭瘯鍖�",
+      "product": "MAQV2",
+      "hrEmail": "2077506045@qq.com",
+      "invalid": "2024-01-01 00:00:00",
+      "memberLang": "涓枃",
+      "hrReportLang": "涓枃",
+      "reportTemplate": "MAQV2-Complete-Chinese",
+      "memberReportLang": "涓枃"
+    },
+    "info": {
+      "position":"鑱屽憳",
+      "dept": "浜轰簨閮�"
+    }
+  },
+  "JAQ": {
+    "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�",
+    "add": {
+      "company": "TAI娴嬭瘯",
+      "type": "宸ヤ綔鍒嗘瀽鍖�",
+      "product": "JAQ",
+      "hrEmail": "2077506045@qq.com",
+      "invalid": "2024-01-01 00:00:00",
+      "memberLang": "涓枃",
+      "hrReportLang": "涓枃",
+      "reportTemplate": "JAQ-Complete-Chinese",
+      "memberReportLang": "涓枃",
+      "position": "涓荤",
+      "professionalCategory": "绠$悊",
+      "superiorPosition": "鎬荤粡鐞�"
+
+    },
+    "info": {
+      "position":"鑱屽憳",
+      "dept": "浜轰簨閮�"
+    }
+  }
+}
\ No newline at end of file
diff --git a/elements/jaq_answer_elements.py b/elements/jaq_answer_elements.py
new file mode 100644
index 0000000..632e2ef
--- /dev/null
+++ b/elements/jaq_answer_elements.py
@@ -0,0 +1,25 @@
+from selenium.webdriver.common.by import By
+
+
+class JAQAnswerElements:
+    # 寮�濮嬫祴璇曟寜閽�
+    start_btn = (By.XPATH, "//button/span[text()='寮�濮嬫祴璇�']/..")
+    # 棰樼洰閫夐」-a
+    options_a = (By.XPATH, "//div[@class='el-card__body']/div[1]//span[@class='q-item-span-content']")
+    # 棰樼洰閫夐」-b
+    options_b = (By.XPATH, "//div[@class='el-card__body']/div[2]//span[@class='q-item-span-content']")
+    # 绂佺敤鐨勯�夐」
+    disabled = (By.XPATH, "//label[@aria-disabled='true']")
+    # 缁х画娴嬭瘯鎸夐挳
+    continue_testing_btn = (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']")
+    # 鎻愪氦鎸夐挳
+    submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..")
+    # 涓婁紶鎴愬姛鏍囬
+    upload_success_title = (By.XPATH, "//main/h2[contains(text(), '鏁版嵁宸茬粡鎴愬姛鍦颁笂浼犺嚦鏈嶅姟鍣�')]")
+
+    # 鍔犺浇妗嗘枃瀛�
+    loading_text = (By.XPATH, "//div[@class='el-loading-spinner']/p")
+
+    # 鏍囬鏂囧瓧
+    title = (By.XPATH, "//h1[text()='JAQ']")
+
diff --git a/elements/answer_elements.py b/elements/maq_answer_elements.py
similarity index 87%
rename from elements/answer_elements.py
rename to elements/maq_answer_elements.py
index c14ba4f..e14a358 100644
--- a/elements/answer_elements.py
+++ b/elements/maq_answer_elements.py
@@ -1,7 +1,9 @@
 from selenium.webdriver.common.by import By
 
 
-class AnswerElements:
+class MAQAnswerElements:
+    # 寮�濮嬫祴璇曟寜閽�
+    start_btn = (By.XPATH, "//button")
     # 棰樼洰閫夐」
     options = (By.XPATH, "//span[@class='q-item-span-content']")
     # 绂佺敤鐨勯�夐」
@@ -9,7 +11,7 @@
     # 缁х画娴嬭瘯鎸夐挳
     continue_testing_btn = (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']")
     # 鎻愪氦鎸夐挳
-    submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]")
+    submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..")
     # 涓婁紶鎴愬姛鏍囬
     upload_success_title = (By.XPATH, "//main/h2[contains(text(), '鏁版嵁宸茬粡鎴愬姛鍦颁笂浼犺嚦鏈嶅姟鍣�')]")
 
diff --git a/main.py b/main.py
index 9385d32..fa7772c 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'])
 
 
 if __name__ == '__main__':
diff --git a/po/answer_page.py b/po/answer_page.py
deleted file mode 100644
index d3d685e..0000000
--- a/po/answer_page.py
+++ /dev/null
@@ -1,71 +0,0 @@
-import random
-
-from base.base_page import BasePage
-from elements.answer_elements import AnswerElements as Answer
-import time
-
-
-class AnswerPage(BasePage):
-    """
-    绛旈椤甸潰
-    """
-    loading_count = 0
-
-    def answer_MAQ(self):
-        # 鏆傚仠3绉�
-        time.sleep(3)
-        try:
-            # 鑾峰彇鏍囬
-            self.get_element_wait(Answer.title)
-        except:
-            # 鏍囬涓嶅瓨鍦ㄧ洿鎺ュけ璐�
-            return False
-        while True:
-
-            # 鍒ゆ柇鏄惁涓�鐩村瓨鍦ㄥ姞杞芥
-            if self.loadin_text():
-                return
-
-            try:
-                # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳
-                self.click(Answer.continue_testing_btn)
-            except:
-                pass
-
-            try:
-                # 鑾峰彇鍒版墍鏈夐�夐」
-                options = self.get_elements(Answer.options)
-                if len(options) < 6:
-                    continue
-                number = random.randint(0, 5)
-                options[number].click()
-            except:
-                pass
-
-            try:
-                # 鐐瑰嚮鎻愪氦鎸夐挳
-                self.click(Answer.submit_btn)
-            except:
-                pass
-            try:
-                # 鏁版嵁涓婁紶瀹屾垚
-                self.get_element(Answer.upload_success_title)
-                return True
-            except:
-                pass
-
-    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
diff --git a/po/jaq_answer_page.py b/po/jaq_answer_page.py
new file mode 100644
index 0000000..c5a939c
--- /dev/null
+++ b/po/jaq_answer_page.py
@@ -0,0 +1,123 @@
+import random
+
+from base.base_page import BasePage
+from elements.jaq_answer_elements import JAQAnswerElements as Answer
+from selenium.common.exceptions import *
+
+import time
+
+
+class JAQAnswerPage(BasePage):
+    """
+    绛旈椤甸潰
+    """
+    loading_count = 0
+
+    def answer_MAQ(self):
+        # 鏆傚仠3绉�
+        time.sleep(3)
+        while True:
+            # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse
+            if not self.title_is_display():
+                return False
+
+            try:
+                # 鑾峰彇鍒版墍鏈塧閫夐」
+                options_a = self.get_elements(Answer.options_a)
+                if len(options_a) < 5:
+                    continue
+                number_a = random.randint(0, 4)
+                options_a[number_a].click()
+
+                # 鑾峰彇鍒版墍鏈塨閫夐」
+                options_b = self.get_elements(Answer.options_b)
+                if len(options_b) < 4:
+                    continue
+                number_b = random.randint(0, 3)
+                options_b[number_b].click()
+            except:
+                pass
+
+            # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑�
+            if self.submit_btn_is_display():
+                self.click(Answer.submit_btn)
+                # 鏁版嵁鏄惁涓婁紶瀹屾垚
+                time.sleep(15)
+                if self.upload_is_success():
+                    return True
+                return False
+
+    def upload_is_success(self):
+        """
+        鍒ゆ柇鏁版嵁鏄惁涓婁紶瀹屾垚
+        :return:
+        """
+        try:
+            self.get_element_wait(Answer.upload_success_title)
+            return True
+        except TimeoutException:
+            return False
+
+    def submit_btn_is_display(self):
+        """
+        鍒ゆ柇鎻愪氦鎸夐挳鏄惁瀛樺湪
+        :return:
+        """
+        try:
+            button = self.get_element(Answer.submit_btn)
+            if button.is_enabled():
+                return True
+            else:
+                return False
+        except NoSuchElementException:
+            return False
+
+    def continue_btn_is_display(self):
+        """
+        鍒ゆ柇缁х画娴嬭瘯鎸夐挳鏄惁鍑虹幇
+        :return: bool
+        """
+        try:
+            # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳
+            button = self.get_element(Answer.continue_testing_btn)
+            if button.is_enabled():
+                return True
+            else:
+                return False
+        except NoSuchElementException:
+            return False
+
+    def title_is_display(self):
+        """
+        鍒ゆ柇鏍囬鏄惁鍑虹幇
+        :return: bool
+        """
+        try:
+            # 鑾峰彇鏍囬
+            self.get_element_wait(Answer.title)
+            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)
diff --git a/po/maq_answer_page.py b/po/maq_answer_page.py
new file mode 100644
index 0000000..7c3afcd
--- /dev/null
+++ b/po/maq_answer_page.py
@@ -0,0 +1,121 @@
+import random
+
+from base.base_page import BasePage
+from elements.maq_answer_elements import MAQAnswerElements as Answer
+from selenium.common.exceptions import *
+
+import time
+
+
+class MAQAnswerPage(BasePage):
+    """
+    绛旈椤甸潰
+    """
+    loading_count = 0
+
+    def answer_MAQ(self):
+        # 鏆傚仠3绉�
+        time.sleep(3)
+        while True:
+            # 缁х画娴嬭瘯鎸夐挳鍑虹幇鍒欑偣鍑�
+            if self.continue_btn_is_display():
+                self.click(Answer.continue_testing_btn)
+
+            # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse
+            if not self.title_is_display():
+                return False
+
+            try:
+                # 鑾峰彇鍒版墍鏈夐�夐」
+                options = self.get_elements(Answer.options)
+                if len(options) < 6:
+                    continue
+                number = random.randint(0, 5)
+                if options[number].is_enabled():
+                    options[number].click()
+            except:
+                pass
+
+            # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑�
+            if self.submit_btn_is_display():
+                self.click(Answer.submit_btn)
+                # 鏁版嵁鏄惁涓婁紶瀹屾垚
+                time.sleep(15)
+                if self.upload_is_success():
+                    return True
+                return False
+
+    def upload_is_success(self):
+        """
+        鍒ゆ柇鏁版嵁鏄惁涓婁紶瀹屾垚
+        :return:
+        """
+        try:
+            self.get_element_wait(Answer.upload_success_title)
+            return True
+        except TimeoutException:
+            return False
+
+    def submit_btn_is_display(self):
+        """
+        鍒ゆ柇鎻愪氦鎸夐挳鏄惁瀛樺湪
+        :return:
+        """
+        try:
+            button = self.get_element(Answer.submit_btn)
+            if button.is_enabled():
+                return True
+            else:
+                return False
+        except NoSuchElementException:
+            return False
+
+    def continue_btn_is_display(self):
+        """
+        鍒ゆ柇缁х画娴嬭瘯鎸夐挳鏄惁鍑虹幇
+        :return: bool
+        """
+        try:
+            # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳
+            button = self.get_element(Answer.continue_testing_btn)
+            if button.is_enabled():
+                return True
+            else:
+                return False
+        except NoSuchElementException:
+            return False
+
+    def title_is_display(self):
+        """
+        鍒ゆ柇鏍囬鏄惁鍑虹幇
+        :return: bool
+        """
+        try:
+            # 鑾峰彇鏍囬
+            self.get_element_wait(Answer.title)
+            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)
diff --git a/po/test_package_list_page.py b/po/test_package_list_page.py
index 35d1e8e..d64c593 100644
--- a/po/test_package_list_page.py
+++ b/po/test_package_list_page.py
@@ -23,7 +23,7 @@
         鐐瑰嚮鍒涘缓鎸夐挳
         :return:
         """
-        self.click(PackageList.create_btn)
+        self.click_wait(PackageList.create_btn)
         # 鍒囨崲鍒癮dd绐楀彛鐨刬frame
         self.switch_iframe(PackageList.add_iframe)
 
@@ -33,7 +33,7 @@
         :return:
         """
         # 鐐瑰嚮鍒犻櫎鎸夐挳
-        self.click(PackageList.delete_btn)
+        self.click_wait(PackageList.delete_btn)
         # 鐐瑰嚮纭鎸夐挳
         self.click_wait(PackageList.delete_confirm_btn)
 
@@ -43,7 +43,7 @@
         :param testPackageName: 娴嬭瘯鍖呭悕绉�
         :return:
         """
-        self.send_text(testPackageName, PackageList.add_testPackageName_input)
+        self.send_text_wait(testPackageName, PackageList.add_testPackageName_input)
 
     def reportCompanyName_input(self, reportCompanyName):
         """
@@ -51,7 +51,7 @@
         :param reportCompanyName: 鎶ュ憡浼佷笟鍚嶇О
         :return:
         """
-        self.send_text(reportCompanyName, PackageList.add_reportCompanyName_input)
+        self.send_text_wait(reportCompanyName, PackageList.add_reportCompanyName_input)
 
     def testPackageType_select(self, testPackageType):
         """
@@ -60,9 +60,9 @@
         :return:
         """
         # 鐐瑰嚮涓嬫媺妗�
-        self.click(PackageList.add_testPackageType_select)
+        self.click_wait(PackageList.add_testPackageType_select)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(PackageList.add_testPackageType_option)
+        options = self.get_elements_wait(PackageList.add_testPackageType_option)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑
         for opt in options:
             if opt.text == testPackageType:
@@ -77,12 +77,12 @@
         :return:
         """
         # 鐐瑰嚮鏌ヨ鎸夐挳
-        self.click(PackageList.add_prodTree_btn)
+        self.click_wait(PackageList.add_prodTree_btn)
         # 鍒囨崲鍒皃rodTree鐨刬frame
         self.switch_iframe_wait(PackageList.prodTree_iframe)
         time.sleep(2)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(PackageList.prodTree_option)
+        options = self.get_elements_wait(PackageList.prodTree_option)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ラ�夐」鐩哥瓑
         for opt in options:
             if opt.text == prodName:
@@ -91,7 +91,7 @@
         # 鍒囨崲鍒颁笂涓�灞傜殑iframe
         self.switch_parent_iframe()
         # 鐐瑰嚮纭鎸夐挳
-        self.click(PackageList.prodTree_confirm_btn)
+        self.click_wait(PackageList.prodTree_confirm_btn)
 
     def hrReportEmail_input(self, hr_email):
         """
@@ -99,7 +99,7 @@
         :param hr_email:
         :return:
         """
-        self.send_text(hr_email, PackageList.add_hrEmail_input)
+        self.send_text_wait(hr_email, PackageList.add_hrEmail_input)
 
     def invalidTime_input(self, invalid_time):
         """
@@ -107,8 +107,8 @@
         :param invalid_time:
         :return:
         """
-        self.send_text(invalid_time, PackageList.add_invalidTime)
-        self.click(PackageList.add_invalidTime)
+        self.send_text_wait(invalid_time, PackageList.add_invalidTime)
+        self.click_wait(PackageList.add_invalidTime)
 
     def testTemplateLangType_select(self, text):
         """
@@ -119,9 +119,9 @@
         # 鍒嗗壊text
         lang_types = text.split(",")
         # 鐐瑰嚮涓嬫媺妗�
-        self.click(PackageList.add_templateLangType_select)
+        self.click_wait(PackageList.add_templateLangType_select)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(PackageList.add_templateLangType_option)
+        options = self.get_elements_wait(PackageList.add_templateLangType_option)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑
         for opt in options:
             for lang_type in lang_types:
@@ -139,9 +139,9 @@
         # 鍒嗗壊text
         lang_types = text.split(",")
         # 鐐瑰嚮涓嬫媺妗�
-        self.click(PackageList.add_hrTemplateLangType_select)
+        self.click_wait(PackageList.add_hrTemplateLangType_select)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(PackageList.add_hrTemplateLangType_option)
+        options = self.get_elements_wait(PackageList.add_hrTemplateLangType_option)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑
         for opt in options:
             for lang_type in lang_types:
@@ -159,9 +159,9 @@
         # 鍒嗗壊text
         templates = text.split(",")
         # 鐐瑰嚮涓嬫媺妗�
-        self.click(PackageList.add_reportTemplateId_select)
+        self.click_wait(PackageList.add_reportTemplateId_select)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(PackageList.add_reportTemplateId_option)
+        options = self.get_elements_wait(PackageList.add_reportTemplateId_option)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑
         for opt in options:
             for template in templates:
@@ -170,7 +170,7 @@
                     opt.click()
                     break
         # 鍐嶆鐐瑰嚮涓嬫媺妗�
-        self.click(PackageList.add_reportTemplateId_select)
+        self.click_wait(PackageList.add_reportTemplateId_select)
 
     def position_input(self, text):
         """
@@ -178,7 +178,7 @@
         :param text:
         :return:
         """
-        self.send_text(text, PackageList.add_position_input)
+        self.send_text_wait(text, PackageList.add_position_input)
 
     def professionalCategory_input(self, text):
         """
@@ -186,7 +186,7 @@
         :param text:
         :return:
         """
-        self.send_text(text, PackageList.add_professionalCategory_input)
+        self.send_text_wait(text, PackageList.add_professionalCategory_input)
 
     def superiorPosition_input(self, text):
         """
@@ -194,14 +194,14 @@
         :param text:
         :return:
         """
-        self.send_text(text, PackageList.add_superiorPosition_input)
+        self.send_text_wait(text, PackageList.add_superiorPosition_input)
 
     def autoSendReport_checkbox(self):
         """
         鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛�
         :return:
         """
-        self.click(PackageList.add_autoSendReport_checkbox)
+        self.click_wait(PackageList.add_autoSendReport_checkbox)
 
     def memberReportLangType_select(self, text):
         """
@@ -212,9 +212,9 @@
         # 鍒嗗壊text
         lang_types = text.split(",")
         # 鐐瑰嚮涓嬫媺妗�
-        self.click(PackageList.add_memberTemplateLangType_select)
+        self.click_wait(PackageList.add_memberTemplateLangType_select)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(PackageList.add_memberTemplateLangType_option)
+        options = self.get_elements_wait(PackageList.add_memberTemplateLangType_option)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑
         for opt in options:
             for lang_type in lang_types:
@@ -230,7 +230,7 @@
         """
         # 鍥炲埌涓婁竴灞俰frame
         self.switch_parent_iframe()
-        self.click(PackageList.add_confirm_btn)
+        self.click_wait(PackageList.add_confirm_btn)
 
     def is_create_success(self, packageName):
         """
@@ -238,7 +238,7 @@
         :param packageName: 娴嬭瘯鍖呭悕绉�
         :return: bool
         """
-        names = self.get_elements(PackageList.table_packageName_a)
+        names = self.get_elements_wait(PackageList.table_packageName_a)
         for name in names:
             if name.text == packageName:
                 return True
@@ -251,7 +251,7 @@
         :return:
         """
         # 鑾峰彇鍒皌able鐨勬墍鏈塼r
-        table_trs = self.get_elements(PackageList.table_package_tr)
+        table_trs = self.get_elements_wait(PackageList.table_package_tr)
         for tr in table_trs:
             # 娴嬭瘯鍖呭悕绉板湪tr涓殑瀹氫綅
             package_name_loc = (By.XPATH, "td[2]/a")
@@ -271,7 +271,7 @@
         鐐瑰嚮鐢熸垚鍒嗕韩閾炬帴鎸夐挳
         :return:
         """
-        self.click(PackageList.share_1_btn)
+        self.click_wait(PackageList.share_1_btn)
 
     def get_share_url(self):
         """
@@ -284,11 +284,10 @@
         url = self.get_input_value_js(PackageList.share_url_input)
         # 閫�鍥炰笂涓�灞俰frame
         self.switch_parent_iframe()
-        time.sleep(1)
         # 鐐瑰嚮鍏抽棴鎸夐挳
-        self.click(PackageList.share_cancel_btn)
+        self.click_wait(PackageList.share_cancel_btn)
+        time.sleep(1)
         return url
-
 
     def selector(self, click_loc, options_loc, text):
         """
@@ -299,9 +298,9 @@
         :return:
         """
         # 鐐瑰嚮涓嬫媺妗�
-        self.click(click_loc)
+        self.click_wait(click_loc)
         # 鑾峰彇鎵�鏈夐�夐」
-        options = self.get_elements(options_loc)
+        options = self.get_elements_wait(options_loc)
         # 鍒ゆ柇閫夐」鏄惁涓庝紶鍏ョ殑閫夐」鐩哥瓑
         for opt in options:
             if opt.text == text:
diff --git a/report/report.html b/report/report.html
index d0e570c..e770deb 100644
--- a/report/report.html
+++ b/report/report.html
@@ -253,10 +253,10 @@
 }
 </script>
     <h1>report.html</h1>
-    <p>Report generated on 14-Jul-2023 at 17:57:30 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
+    <p>Report generated on 17-Jul-2023 at 16:13:07 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
     <h2>Summary</h2>
-    <p>0 tests ran in 0.01 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" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">0 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>10 tests ran in 388.23 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">10 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">
@@ -266,4 +266,94 @@
           <th class="sortable" col="duration">Duration</th>
           <th class="sortable links" col="links">Links</th></tr>
         <tr hidden="true" id="not-found-message">
-          <th colspan="4">No results found. Try to check the filters</th></tr></thead></table></body></html>
\ No newline at end of file
+          <th colspan="4">No results found. Try to check the filters</th></tr></thead>
+      <tbody class="passed results-table-row">
+        <tr>
+          <td class="col-result">Passed</td>
+          <td class="col-name">testcase/test_jaq.py::TestJAQ::test_login[login]</td>
+          <td class="col-duration">4.92</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_jaq.py::TestJAQ::test_create_package[JAQ]</td>
+          <td class="col-duration">14.10</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_jaq.py::TestJAQ::test_open_url[JAQ]</td>
+          <td class="col-duration">14.05</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_jaq.py::TestJAQ::test_answer</td>
+          <td class="col-duration">93.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_jaq.py::TestJAQ::test_delete_package</td>
+          <td class="col-duration">7.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_maq.py::TestMAQ::test_login[login]</td>
+          <td class="col-duration">4.82</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_maq.py::TestMAQ::test_create_package[MAQ]</td>
+          <td class="col-duration">14.45</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_maq.py::TestMAQ::test_open_url[MAQ]</td>
+          <td class="col-duration">13.81</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_maq.py::TestMAQ::test_answer</td>
+          <td class="col-duration">213.81</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_maq.py::TestMAQ::test_delete_package</td>
+          <td class="col-duration">7.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></table></body></html>
\ No newline at end of file
diff --git a/testcase/conftest.py b/testcase/conftest.py
new file mode 100644
index 0000000..84df2a8
--- /dev/null
+++ b/testcase/conftest.py
@@ -0,0 +1,24 @@
+"""
+    娴嬭瘯鏁版嵁鍏变韩鏂囦欢
+"""
+
+import pytest
+import json
+import os
+
+
+@pytest.fixture
+def data_read(request) -> dict:
+    """
+    璇诲彇娴嬭瘯浣跨敤鐨勬暟鎹�
+    :param request: 鎺ユ敹浼犻�掔殑鍙傛暟
+    :return: 瀛楀吀
+    """
+    # 鑾峰彇褰撳墠椤圭洰鏍硅矾寰�
+    root_path = os.getcwd()
+    # 鑾峰彇鍒拌鑾峰彇鏁版嵁鐨勯敭
+    key = request.param
+    # 璇诲彇鏁版嵁
+    with open(root_path + r"\data\test_data.json", "r", encoding="utf-8") as f:
+        values = json.load(f)
+        return values[key]
diff --git a/testcase/test_jaq.py b/testcase/test_jaq.py
index 4d2701a..146daed 100644
--- a/testcase/test_jaq.py
+++ b/testcase/test_jaq.py
@@ -8,16 +8,17 @@
 from po.home_page import HomePage
 from po.test_package_list_page import TestPackageListPage
 from po.share_add_page import ShareAddPage
-from po.answer_page import AnswerPage
+from po.jaq_answer_page import JAQAnswerPage
 from comm.my_random import *
 
 
 class TestJAQ:
 
     driver = None
-    test_package_name = "MAQ鑷姩娴嬭瘯鍖�-20230711151825"
+    test_package_name = None
 
-    def test_login(self):
+    @pytest.mark.parametrize('data_read', ["login"], indirect=True)
+    def test_login(self, data_read: dict):
         """
         鎵撳紑椤甸潰骞惰繘琛岀櫥褰曟祴璇�
         :return:
@@ -27,7 +28,7 @@
         login_page = LoginPage(driver)
         try:
             # 鎵撳紑閾炬帴
-            driver.get("http://161.117.57.194/login?lang=zh_CN")
+            driver.get(data_read["url"])
         except:
             # 閾炬帴鎵撳紑鍑虹幇寮傚父璇存槑閾炬帴鏃犳硶璁块棶,鎹曡幏寮傚父浣嗕笉鍋氬鐞�
             pass
@@ -52,11 +53,12 @@
                 except:
                     break
 
-        login_page.login("admin", "ots@2021!!", "ots")
+        login_page.login(data_read["username"], data_read["password"], data_read["code"])
         time.sleep(2)
         assert login_page.is_login_success()
 
-    def test_create_package(self):
+    @pytest.mark.parametrize('data_read', ["JAQ"], indirect=True)
+    def test_create_package(self, data_read: dict):
         """
         鍒涘缓娴嬭瘯鍖�
         :return:
@@ -66,8 +68,7 @@
         # 鍒涘缓home椤甸潰鐨勫璞�
         home_page = HomePage(driver)
         # 鐐瑰嚮宸︿晶鑿滃崟杩涘叆椤甸潰
-        home_page.menu_select("娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�")
-
+        home_page.menu_select(data_read["menu"])
         # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄
         test_package_list = TestPackageListPage(driver)
         # 鐐瑰嚮鍒涘缓鎸夐挳
@@ -81,66 +82,46 @@
         test_package_name = "JAQ鑷姩娴嬭瘯鍖�-" + time_str
         # 璁剧疆娴嬭瘯鍖呭悕绉颁负绫诲彉閲�
         TestJAQ.test_package_name = test_package_name
-        # 鎶ュ憡浼佷笟鍚嶇О
-        report_company_name = "TAI娴嬭瘯"
-        # 娴嬭瘯鍖呯被鍨�
-        test_package_type = "宸ヤ綔鍒嗘瀽鍖�"
-        # 浜у搧鍖�
-        prod_name = "JAQ"
-        # HR閭
-        hr_email = "2077506045@qq.com"
-        # 鏈夋晥鏈�
-        invalid_time = "2024-01-01 00:00:00"
-        # 娴嬭瘯鑰呴個璇烽偖浠惰瑷�绫诲瀷
-        test_email_lang_type = "涓枃"
-        # hr鎶ュ憡閭欢璇█绫诲瀷
-        hr_report_email_lang_type = "涓枃"
-        # 鎶ュ憡妯℃澘
-        report_template = "JAQ-Complete-Chinese"
-        # 瑕佽瘎浠风殑宀椾綅
-        position = "涓荤"
-        # 鑱屼笟澶х被
-        professional_category = "绠$悊"
-        # 涓婄骇宀椾綅
-        superior_position = "鎬荤粡鐞�"
-        # 娴嬭瘯鑰呮姤鍛婇偖浠惰瑷�绫诲瀷
-        member_report_email_lang_type = "涓枃"
+
+        # 鑾峰彇鍒涘缓娴嬭瘯鍖呯殑鏁版嵁
+        create_data = data_read["add"]
 
         # 濉啓娴嬭瘯鍖呭悕绉�
         test_package_list.testPackageName_input(test_package_name)
-        # 濉啓鎶ュ憡浼佷笟鍚嶇О
-        test_package_list.reportCompanyName_input(report_company_name)
+        test_package_list.reportCompanyName_input(create_data["company"])
         # 閫夋嫨娴嬭瘯鍖呯被鍨�
-        test_package_list.testPackageType_select(test_package_type)
+        test_package_list.testPackageType_select(create_data["type"])
         # 閫夋嫨浜у搧鍖�
-        test_package_list.prodTree_select(prod_name)
+        test_package_list.prodTree_select(create_data["product"])
         # 杈撳叆hr閭
-        test_package_list.hrReportEmail_input(hr_email)
+        test_package_list.hrReportEmail_input(create_data["hrEmail"])
         # 杈撳叆鏈夋晥鏈�
-        test_package_list.invalidTime_input(invalid_time)
+        test_package_list.invalidTime_input(create_data["invalid"])
         # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷
-        test_package_list.testTemplateLangType_select(test_email_lang_type)
+        test_package_list.testTemplateLangType_select(create_data["memberLang"])
         # 閫夋嫨HR閭欢璇█绫诲瀷
-        test_package_list.hrTemplateLangType_select(hr_report_email_lang_type)
+        test_package_list.hrTemplateLangType_select(create_data["hrReportLang"])
         # 閫夋嫨鎶ュ憡妯℃澘
-        test_package_list.reportTemplate_select(report_template)
+        test_package_list.reportTemplate_select(create_data["reportTemplate"])
         # 杈撳叆瑕佽瘎浠风殑宀椾綅
-        test_package_list.position_input(position)
+        test_package_list.position_input(create_data["position"])
         # 杈撳叆鑱屼笟澶х被
-        test_package_list.professionalCategory_input(professional_category)
+        test_package_list.professionalCategory_input(create_data["professionalCategory"])
         # 杈撳叆涓婄骇宀椾綅
-        test_package_list.superiorPosition_input(superior_position)
+        test_package_list.superiorPosition_input(create_data["superiorPosition"])
         # 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛�
         test_package_list.autoSendReport_checkbox()
         # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷
-        test_package_list.memberReportLangType_select(member_report_email_lang_type)
+        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)
+        time.sleep(5)
 
-    def test_open_url(self):
+    @pytest.mark.parametrize('data_read', ["JAQ"], indirect=True)
+    def test_open_url(self, data_read: dict):
         """
         鎵撳紑鍒嗕韩閾炬帴
         :return:
@@ -163,30 +144,32 @@
         name = random_string(8)
         email = name + "@gmail.com"
         test_url = share_add.page_default_operation(name, email)
-        # test_url = "http://161.117.57.194/exam-stu/#/ots/94830ada-8f6c-44c0-8946-79c43267d9c1/login"
         # 褰撳墠椤甸潰鎵撳紑閾炬帴
         driver.get(test_url)
         # 鐐瑰嚮鎻愪氦鎸夐挳
         share_add.submit_btn()
+        # 鑾峰彇鏁版嵁
+        info = data_read["info"]
         # 濉啓鍩烘湰淇℃伅骞舵彁浜�
-        share_add.fill_info(email, "鑱屽憳", "浜轰簨閮�")
-        # 鐐瑰嚮寮�濮嬫祴璇�
-        share_add.submit_btn()
+        share_add.fill_info(email, info["position"], info["dept"])
+        time.sleep(5)
 
     def test_answer(self):
         # 鑾峰彇driver
         driver = TestJAQ.driver
         # 鍒涘缓answer瀵硅薄
-        answer_page = AnswerPage(driver)
+        answer_page = JAQAnswerPage(driver)
+        # 鐐瑰嚮寮�濮嬫祴璇�
+        answer_page.start_btn()
         # 寮�濮嬬瓟棰�
-        # flag = answer_page.answer_MAQ()
-        # if not flag:
-        #     assert flag
-        #     return
+        flag = answer_page.answer_MAQ()
         # 绛斿畬棰樺叧闂綋鍓嶆爣绛鹃〉
         driver.close()
         # 鍒囨崲鍒扮涓�涓爣绛鹃〉
         answer_page.switch_window(0)
+        if flag is not None or not flag:
+            assert flag
+            return
 
     def test_delete_package(self):
         # 鑾峰彇driver
diff --git a/testcase/test_maq.py b/testcase/test_maq.py
index 09ef8f1..e702e7a 100644
--- a/testcase/test_maq.py
+++ b/testcase/test_maq.py
@@ -8,18 +8,19 @@
 from po.home_page import HomePage
 from po.test_package_list_page import TestPackageListPage
 from po.share_add_page import ShareAddPage
-from po.answer_page import AnswerPage
+from po.maq_answer_page import MAQAnswerPage
 from comm.my_random import *
 
 
 class TestMAQ:
-
     driver = None
-    test_package_name = "MAQ鑷姩娴嬭瘯鍖�-20230711151825"
+    test_package_name = None
 
-    def test_login(self):
+    @pytest.mark.parametrize('data_read', ["login"], indirect=True)
+    def test_login(self, data_read: dict):
         """
         鎵撳紑椤甸潰骞惰繘琛岀櫥褰曟祴璇�
+        :param data_read: 鎵ц鏁版嵁璇诲彇鐨勫嚱鏁板苟鑾峰彇鍒拌繑鍥炲��
         :return:
         """
         TestMAQ.driver = webdriver.Chrome()
@@ -27,7 +28,7 @@
         login_page = LoginPage(driver)
         try:
             # 鎵撳紑閾炬帴
-            driver.get("http://161.117.57.194/login?lang=zh_CN")
+            driver.get(data_read["url"])
         except:
             # 閾炬帴鎵撳紑鍑虹幇寮傚父璇存槑閾炬帴鏃犳硶璁块棶,鎹曡幏寮傚父浣嗕笉鍋氬鐞�
             pass
@@ -52,13 +53,15 @@
                 except:
                     break
 
-        login_page.login("admin", "ots@2021!!", "ots")
+        login_page.login(data_read["username"], data_read["password"], data_read["code"])
         time.sleep(2)
         assert login_page.is_login_success()
 
-    def test_create_package(self):
+    @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True)
+    def test_create_package(self, data_read: dict):
         """
         鍒涘缓娴嬭瘯鍖�
+        :param data_read: 璇诲彇鏁版嵁
         :return:
         """
         # 鑾峰彇driver
@@ -66,8 +69,7 @@
         # 鍒涘缓home椤甸潰鐨勫璞�
         home_page = HomePage(driver)
         # 鐐瑰嚮宸︿晶鑿滃崟杩涘叆椤甸潰
-        home_page.menu_select("娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�")
-
+        home_page.menu_select(data_read["menu"])
         # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄
         test_package_list = TestPackageListPage(driver)
         # 鐐瑰嚮鍒涘缓鎸夐挳
@@ -81,54 +83,39 @@
         test_package_name = "MAQ鑷姩娴嬭瘯鍖�-" + time_str
         # 璁剧疆娴嬭瘯鍖呭悕绉颁负绫诲彉閲�
         TestMAQ.test_package_name = test_package_name
-        # 鎶ュ憡浼佷笟鍚嶇О
-        report_company_name = "TAI娴嬭瘯"
-        # 娴嬭瘯鍖呯被鍨�
-        test_package_type = "浜烘牸娴嬭瘯鍖�"
-        # 浜у搧鍖�
-        prod_name = "MAQV2"
-        # HR閭
-        hr_email = "2077506045@qq.com"
-        # 鏈夋晥鏈�
-        invalid_time = "2024-01-01 00:00:00"
-        # 娴嬭瘯鑰呴個璇烽偖浠惰瑷�绫诲瀷
-        test_email_lang_type = "涓枃"
-        # hr鎶ュ憡閭欢璇█绫诲瀷
-        hr_report_email_lang_type = "涓枃"
-        # 鎶ュ憡妯℃澘
-        report_template = "MAQV2-Complete-Chinese"
-        # 娴嬭瘯鑰呮姤鍛婇偖浠惰瑷�绫诲瀷
-        member_report_email_lang_type = "涓枃"
-
+        # 鑾峰彇鍒涘缓娴嬭瘯鍖呯殑鏁版嵁
+        create_data = data_read["add"]
         # 濉啓娴嬭瘯鍖呭悕绉�
         test_package_list.testPackageName_input(test_package_name)
         # 濉啓鎶ュ憡浼佷笟鍚嶇О
-        test_package_list.reportCompanyName_input(report_company_name)
+        test_package_list.reportCompanyName_input(create_data["company"])
         # 閫夋嫨娴嬭瘯鍖呯被鍨�
-        test_package_list.testPackageType_select(test_package_type)
+        test_package_list.testPackageType_select(create_data["type"])
         # 閫夋嫨浜у搧鍖�
-        test_package_list.prodTree_select(prod_name)
+        test_package_list.prodTree_select(create_data["product"])
         # 杈撳叆hr閭
-        test_package_list.hrReportEmail_input(hr_email)
+        test_package_list.hrReportEmail_input(create_data["hrEmail"])
         # 杈撳叆鏈夋晥鏈�
-        test_package_list.invalidTime_input(invalid_time)
+        test_package_list.invalidTime_input(create_data["invalid"])
         # 閫夋嫨閭�璇烽偖浠惰瑷�绫诲瀷
-        test_package_list.testTemplateLangType_select(test_email_lang_type)
+        test_package_list.testTemplateLangType_select(create_data["memberLang"])
         # 閫夋嫨HR閭欢璇█绫诲瀷
-        test_package_list.hrTemplateLangType_select(hr_report_email_lang_type)
+        test_package_list.hrTemplateLangType_select(create_data["hrReportLang"])
         # 閫夋嫨鎶ュ憡妯℃澘
-        test_package_list.reportTemplate_select(report_template)
+        test_package_list.reportTemplate_select(create_data["reportTemplate"])
         # 鐐瑰嚮娴嬭瘯鑰呮帴鏀舵姤鍛�
         test_package_list.autoSendReport_checkbox()
         # 閫夋嫨娴嬭瘯鑰呮姤鍛婇偖绠辫瑷�绫诲瀷
-        test_package_list.memberReportLangType_select(member_report_email_lang_type)
+        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)
+        time.sleep(5)
 
-    def test_open_url(self):
+    @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True)
+    def test_open_url(self, data_read: dict):
         """
         鎵撳紑鍒嗕韩閾炬帴
         :return:
@@ -151,30 +138,32 @@
         name = random_string(8)
         email = name + "@gmail.com"
         test_url = share_add.page_default_operation(name, email)
-        # test_url = "http://161.117.57.194/exam-stu/#/ots/94830ada-8f6c-44c0-8946-79c43267d9c1/login"
         # 褰撳墠椤甸潰鎵撳紑閾炬帴
         driver.get(test_url)
         # 鐐瑰嚮鎻愪氦鎸夐挳
         share_add.submit_btn()
+        # 鑾峰彇鏁版嵁
+        info = data_read["info"]
         # 濉啓鍩烘湰淇℃伅骞舵彁浜�
-        share_add.fill_info(email, "鑱屽憳", "浜轰簨閮�")
-        # 鐐瑰嚮寮�濮嬫祴璇�
-        share_add.submit_btn()
+        share_add.fill_info(email, info["position"], info["dept"])
+        time.sleep(5)
 
     def test_answer(self):
         # 鑾峰彇driver
         driver = TestMAQ.driver
         # 鍒涘缓answer瀵硅薄
-        answer_page = AnswerPage(driver)
+        answer_page = MAQAnswerPage(driver)
+        # 鐐瑰嚮寮�濮嬫祴璇�
+        answer_page.start_btn()
         # 寮�濮嬬瓟棰�
         flag = answer_page.answer_MAQ()
-        if flag is None or not flag:
-            assert flag
-            return
         # 绛斿畬棰樺叧闂綋鍓嶆爣绛鹃〉
         driver.close()
         # 鍒囨崲鍒扮涓�涓爣绛鹃〉
         answer_page.switch_window(0)
+        if flag is not None or not flag:
+            assert flag
+            return
 
     def test_delete_package(self):
         # 鑾峰彇driver
@@ -186,7 +175,6 @@
         time.sleep(5)
         # 鍏抽棴
         driver.quit()
-
 
 
 if __name__ == '__main__':

--
Gitblit v1.9.1