From 3b84cce1ee43215b9f398148fda19f4b1025856b Mon Sep 17 00:00:00 2001
From: yj <2077506045@qq.com>
Date: 星期三, 24 七月 2024 17:46:00 +0800
Subject: [PATCH] 测评系统自动测试

---
 po/maq_answer_page.py            |   36 +-
 elements/ciaq_answer_elements.py |   10 
 base/base_page.py                |   21 +
 elements/caq_answer_elements.py  |   34 +-
 po/caq_answer_page.py            |   92 ++++---
 po/vaq_answer_page.py            |   80 +++---
 testcase/test_main.py            |  223 +++++++++++++++++++
 report/report.html               |    8 
 elements/jaq_answer_elements.py  |   11 
 elements/vaq_answer_elements.py  |   16 +
 po/jaq_answer_page.py            |   62 ++---
 testcase/conftest.py             |    8 
 data/test_data.json              |    4 
 po/ciaq_answer_page.py           |   51 ++--
 14 files changed, 451 insertions(+), 205 deletions(-)

diff --git a/base/base_page.py b/base/base_page.py
index 48f4473..1eaae78 100644
--- a/base/base_page.py
+++ b/base/base_page.py
@@ -279,7 +279,7 @@
         return element.find_element(*locator)
 
     # 鍦ㄦ寚瀹氬厓绱犱腑瀹氫綅澶氫釜鍏冪礌
-    def get_elements_in(self, element, *locator):
+    def get_elements_in(self, element, locator):
         return element.find_elements(*locator)
 
     # 鍏冪礌瀹氫綅
@@ -397,15 +397,26 @@
 
     # 婊戝姩椤甸潰
     def scroll_by(self, num):
-        self.driver.execute_script("window.scrollBy(0, " + num + ");")
+        self.driver.execute_script(f"window.scrollBy(0, {num})")
+
+    def scroll_to_top(self):
+        self.driver.execute_script("window.scrollTo(0, 0);")
 
     # 婊戝姩鍒板簳閮�
     def scroll_to_bottom(self):
         self.driver.execute_script("window.scrollBy(0,document.body.scrollHeight);")
 
-    # 婊戝姩鍒伴《閮�
-    def scroll_to_top(self):
-        self.driver.execute_script("window.scrollBy(0,0);")
+    # 婊氬姩鍒板搴斿厓绱犱笂
+    def scroll_to_element(self, ele, timeout=None):
+        # 鑾峰彇鍏冪礌鐨勫潗鏍�
+        element_top = self.driver.execute_script("return arguments[0].getBoundingClientRect().top;", ele)
+        # 鑾峰彇瑙嗗彛鐨勯珮搴�
+        viewport_height = self.driver.execute_script("return window.innerHeight;")
+        # 璁$畻婊氬姩璺濈
+        scroll_distance = element_top + viewport_height - ele.size['height']
+        # 鎵ц婊氬姩鎿嶄綔
+        self.driver.execute_script(f"window.scrollTo(0, {scroll_distance});")
+        WebDriverWait(self.driver, 10).until(EC.visibility_of(ele))
 
     # 鎴彇褰撳墠绐楀彛淇濆瓨涓哄浘鐗�
     def get_png(self):
