| | |
| | | return element.find_element(*locator) |
| | | |
| | | # 在指定元素中定位多个元素 |
| | | def get_elements_in(self, element, *locator): |
| | | def get_elements_in(self, element, locator): |
| | | return element.find_elements(*locator) |
| | | |
| | | # 元素定位 |
| | |
| | | |
| | | # 滑动页面 |
| | | 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): |
| | |
| | | } |
| | | }, |
| | | "JAQ": { |
| | | "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtSbk5BPT0=", |
| | | "menu": "测试包管理/测试包列表", |
| | | "add": { |
| | | "company": "TAI测试", |
| | |
| | | } |
| | | }, |
| | | "CAQ": { |
| | | "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtSbk5RPT0=", |
| | | "menu": "测试包管理/测试包列表", |
| | | "add": { |
| | | "company": "TAI测试", |
| | |
| | | } |
| | | }, |
| | | "VAQ": { |
| | | "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtScmVRPT0=", |
| | | "menu": "测试包管理/测试包列表", |
| | | "add": { |
| | | "company": "TAI测试", |
| | |
| | | } |
| | | }, |
| | | "CIAQ": { |
| | | "share_url": "http://47.114.179.216:8090/exam/testMember/shareAdd?packageId=VGtScmVBPT0=", |
| | | "menu": "测试包管理/测试包列表", |
| | | "add": { |
| | | "company": "TAI测试", |
| | |
| | | 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(),'提交')]/..") |
| | | # 上传成功标题 |
| | |
| | | # 标题文字 |
| | | title = (By.XPATH, "//div[@class='align-center']/span[2]") |
| | | |
| | | close_btn = (By.XPATH, "//button") |
| | | |
| | |
| | | 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(), '数据已经成功地上传至服务器')]") |
| | | |
| | |
| | | # 标题文字 |
| | | title = (By.XPATH, "//div[@class='align-center']/span[2]") |
| | | |
| | | close_btn = (By.XPATH, "//button") |
| | | |
| | |
| | | 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(), '数据已经成功地上传至服务器')]") |
| | | |
| | |
| | | # 标题文字 |
| | | title = (By.XPATH, "//h1[text()='JAQ']") |
| | | |
| | | # 关闭按钮 |
| | | close_btn = (By.XPATH, "//button[1]") |
| | | |
| | |
| | | # 开始测试按钮 |
| | | 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']") |
| | |
| | | # 继续测试按钮 |
| | | 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(), '测试结束')]") |
| | | |
| | |
| | | |
| | | # 标题文字 |
| | | 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") |
| | |
| | | from selenium.common.exceptions import * |
| | | |
| | | import time |
| | | import re |
| | | |
| | | |
| | | class CAQAnswerPage(BasePage): |
| | |
| | | """ |
| | | 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) |
| | | |
| | | # # 标题不存在直接返回False |
| | | # 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): |
| | | """ |
| | |
| | | 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 |
| | |
| | | from selenium.common.exceptions import * |
| | | |
| | | import time |
| | | import re |
| | | |
| | | |
| | | class CIAQAnswerPage(BasePage): |
| | |
| | | """ |
| | | 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)) |
| | | |
| | | # 标题不存在直接返回False |
| | | 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现在是CIAQ分片{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): |
| | | """ |
| | |
| | | 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): |
| | |
| | | """ |
| | | loading_count = 0 |
| | | |
| | | elements = JAQAnswerElements |
| | | |
| | | def answer(self): |
| | | # 暂停3秒 |
| | | time.sleep(3) |
| | | while True: |
| | | # 标题不存在直接返回False |
| | | if not self.title_is_display(): |
| | | return False |
| | | |
| | | try: |
| | | # 获取到所有a选项 |
| | | 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"现在是JAQ第{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() |
| | | |
| | | # 获取到所有b选项 |
| | | 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): |
| | | """ |
| | |
| | | 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 |
| | |
| | | :return: |
| | | """ |
| | | try: |
| | | button = self.get_ele(Answer.submit_btn) |
| | | button = self.get_ele(self.elements.submit_btn) |
| | | if button.is_enabled(): |
| | | return True |
| | | else: |
| | |
| | | """ |
| | | 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: |
| | |
| | | """ |
| | | try: |
| | | # 获取标题 |
| | | self.get_element_wait(Answer.title) |
| | | self.get_element_wait(self.elements.title) |
| | | return True |
| | | except TimeoutException: |
| | | return False |
| | |
| | | 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: |
| | |
| | | 开始测试按钮 |
| | | :return: |
| | | """ |
| | | self.click_wait(Answer.start_btn) |
| | | self.click_wait(self.elements.start_btn) |
| | |
| | | |
| | | 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)) |
| | |
| | | |
| | | 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() |
| | |
| | | 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现在是MAQ第{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() |
| | |
| | | |
| | | 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) |
| | |
| | | # 判断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) |
| | | |
| | | # 标题不存在直接返回False |
| | | if not self.title_is_display(): |
| | |
| | | |
| | | 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) |
| | |
| | | |
| | | # 提交按钮存在则点击 |
| | | 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(): |
| | |
| | | return True |
| | | # 是否网络异常 |
| | | try: |
| | | self.get_ele(self.se.network_exception_title) |
| | | self.get_ele(self.elements.network_exception_title) |
| | | return "网络异常" |
| | | except NoSuchElementException: |
| | | pass |
| | |
| | | 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 |
| | |
| | | :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: |
| | |
| | | """ |
| | | 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: |
| | |
| | | """ |
| | | try: |
| | | # 获取标题 |
| | | self.get_ele(self.se.title, timeout=10) |
| | | self.get_ele(self.elements.title, timeout=10) |
| | | return True |
| | | except TimeoutException: |
| | | return False |
| | |
| | | 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): |
| | |
| | | """ |
| | | 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): |
| | | """ |
| | |
| | | } |
| | | </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"> |
| | |
| | | <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"> |
| | |
| | | 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') |
| | | # 初始化webdriver |
| | | driver = webdriver.Chrome(options=options) |
| | |
| | | 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开始进行MAQ测试......") |
| | | # 获取driver |
| | | TestMAQ.driver = driver |
| | | self.driver = driver |
| | | driver.get(data_read['share_url']) |
| | | # # 创建测试包列表页面的对象 |
| | | # test_package_list = TestPackageListPage(driver) |
| | |
| | | # 创建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开始进行JAQ测试......") |
| | | # 获取driver |
| | | self.driver = driver |
| | | driver.get(data_read['share_url']) |
| | | # # 创建测试包列表页面的对象 |
| | | # test_package_list = TestPackageListPage(driver) |
| | | # url = test_package_list.oper_elem("share_url_text") |
| | | # # 切换到上一层iframe |
| | | # 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开始进行CAQ测试......") |
| | | # 获取driver |
| | | self.driver = driver |
| | | driver.get(data_read['share_url']) |
| | | # # 创建测试包列表页面的对象 |
| | | # test_package_list = TestPackageListPage(driver) |
| | | # url = test_package_list.oper_elem("share_url_text") |
| | | # # 切换到上一层iframe |
| | | # 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开始进行CIAQ测试......") |
| | | # 获取driver |
| | | self.driver = driver |
| | | driver.get(data_read['share_url']) |
| | | # # 创建测试包列表页面的对象 |
| | | # test_package_list = TestPackageListPage(driver) |
| | | # url = test_package_list.oper_elem("share_url_text") |
| | | # # 切换到上一层iframe |
| | | # 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开始进行VAQ测试......") |
| | | # 获取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 |