diff --git a/data/test_data.json b/data/test_data.json
index 3d86b8a..df214f5 100644
--- a/data/test_data.json
+++ b/data/test_data.json
@@ -624,6 +624,7 @@
     }
   },
   "JAQ": {
+    "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtSbk5BPT0=",
     "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�",
     "add": {
       "company": "TAI娴嬭瘯",
@@ -646,6 +647,7 @@
     }
   },
   "CAQ": {
+    "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtSbk5RPT0=",
     "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�",
     "add": {
       "company": "TAI娴嬭瘯",
@@ -664,6 +666,7 @@
     }
   },
   "VAQ": {
+    "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtScmVRPT0=",
     "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�",
     "add": {
       "company": "TAI娴嬭瘯",
@@ -682,6 +685,7 @@
     }
   },
   "CIAQ": {
+    "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtScmVBPT0=",
     "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�",
     "add": {
       "company": "TAI娴嬭瘯",
diff --git a/elements/caq_answer_elements.py b/elements/caq_answer_elements.py
index e5da581..0890735 100644
--- a/elements/caq_answer_elements.py
+++ b/elements/caq_answer_elements.py
@@ -4,25 +4,29 @@
 class CAQAnswerElements:
     # 寮�濮嬫祴璇曟寜閽�
     start_btn = (By.XPATH, "//button")
-    # 棰樼洰閫夐」-1
-    options_1 = (By.XPATH, "//div[@class='el-card__body']/div[3]//span[@class='q-item-span-content']/../..")
-    # 棰樼洰閫夐」-2
-    options_2 = (By.XPATH, "//div[@class='el-card__body']/div[4]//span[@class='q-item-span-content']/../..")
-    # 棰樼洰閫夐」-3
-    options_3 = (By.XPATH, "//div[@class='el-card__body']/div[5]//span[@class='q-item-span-content']/../..")
-    # 棰樼洰閫夐」-4
-    options_4 = (By.XPATH, "//div[@class='el-card__body']/div[6]//span[@class='q-item-span-content']/../..")
-    # 棰樼洰閫夐」-5
-    options_5 = (By.XPATH, "//div[@class='el-card__body']/div[7]//span[@class='q-item-span-content']/../..")
-    # 棰樼洰閫夐」-6
-    options_6 = (By.XPATH, "//div[@class='el-card__body']/div[2]//span[@class='q-item-span-content']/../..")
+    # 棰樼洰鏍囬
+    q_title = (By.XPATH, "//div[@class='el-form-item el-form-item--medium'][1]//div[@class='q-title']")
+    # 棰樼洰
+    questions = (By.XPATH, "//div[substring(text(), 1, 1) = '(' and substring(text(), 3, 1) = ')']/..")
+    # 棰樼洰閫夐」
+    options = (By.XPATH, "div[2]/div/label")
+
+    options_2 = (By.XPATH, "//label/span[1]")
+
+    # 婊氬姩鍒伴《閮ㄦ寜閽�
+    scroll_top_btn = (By.XPATH, "//div[@class='back-to-ceiling' and @style='']")
+
+    q_title_2 = (By.XPATH, "//div[@class='q-title']")
+
+
+    btn = (By.XPATH, "//button")
+    next_btn = (By.XPATH, "//button[2]")
 
     # 绂佺敤鐨勯�夐」
     disabled = (By.XPATH, "//label[@aria-disabled='true']")
     # 缁х画娴嬭瘯鎸夐挳
-    continue_testing_btn = (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']/..")
+    continue_testing_btn = (By.XPATH, "//button[1]")
     # 涓嬩竴棰樻寜閽�
-    next_btn = (By.XPATH, "//button/span[text()='涓嬩竴棰�']/..")
     # 鎻愪氦鎸夐挳
     submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..")
     # 涓婁紶鎴愬姛鏍囬
@@ -34,3 +38,5 @@
     # 鏍囬鏂囧瓧
     title = (By.XPATH, "//div[@class='align-center']/span[2]")
 
+    close_btn = (By.XPATH, "//button")
+
diff --git a/elements/ciaq_answer_elements.py b/elements/ciaq_answer_elements.py
index 9b401ce..ac16cf2 100644
--- a/elements/ciaq_answer_elements.py
+++ b/elements/ciaq_answer_elements.py
@@ -4,14 +4,16 @@
 class CIAQAnswerElements:
     # 寮�濮嬫祴璇曟寜閽�
     start_btn = (By.XPATH, "//button/span[text()='寮�濮嬫祴璇�']/..")
+    # 棰樼洰
+    q_title = (By.XPATH, "//div[@class='q-title']")
     # 棰樼洰閫夐」
-    options = (By.XPATH, "//span[@class='q-item-span-content']")
+    options = (By.XPATH, "//label[@class='el-radio']")
     # 绂佺敤鐨勯�夐」
     disabled = (By.XPATH, "//label[@aria-disabled='true']")
     # 缁х画娴嬭瘯鎸夐挳
-    continue_testing_btn = (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']/..")
+    continue_testing_btn = (By.XPATH, "//button")
     # 鎻愪氦鎸夐挳
-    submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..")
+    submit_btn = (By.XPATH, "//button[2]")
     # 涓婁紶鎴愬姛鏍囬
     upload_success_title = (By.XPATH, "//main/h2[contains(text(), '鏁版嵁宸茬粡鎴愬姛鍦颁笂浼犺嚦鏈嶅姟鍣�')]")
 
@@ -21,3 +23,5 @@
     # 鏍囬鏂囧瓧
     title = (By.XPATH, "//div[@class='align-center']/span[2]")
 
+    close_btn = (By.XPATH, "//button")
+
diff --git a/elements/jaq_answer_elements.py b/elements/jaq_answer_elements.py
index 632e2ef..d38841f 100644
--- a/elements/jaq_answer_elements.py
+++ b/elements/jaq_answer_elements.py
@@ -4,16 +4,18 @@
 class JAQAnswerElements:
     # 寮�濮嬫祴璇曟寜閽�
     start_btn = (By.XPATH, "//button/span[text()='寮�濮嬫祴璇�']/..")
+    # 棰樼洰
+    q_title = (By.XPATH, "//h3[@class='langKaiStyle']")
     # 棰樼洰閫夐」-a
-    options_a = (By.XPATH, "//div[@class='el-card__body']/div[1]//span[@class='q-item-span-content']")
+    options_a = (By.XPATH, "//div[@class='el-card__body']/div[1]//label[@class='el-radio']")
     # 棰樼洰閫夐」-b
-    options_b = (By.XPATH, "//div[@class='el-card__body']/div[2]//span[@class='q-item-span-content']")
+    options_b = (By.XPATH, "//div[@class='el-card__body']/div[2]//label[@class='el-radio']")
     # 绂佺敤鐨勯�夐」
     disabled = (By.XPATH, "//label[@aria-disabled='true']")
     # 缁х画娴嬭瘯鎸夐挳
     continue_testing_btn = (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']")
     # 鎻愪氦鎸夐挳
-    submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..")
+    submit_btn = (By.XPATH, "//button[2]")
     # 涓婁紶鎴愬姛鏍囬
     upload_success_title = (By.XPATH, "//main/h2[contains(text(), '鏁版嵁宸茬粡鎴愬姛鍦颁笂浼犺嚦鏈嶅姟鍣�')]")
 
@@ -23,3 +25,6 @@
     # 鏍囬鏂囧瓧
     title = (By.XPATH, "//h1[text()='JAQ']")
 
+    # 鍏抽棴鎸夐挳
+    close_btn = (By.XPATH, "//button[1]")
+
diff --git a/elements/vaq_answer_elements.py b/elements/vaq_answer_elements.py
index 5452c30..89749ad 100644
--- a/elements/vaq_answer_elements.py
+++ b/elements/vaq_answer_elements.py
@@ -5,11 +5,18 @@
     # 寮�濮嬫祴璇曟寜閽�
     start_btn = (By.XPATH, "//button")
 
+    # 鍥剧墖鎸夐挳閫夐」
+    pre_picture_btn = (By.XPATH, "//div[@class='mullinediv-item']/div[3]/div[1]")
+
+    picture_btn = (By.XPATH, "//div[@class='mullinediv-item']/div[2]/div[1]/img")
+
+    current_require_picture_count = (By.XPATH, "//div[@class='el-divider__text is-left']/span")
+
     # 棰勯�夊浘鐗囨楠�-鍥剧墖閫夐」
     picture = (By.XPATH, "//div[@class='mullinediv']/div[@class='mullinediv-item']")
 
     # 涓嬩竴姝ユ寜閽�
-    next_btn = (By.XPATH, "//button/span[contains(text(),'涓嬩竴姝�')]/..")
+    next_btn = (By.XPATH, "//button[2]")
 
     # 棰樼洰閫夐」
     options = (By.XPATH, "//span[@class='q-item-span-content']")
@@ -18,7 +25,7 @@
     # 缁х画娴嬭瘯鎸夐挳
     continue_testing_btn = (By.XPATH, "//button/span[text()='缁х画娴嬭瘯']")
     # 鎻愪氦鎸夐挳
-    submit_btn = (By.XPATH, "//button/span[contains(text(),'鎻愪氦')]/..")
+    submit_btn = (By.XPATH, "//button")
     # 涓婁紶鎴愬姛鏍囬
     upload_success_title = (By.XPATH, "//main/h2[contains(text(), '娴嬭瘯缁撴潫')]")
 
@@ -27,3 +34,8 @@
 
     # 鏍囬鏂囧瓧
     title = (By.XPATH, "//div[@class='align-center']/span[2]")
+
+    # 婊氬姩鍒伴《閮ㄦ寜閽�
+    scroll_top_btn = (By.XPATH, "//div[@class='back-to-ceiling' and @style='']")
+
+    close_btn = (By.XPATH, "//button")
diff --git a/po/caq_answer_page.py b/po/caq_answer_page.py
index 2816cf5..7504f42 100644
--- a/po/caq_answer_page.py
+++ b/po/caq_answer_page.py
@@ -5,6 +5,7 @@
 from selenium.common.exceptions import *
 
 import time
+import re
 
 
 class CAQAnswerPage(BasePage):
@@ -13,57 +14,62 @@
     """
     loading_count = 0
 
-    es = CAQAnswerElements
+    elements = 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(self.es.continue_testing_btn, timeout=10)
-            elif i < 4:
-                # 鑾峰彇鍒版墍鏈夐�夐」
-                options_1 = self.elements_is_visibility(self.es.options_1)
+        # 鐐瑰嚮缁х画娴嬭瘯
+        self.click(self.elements.continue_testing_btn, 5)
+
+        time.sleep(3)
+        # 鑾峰彇鍒伴鐩爣棰�
+        title = self.get_ele(self.elements.q_title, 5)
+        # 鎴彇宸茬瓟鏁伴噺涓庢�绘暟閲�
+        match = re.search(r"(\d+)/(\d+)", title.text)
+        current = int(match.group(1))
+        total = int(match.group(2))
+        while current <= total:
+            # 鑾峰彇鎵�鏈夐鐩�
+            questions = self.get_eles(self.elements.questions, 5)
+            for question in questions:
+                options = self.get_elements_in(question, self.elements.options)
                 number = random.randint(0, 4)
-                self.click_element_js(options_1[number])
+                options[number].click()
 
-                options_2 = self.elements_is_visibility(self.es.options_2)
-                self.click_element_js(options_2[number])
+            if current == 1:
+                self.click(self.elements.btn)
+            else:
+                self.click(self.elements.next_btn)
+            current += 1
+            if current <= total:
+                time.sleep(1)
+                # 灏嗛〉闈㈡粦鍔ㄥ埌鏈�椤堕儴
+                self.click(self.elements.scroll_top_btn, 5)
+                time.sleep(2)
+        time.sleep(2)
 
-                options_3 = self.elements_is_visibility(self.es.options_3)
-                self.click_element_js(options_3[number])
+        # 鐐瑰嚮缁х画娴嬭瘯
+        self.click(self.elements.continue_testing_btn, 5)
 
-                options_4 = self.elements_is_visibility(self.es.options_4)
-                self.click_element_js(options_4[number])
+        title = self.get_ele(self.elements.q_title_2, 5)
+        # 鎴彇宸茬瓟鏁伴噺涓庢�绘暟閲�
+        match = re.search(r"(\d+)/(\d+)", title.text)
+        current = int(match.group(1))
+        total = int(match.group(2))
 
-                options_5 = self.elements_is_visibility(self.es.options_5)
-                self.click_element_js(options_5[number])
-
-                self.click_js(self.es.next_btn)
-            if i == 4:
-                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(self.es.options_6)
-                number = random.randint(0, 4)
-                self.click_element_js(options_6[number])
-                if i == 23:
-                    self.click_js(self.es.submit_btn)
-                    # 鏁版嵁鏄惁涓婁紶瀹屾垚
-                    time.sleep(15)
-                    if self.upload_is_success():
-                        return True
-                else:
-
-                    self.click_js(self.es.next_btn)
-            i += 1
+        while current <= total:
+            # 鑾峰彇鍒版墍鏈夐�夐」
+            options = self.get_eles(self.elements.options_2, 5)
+            number = random.randint(0, 4)
+            options[number].click()
+            if current == 1:
+                self.click(self.elements.btn)
+            else:
+                if current == total:
+                    time.sleep(1)
+                self.click(self.elements.next_btn)
+            current += 1
 
     def upload_is_success(self):
         """
@@ -73,7 +79,7 @@
         i = 0
         while i < 60:
             try:
-                self.get_element_wait(self.es.upload_success_title)
+                self.get_element_wait(self.elements.upload_success_title)
                 return True
             except TimeoutException:
                 i += 1
diff --git a/po/ciaq_answer_page.py b/po/ciaq_answer_page.py
index e16ebc2..4412727 100644
--- a/po/ciaq_answer_page.py
+++ b/po/ciaq_answer_page.py
@@ -5,6 +5,7 @@
 from selenium.common.exceptions import *
 
 import time
+import re
 
 
 class CIAQAnswerPage(BasePage):
@@ -13,40 +14,34 @@
     """
     loading_count = 0
 
-    es = CIAQAnswerElements
+    elements = CIAQAnswerElements
+
+    slice_count = 3
 
     def answer(self):
-        # 鏆傚仠3绉�
-        time.sleep(3)
-        while True:
-            # 缁х画娴嬭瘯鎸夐挳鍑虹幇鍒欑偣鍑�
-            if self.continue_btn_is_display():
-                self.click(self.es.continue_testing_btn)
+        for i in range(self.slice_count):
+            # 鑾峰彇鍒伴鐩�
+            time.sleep(3)
+            title = self.get_ele(self.elements.q_title, 5)
+            # 鎴彇宸茬瓟鏁伴噺涓庢�绘暟閲�
+            match = re.search(r"(\d+)/(\d+)", title.text)
+            current = int(match.group(1))
+            total = int(match.group(2))
 
-            # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse
-            if not self.title_is_display():
-                if self.continue_btn_is_display():
-                    self.click(self.es.continue_testing_btn)
-                    continue
-                return False
-
-            try:
+            while current <= total:
+                print(f"\n鐜板湪鏄疌IAQ鍒嗙墖{i+1}绗瑊current}棰�")
                 # 鑾峰彇鍒版墍鏈夐�夐」
-                options = self.get_eles(self.es.options)
-                number = random.randint(0, len(options)-1)
+                options = self.get_eles(self.elements.options, 5)
+                number = random.randint(0, len(options) - 1)
                 if options[number].is_enabled():
                     options[number].click()
-            except:
-                pass
-
-            # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑�
-            if self.submit_btn_is_display():
-                self.click(self.es.submit_btn)
-                # 鏁版嵁鏄惁涓婁紶瀹屾垚
-                time.sleep(15)
-                if self.upload_is_success():
-                    return True
-                return False
+                    current += 1
+            if (i + 1) != self.slice_count:
+                time.sleep(2)
+                # 鐐瑰嚮缁х画娴嬭瘯
+                self.click(self.elements.continue_testing_btn, 10)
+        time.sleep(2)
+        self.click(self.elements.submit_btn, 10)
 
     def upload_is_success(self):
         """
diff --git a/po/jaq_answer_page.py b/po/jaq_answer_page.py
index 930a3b9..0d48549 100644
--- a/po/jaq_answer_page.py
+++ b/po/jaq_answer_page.py
@@ -1,10 +1,11 @@
 import random
 
 from base.base_page import BasePage
-from elements.jaq_answer_elements import JAQAnswerElements as Answer
+from elements.jaq_answer_elements import JAQAnswerElements
 from selenium.common.exceptions import *
 
 import time
+import re
 
 
 class JAQAnswerPage(BasePage):
@@ -13,38 +14,33 @@
     """
     loading_count = 0
 
+    elements = JAQAnswerElements
+
     def answer(self):
         # 鏆傚仠3绉�
         time.sleep(3)
-        while True:
-            # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse
-            if not self.title_is_display():
-                return False
-
-            try:
-                # 鑾峰彇鍒版墍鏈塧閫夐」
-                options_a = self.get_eles(Answer.options_a)
-                if len(options_a) < 5:
-                    continue
-                number_a = random.randint(0, 4)
+        # 鑾峰彇鍒伴鐩�
+        title = self.get_ele(self.elements.q_title, 5)
+        # 鎴彇宸茬瓟鏁伴噺涓庢�绘暟閲�
+        match = re.search(r"(\d+)棰�/鎬�(\d+)", title.text)
+        current = int(match.group(1))
+        total = int(match.group(2))
+        while current <= total:
+            print(f"鐜板湪鏄疛AQ绗瑊current}棰�")
+            # 鑾峰彇鍒版墍鏈夐�夐」
+            options_a = self.get_eles(self.elements.options_a, 5)
+            options_b = self.get_eles(self.elements.options_b, 5)
+            number_a = random.randint(0, 4)
+            number_b = random.randint(0, 3)
+            if options_a[number_a].is_enabled() and options_b[number_b].is_enabled():
                 options_a[number_a].click()
-
-                # 鑾峰彇鍒版墍鏈塨閫夐」
-                options_b = self.get_eles(Answer.options_b)
-                if len(options_b) < 4:
-                    continue
-                number_b = random.randint(0, 3)
                 options_b[number_b].click()
-            except:
-                pass
+                current += 1
+                continue
 
-            # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑�
-            if self.submit_btn_is_display():
-                self.click_js(Answer.submit_btn)
-                # 鏁版嵁鏄惁涓婁紶瀹屾垚
-                if self.upload_is_success():
-                    return True
-                return False
+        time.sleep(3)
+        # 鐐瑰嚮鎻愪氦鎸夐挳
+        self.click(self.elements.submit_btn, 10)
 
     def upload_is_success(self):
         """
@@ -54,7 +50,7 @@
         i = 0
         while i < 60:
             try:
-                self.get_ele(Answer.upload_success_title, timeout=10)
+                self.get_ele(self.elements.upload_success_title, timeout=10)
                 return True
             except TimeoutException:
                 i += 1
@@ -67,7 +63,7 @@
         :return:
         """
         try:
-            button = self.get_ele(Answer.submit_btn)
+            button = self.get_ele(self.elements.submit_btn)
             if button.is_enabled():
                 return True
             else:
@@ -82,7 +78,7 @@
         """
         try:
             # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳
-            button = self.get_ele(Answer.continue_testing_btn)
+            button = self.get_ele(self.elements.continue_testing_btn)
             if button.is_enabled():
                 return True
             else:
@@ -97,7 +93,7 @@
         """
         try:
             # 鑾峰彇鏍囬
-            self.get_element_wait(Answer.title)
+            self.get_element_wait(self.elements.title)
             return True
         except TimeoutException:
             return False
@@ -110,7 +106,7 @@
         i = 0
         while i < 10:
             try:
-                self.get_ele(Answer.loading_text)
+                self.get_ele(self.elements.loading_text)
                 i += 1
                 time.sleep(1)
             except:
@@ -123,4 +119,4 @@
         寮�濮嬫祴璇曟寜閽�
         :return:
         """
-        self.click_wait(Answer.start_btn)
+        self.click_wait(self.elements.start_btn)
diff --git a/po/maq_answer_page.py b/po/maq_answer_page.py
index b084750..d5993bb 100644
--- a/po/maq_answer_page.py
+++ b/po/maq_answer_page.py
@@ -14,14 +14,14 @@
 
     loading_count = 0
 
-    se = MAQAnswerElements
+    elements = MAQAnswerElements
 
     tip_timing = 35
 
     def exercise_answer(self):
         # 鑾峰彇鍒伴鐩�
         time.sleep(3)
-        title = self.get_ele(self.se.q_title, 5)
+        title = self.get_ele(self.elements.q_title, 5)
         # 鎴彇宸茬瓟鏁伴噺涓庢�绘暟閲�
         match = re.search(r"(\d+)/(\d+)", title.text)
         current = int(match.group(1))
@@ -29,7 +29,7 @@
 
         while current <= total:
             # 鑾峰彇鍒版墍鏈夐�夐」
-            options = self.get_eles(self.se.options, 5)
+            options = self.get_eles(self.elements.options, 5)
             number = random.randint(0, 5)
             if options[number].is_enabled():
                 options[number].click()
@@ -37,26 +37,26 @@
                 continue
         time.sleep(3)
         # 鐐瑰嚮鎻愪氦鎸夐挳
-        self.click(self.se.exercise_submit_btn, 10)
+        self.click(self.elements.exercise_submit_btn, 10)
 
     def answer(self):
         # 鑾峰彇鍒伴鐩�
         time.sleep(3)
-        title = self.get_ele(self.se.q_title, 5)
+        title = self.get_ele(self.elements.q_title, 5)
         # 鎴彇宸茬瓟鏁伴噺涓庢�绘暟閲�
         match = re.search(r"(\d+)/(\d+)", title.text)
         current = int(match.group(1))
         total = int(match.group(2))
 
         while current <= total:
-            print(f"\n鐜板湪鏄{current}棰�")
+            print(f"\n鐜板湪鏄疢AQ绗瑊current}棰�")
             # 瑙﹀彂浜嬩腑
             if current == self.tip_timing:
                 time.sleep(5)
-                self.click(self.se.continue_testing_btn, 10)
+                self.click(self.elements.continue_testing_btn, 10)
 
             # 鑾峰彇鍒版墍鏈夐�夐」
-            options = self.get_eles(self.se.options, 5)
+            options = self.get_eles(self.elements.options, 5)
             number = random.randint(0, 5)
             if options[number].is_enabled():
                 options[number].click()
@@ -65,7 +65,7 @@
 
         time.sleep(3)
         # 鐐瑰嚮鎻愪氦鎸夐挳
-        self.click(self.se.submit_btn, 10)
+        self.click(self.elements.submit_btn, 10)
         # while True:
         #     # 鑾峰彇鍒版墍鏈夐�夐」
         #     options = self.get_eles(self.se.options)
@@ -116,11 +116,11 @@
                 # 鍒ゆ柇hint鏄惁鏈夊唴瀹�
                 if hint:
                     # 鑾峰彇鎻愮ず璇唴瀹�
-                    hint_text = self.get_ele(self.se.hint_text).text
+                    hint_text = self.get_ele(self.elements.hint_text).text
                     # 鍒ゆ柇鎻愮ず璇唴瀹规槸鍚﹀寘鍚紶鍏ョ殑hint
                     if hint in hint_text:
                         flag = True
-                self.click(self.se.continue_testing_btn)
+                self.click(self.elements.continue_testing_btn)
 
             # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse
             if not self.title_is_display():
@@ -128,7 +128,7 @@
 
             try:
                 # 鑾峰彇鍒版墍鏈夐�夐」
-                options = self.get_eles(self.se.options)
+                options = self.get_eles(self.elements.options)
                 if len(options) < 6:
                     continue
                 number = random.randint(0, 5)
@@ -150,7 +150,7 @@
 
             # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑�
             if self.submit_btn_is_display():
-                self.click(self.se.submit_btn)
+                self.click(self.elements.submit_btn)
                 # 鏁版嵁鏄惁涓婁紶瀹屾垚
                 time.sleep(15)
                 if self.upload_is_success():
@@ -159,7 +159,7 @@
                     return True
                 # 鏄惁缃戠粶寮傚父
                 try:
-                    self.get_ele(self.se.network_exception_title)
+                    self.get_ele(self.elements.network_exception_title)
                     return "缃戠粶寮傚父"
                 except NoSuchElementException:
                     pass
@@ -173,7 +173,7 @@
         i = 0
         while i < 60:
             try:
-                self.get_ele(self.se.upload_success_title, timeout=5)
+                self.get_ele(self.elements.upload_success_title, timeout=5)
                 return True
             except TimeoutException:
                 i += 1
@@ -186,7 +186,7 @@
         :return:
         """
         try:
-            button = self.get_ele(self.se.submit_btn)
+            button = self.get_ele(self.elements.submit_btn)
             if button.is_enabled():
                 return True
             else:
@@ -201,7 +201,7 @@
         """
         try:
             # 鐐瑰嚮缁х画娴嬭瘯鎸夐挳
-            button = self.get_ele(self.se.continue_testing_btn)
+            button = self.get_ele(self.elements.continue_testing_btn)
             if button.is_enabled():
                 return True
             else:
@@ -216,7 +216,7 @@
         """
         try:
             # 鑾峰彇鏍囬
-            self.get_ele(self.se.title, timeout=10)
+            self.get_ele(self.elements.title, timeout=10)
             return True
         except TimeoutException:
             return False
diff --git a/po/vaq_answer_page.py b/po/vaq_answer_page.py
index 57d6aca..9d5314e 100644
--- a/po/vaq_answer_page.py
+++ b/po/vaq_answer_page.py
@@ -1,10 +1,11 @@
 import random
 
 from base.base_page import BasePage
-from elements.vaq_answer_elements import VAQAnswerElements as Answer
+from elements.vaq_answer_elements import VAQAnswerElements
 from selenium.common.exceptions import *
 from selenium.webdriver.common.by import By
 import time
+import re
 
 
 class VAQAnswerPage(BasePage):
@@ -13,49 +14,46 @@
     """
     loading_count = 0
 
+    elements = VAQAnswerElements
+
+    slice_count = 9
+
     def answer(self):
-        # 鏆傚仠3绉�
-        # 棰勯�夊浘鐗�
-        # 鑾峰彇鍒版墍鏈夊浘鐗囬�夐」
-        pre_pictures = self.get_elements_wait(Answer.picture)
-        for picture in pre_pictures:
-            # 闅忔満1鍒�3
-            number = random.randint(1, 3)
-            # 鎷兼帴瑕佺偣鍑荤殑鎸夐挳鐨勫畾浣�
-            btn_loc = (By.XPATH, "div[3]/div[" + str(number) + "]")
-            # 鐐瑰嚮鎸夐挳
-            self.get_element_in(picture, btn_loc).click()
-            time.sleep(0.1)
-        # 鐐瑰嚮涓嬩竴姝ユ寜閽�
-        self.click(Answer.next_btn)
-        time.sleep(1)
-
+        time.sleep(3)
         # 鐐瑰嚮寮�濮嬫祴璇�
-        self.click(Answer.start_btn)
+        self.click(self.elements.start_btn)
+        time.sleep(2)
+        # 鐐瑰嚮缁х画娴嬭瘯
+        self.click(self.elements.start_btn)
 
-        # 缁嗚嚧鍒嗙被鍥剧墖
-        # 姣忎釜姝ラ閫夋嫨鍥剧墖鐨勬暟閲�
-        step_picture = [2, 2, 4, 4, 7, 7, 10, 10, 0]
-        i = 0
-        for num in step_picture:
-            for k in range(0, num):
-                # 鑾峰彇鍒板浘鐗�
-                picture = self.get_elements_wait(Answer.picture)[0]
-                # 鎷兼帴瑕佺偣鍑荤殑鎸夐挳鐨勫畾浣�
-                btn_loc = (By.XPATH, "div[2]/div[1]/img")
-                # 鐐瑰嚮鎸夐挳
-                btn = self.get_element_in(picture, btn_loc)
-                self.click_element_js(btn)
-                i += 1
-            # 鐐瑰嚮涓嬩竴姝ユ寜閽�
-            self.click(Answer.next_btn)
-        # 鐐瑰嚮鎻愪氦鎸夐挳
-        self.click_wait(Answer.submit_btn)
-        # 鏁版嵁鏄惁涓婁紶瀹屾垚
-        time.sleep(10)
-        if self.upload_is_success():
-            return True
-        return False
+        pre_pictures = self.get_eles(self.elements.pre_picture_btn, 10)
+
+        for pre_picture in pre_pictures:
+            pre_picture.click()
+            time.sleep(0.2)
+
+        # 鐐瑰嚮涓嬩竴姝�
+        self.click(self.elements.start_btn)
+
+        time.sleep(1)
+        for i in range(0, self.slice_count):
+            # 鑾峰彇褰撳墠鎵�闇�鍥剧墖鏁伴噺鐨勬枃瀛�
+            picture_count_text = self.get_ele(self.elements.current_require_picture_count)
+            pictures = self.get_eles(self.elements.picture_btn, 10)
+            match = re.search(r"(\d+) / (\d+)", picture_count_text.text)
+            total = int(match.group(2))
+            if (i + 1) != self.slice_count:
+                for k in range(0, total):
+                    self.driver.execute_script("arguments[0].click();", pictures[k])
+                    time.sleep(0.2)
+            if i == 0:
+                self.click(self.elements.start_btn)
+            else:
+                self.click(self.elements.next_btn)
+                time.sleep(1)
+        time.sleep(2)
+        # 鎻愪氦
+        self.click(self.elements.submit_btn)
 
     def upload_is_success(self):
         """
diff --git a/report/report.html b/report/report.html
index b20b07d..d2d2dcd 100644
--- a/report/report.html
+++ b/report/report.html
@@ -253,9 +253,9 @@
 }
 </script>
     <h1>report.html</h1>
-    <p>Report generated on 23-Jul-2024 at 17:12:01 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
+    <p>Report generated on 24-Jul-2024 at 17:42:22 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
     <h2>Summary</h2>
-    <p>1 tests ran in 22.66 seconds. </p>
+    <p>1 tests ran in 60.40 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">1 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">
@@ -270,8 +270,8 @@
       <tbody class="passed results-table-row">
         <tr>
           <td class="col-result">Passed</td>
-          <td class="col-name">testcase/test_main.py::TestMAQ::test_maq[MAQ]</td>
-          <td class="col-duration">22.63</td>
+          <td class="col-name">testcase/test_main.py::TestMain::test_vaq[VAQ]</td>
+          <td class="col-duration">60.35</td>
           <td class="col-links"></td></tr>
         <tr>
           <td class="extra" colspan="4">
diff --git a/testcase/conftest.py b/testcase/conftest.py
index 8ba0f3b..af175ca 100644
--- a/testcase/conftest.py
+++ b/testcase/conftest.py
@@ -15,10 +15,10 @@
 def driver(request):
     options = Options()
     # options.debugger_address = "127.0.0.1:9222"
-    options.add_argument('--headless')
-    options.add_argument('--no-sandbox')
-    options.add_argument('--disable-gpu')
-    options.add_argument('--disable-dev-shm-usage')
+    # options.add_argument('--headless')
+    # options.add_argument('--no-sandbox')
+    # options.add_argument('--disable-gpu')
+    # options.add_argument('--disable-dev-shm-usage')
     # options.add_argument('window-size=1200x600')
     # 鍒濆鍖杦ebdriver
     driver = webdriver.Chrome(options=options)
diff --git a/testcase/test_main.py b/testcase/test_main.py
index 78d003c..3abcc34 100644
--- a/testcase/test_main.py
+++ b/testcase/test_main.py
@@ -3,22 +3,26 @@
 import pytest
 from po.share_add_page import ShareAddPage
 from po.maq_answer_page import MAQAnswerPage
+from po.jaq_answer_page import JAQAnswerPage
+from po.caq_answer_page import CAQAnswerPage
+from po.ciaq_answer_page import CIAQAnswerPage
+from po.vaq_answer_page import VAQAnswerPage
 from comm.my_random import *
 
 
-class TestMAQ:
+class TestMain:
     driver = None
     test_package_name = "MAQ鑷姩娴嬭瘯鍖�-20230720170011"
 
     @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True)
     def test_maq(self, data_read: dict, driver):
         """
-        鎵撳紑鍒嗕韩閾炬帴
+        娴嬭瘯MAQ
         :return:
         """
         print(f"\n寮�濮嬭繘琛孧AQ娴嬭瘯......")
         # 鑾峰彇driver
-        TestMAQ.driver = driver
+        self.driver = driver
         driver.get(data_read['share_url'])
         # # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄
         # test_package_list = TestPackageListPage(driver)
@@ -54,18 +58,223 @@
         # 鍒涘缓answer瀵硅薄
         answer_page = MAQAnswerPage(driver)
         # 鐐瑰嚮寮�濮嬫祴璇�
-        answer_page.click(answer_page.se.start_btn, 10)
+        answer_page.click(answer_page.elements.start_btn, 10)
 
         # 璺宠繃缁冧範鐜妭
         answer_page.exercise_answer()
 
-        print("\n寮�濮嬬瓟棰�")
+        print("\nMAQ寮�濮嬬瓟棰�")
         # 寮�濮嬬瓟棰�
         answer_page.answer()
 
-        # 鏈�鍚庢娴嬪叧闂寜閽槸鍚﹀瓨鍦�
-        answer_page.get_ele(answer_page.se.close_btn, 30)
+        time.sleep(3)
 
+        # 鏈�鍚庢娴嬪叧闂寜閽槸鍚﹀瓨鍦�
+        answer_page.get_ele(answer_page.elements.close_btn, 30)
+
+    @pytest.mark.parametrize('data_read', ["JAQ"], indirect=True)
+    def test_jaq(self, data_read: dict, driver):
+        """
+        娴嬭瘯JAQ
+        :return:
+        """
+        print(f"\n寮�濮嬭繘琛孞AQ娴嬭瘯......")
+        # 鑾峰彇driver
+        self.driver = driver
+        driver.get(data_read['share_url'])
+        # # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄
+        # test_package_list = TestPackageListPage(driver)
+        # 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)
+        # # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄
+        share_add = ShareAddPage(driver)
+        # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺�
+        name = random_string(8)
+        email = name + "@gmail.com"
+        test_url = share_add.get_test_url(name, email)
+        # 鎵撳紑閾炬帴
+        driver.get(test_url)
+        # 鐐瑰嚮鎻愪氦鎸夐挳
+        share_add.click(share_add.es.submit_btn, 10)
+        # 鑾峰彇鏁版嵁
+        info = data_read["info"]
+        # # 濉啓鍩烘湰淇℃伅骞舵彁浜�
+        share_add.fill_info(email, info["position"], info["dept"])
+        # 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(5)
+
+        # 鍒涘缓answer瀵硅薄
+        answer_page = JAQAnswerPage(driver)
+        # 鐐瑰嚮寮�濮嬫祴璇�
+        answer_page.click(answer_page.elements.start_btn, 10)
+
+        print("\nJAQ寮�濮嬬瓟棰�")
+        # 寮�濮嬬瓟棰�
+        answer_page.answer()
+
+        time.sleep(3)
+
+        # 鏈�鍚庢娴嬪叧闂寜閽槸鍚﹀瓨鍦�
+        answer_page.get_ele(answer_page.elements.close_btn, 30)
+
+    @pytest.mark.parametrize('data_read', ["CAQ"], indirect=True)
+    def test_caq(self, data_read: dict, driver):
+        """
+        娴嬭瘯CAQ
+        :return:
+        """
+        print(f"\n寮�濮嬭繘琛孋AQ娴嬭瘯......")
+        # 鑾峰彇driver
+        self.driver = driver
+        driver.get(data_read['share_url'])
+        # # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄
+        # test_package_list = TestPackageListPage(driver)
+        # 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)
+        # # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄
+        share_add = ShareAddPage(driver)
+        # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺�
+        name = random_string(8)
+        email = name + "@gmail.com"
+        test_url = share_add.get_test_url(name, email)
+        # 鎵撳紑閾炬帴
+        driver.get(test_url)
+        # 鐐瑰嚮鎻愪氦鎸夐挳
+        share_add.click(share_add.es.submit_btn, 10)
+        # 鑾峰彇鏁版嵁
+        info = data_read["info"]
+        # # 濉啓鍩烘湰淇℃伅骞舵彁浜�
+        share_add.fill_info(email, info["position"], info["dept"])
+        # 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(5)
+
+        # 鍒涘缓answer瀵硅薄
+        answer_page = CAQAnswerPage(driver)
+        # 鐐瑰嚮寮�濮嬫祴璇�
+        answer_page.click(answer_page.elements.start_btn, 10)
+
+        print("\nCAQ寮�濮嬬瓟棰�")
+        # 寮�濮嬬瓟棰�
+        answer_page.answer()
+
+        time.sleep(3)
+
+        # 鏈�鍚庢娴嬪叧闂寜閽槸鍚﹀瓨鍦�
+        answer_page.get_ele(answer_page.elements.close_btn, 30)
+
+    @pytest.mark.parametrize('data_read', ["CIAQ"], indirect=True)
+    def test_ciaq(self, data_read: dict, driver):
+        """
+        娴嬭瘯CIAQ
+        :return:
+        """
+        print(f"\n寮�濮嬭繘琛孋IAQ娴嬭瘯......")
+        # 鑾峰彇driver
+        self.driver = driver
+        driver.get(data_read['share_url'])
+        # # 鍒涘缓娴嬭瘯鍖呭垪琛ㄩ〉闈㈢殑瀵硅薄
+        # test_package_list = TestPackageListPage(driver)
+        # 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)
+        # # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄
+        share_add = ShareAddPage(driver)
+        # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺�
+        name = random_string(8)
+        email = name + "@gmail.com"
+        test_url = share_add.get_test_url(name, email)
+        # 鎵撳紑閾炬帴
+        driver.get(test_url)
+        # 鑾峰彇鏁版嵁
+        info = data_read["info"]
+        # # 濉啓鍩烘湰淇℃伅骞舵彁浜�
+        share_add.fill_info(email, "", "")
+        # 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(5)
+
+        # 鍒涘缓answer瀵硅薄
+        answer_page = CIAQAnswerPage(driver)
+        # 鐐瑰嚮寮�濮嬫祴璇�
+        answer_page.click(answer_page.elements.start_btn, 10)
+
+        print("\nCIAQ寮�濮嬬瓟棰�")
+        # 寮�濮嬬瓟棰�
+        answer_page.answer()
+
+        time.sleep(3)
+
+        # 鏈�鍚庢娴嬪叧闂寜閽槸鍚﹀瓨鍦�
+        answer_page.get_ele(answer_page.elements.close_btn, 30)
+
+    @pytest.mark.parametrize('data_read', ["VAQ"], indirect=True)
+    def test_vaq(self, data_read: dict, driver):
+        """
+        娴嬭瘯VAQ
+        :return:
+        """
+        print(f"\n寮�濮嬭繘琛孷AQ娴嬭瘯......")
+        # 鑾峰彇driver
+        self.driver = driver
+        driver.get(data_read['share_url'])
+        # 鍒涘缓鍒嗕韩椤甸潰瀵硅薄
+        share_add = ShareAddPage(driver)
+        # 濉啓淇℃伅鎻愪氦骞惰幏鍙栨祴璇曢摼鎺�
+        name = random_string(8)
+        email = name + "@gmail.com"
+        test_url = share_add.get_test_url(name, email)
+        # 鎵撳紑閾炬帴
+        driver.get(test_url)
+        # 鐐瑰嚮鎻愪氦鎸夐挳
+        share_add.click(share_add.es.submit_btn, 10)
+        # 鑾峰彇鏁版嵁
+        info = data_read["info"]
+        # # 濉啓鍩烘湰淇℃伅骞舵彁浜�
+        share_add.fill_info(email, "", "")
+
+        time.sleep(5)
+
+        # 鍒涘缓answer瀵硅薄
+        answer_page = VAQAnswerPage(driver)
+        # 鐐瑰嚮寮�濮嬫祴璇�
+        answer_page.click(answer_page.elements.start_btn, 10)
+
+        print("\nVAQ寮�濮嬬瓟棰�")
+        # 寮�濮嬬瓟棰�
+        answer_page.answer()
+
+        time.sleep(3)
+
+        # 鏈�鍚庢娴嬪叧闂寜閽槸鍚﹀瓨鍦�
+        answer_page.get_ele(answer_page.elements.close_btn, 30)
     # def test_answer(self):
     #     # 鑾峰彇driver
     #     driver = TestMAQ.driver

--
Gitblit v1.9.1