.idea/misc.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
.idea/tal_autoTest.iml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
base/base_page.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
data/test_data.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
elements/maq_answer_elements.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
main.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
po/ciaq_answer_page.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
po/jaq_answer_page.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
po/maq_answer_page.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
po/share_add_page.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
po/test_package_list_page.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
report/report.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
testcase/conftest.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
testcase/test_1login.py | 补丁 | 查看 | 原始文档 | blame | 历史 | |
testcase/test_ciaq.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
testcase/test_jaq.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
testcase/test_main.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.idea/misc.xml
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (tal_autoTest)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (tal_autoTest)" project-jdk-type="Python SDK" /> </project> .idea/tal_autoTest.iml
@@ -4,7 +4,7 @@ <content url="file://$MODULE_DIR$"> <excludeFolder url="file://$MODULE_DIR$/venv" /> </content> <orderEntry type="jdk" jdkName="Python 3.11 (tal_autoTest)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="Python 3.10 (tal_autoTest)" jdkType="Python SDK" /> <orderEntry type="sourceFolder" forTests="false" /> </component> </module> base/base_page.py
@@ -1,7 +1,7 @@ import importlib import time from selenium.common import StaleElementReferenceException, ElementClickInterceptedException from selenium.common.exceptions import StaleElementReferenceException, ElementClickInterceptedException from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC data/test_data.json
@@ -605,6 +605,7 @@ }, "MAQ": { "share_url": "http://tai-online.com/exam/testMember/shareAdd?packageId=VG5wbk1BPT0=", "menu": "测试包管理/测试包列表", "add": { "company": "TAI测试", elements/maq_answer_elements.py
@@ -14,17 +14,19 @@ class MAQAnswerElements: # 开始测试按钮 start_btn = (By.XPATH, "//button") start_btn = (By.XPATH, "//button[1]") # 题目 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[1]") # 提交按钮 submit_btn = (By.XPATH, "//button/span[contains(text(),'提交')]/..") submit_btn = (By.XPATH, "//button[2]") # 练习提交按钮 exercise_submit_btn = (By.XPATH, "//button[1]") # 上传成功标题 upload_success_title = (By.XPATH, "//main/h2[contains(text(), '数据已经成功地上传至服务器')]") # 上传成功标题 @@ -38,3 +40,6 @@ # 标题文字 title = (By.XPATH, "//div[@class='align-center']/span[2]") # 关闭按钮 close_btn = (By.XPATH, "//button[1]") main.py
@@ -1,11 +1,8 @@ import time import pytest import pytest_html import os def run_testcases(): pytest.main(['-vs', '--html=report/report.html', 'testcase']) pytest.main(['-vs', '--html=report/report.html', 'testcase/test_main.py']) if __name__ == '__main__': po/ciaq_answer_page.py
@@ -1,7 +1,7 @@ import random from base.base_page import BasePage from elements.ciaq_answer_elements import CIAQAnswerElements as Answer from elements.ciaq_answer_elements import CIAQAnswerElements from selenium.common.exceptions import * import time @@ -13,24 +13,26 @@ """ loading_count = 0 es = CIAQAnswerElements def answer(self): # 暂停3秒 time.sleep(3) while True: # 继续测试按钮出现则点击 if self.continue_btn_is_display(): self.click(Answer.continue_testing_btn) self.click(self.es.continue_testing_btn) # 标题不存在直接返回False if not self.title_is_display(): if self.continue_btn_is_display(): self.click(Answer.continue_testing_btn) self.click(self.es.continue_testing_btn) continue return False try: # 获取到所有选项 options = self.get_elements(Answer.options) options = self.get_eles(self.es.options) number = random.randint(0, len(options)-1) if options[number].is_enabled(): options[number].click() @@ -39,7 +41,7 @@ # 提交按钮存在则点击 if self.submit_btn_is_display(): self.click(Answer.submit_btn) self.click(self.es.submit_btn) # 数据是否上传完成 time.sleep(15) if self.upload_is_success(): @@ -54,7 +56,7 @@ i = 0 while i < 60: try: self.get_element_wait(Answer.upload_success_title) self.get_ele(self.es.upload_success_title, timeout=10) return True except TimeoutException: i += 1 @@ -67,7 +69,7 @@ :return: """ try: button = self.get_element(Answer.submit_btn) button = self.get_ele(self.es.submit_btn) if button.is_enabled(): return True else: @@ -82,7 +84,7 @@ """ try: # 点击继续测试按钮 button = self.get_element(Answer.continue_testing_btn) button = self.get_ele(self.es.continue_testing_btn) if button.is_enabled(): return True else: @@ -97,7 +99,7 @@ """ try: # 获取标题 self.get_element_wait(Answer.title) self.get_element_wait(self.es.title) return True except TimeoutException: return False @@ -110,7 +112,7 @@ i = 0 while i < 10: try: self.get_element(Answer.loading_text) self.get_ele(self.es.loading_text) i += 1 time.sleep(1) except: @@ -123,4 +125,4 @@ 开始测试按钮 :return: """ self.click_wait(Answer.start_btn) self.click_wait(self.es.start_btn) po/jaq_answer_page.py
@@ -23,14 +23,14 @@ try: # 获取到所有a选项 options_a = self.get_elements(Answer.options_a) options_a = self.get_eles(Answer.options_a) if len(options_a) < 5: continue number_a = random.randint(0, 4) options_a[number_a].click() # 获取到所有b选项 options_b = self.get_elements(Answer.options_b) options_b = self.get_eles(Answer.options_b) if len(options_b) < 4: continue number_b = random.randint(0, 3) @@ -54,7 +54,7 @@ i = 0 while i < 60: try: self.get_element_wait(Answer.upload_success_title) self.get_ele(Answer.upload_success_title, timeout=10) return True except TimeoutException: i += 1 @@ -67,7 +67,7 @@ :return: """ try: button = self.get_element(Answer.submit_btn) button = self.get_ele(Answer.submit_btn) if button.is_enabled(): return True else: @@ -82,7 +82,7 @@ """ try: # 点击继续测试按钮 button = self.get_element(Answer.continue_testing_btn) button = self.get_ele(Answer.continue_testing_btn) if button.is_enabled(): return True else: @@ -110,7 +110,7 @@ i = 0 while i < 10: try: self.get_element(Answer.loading_text) self.get_ele(Answer.loading_text) i += 1 time.sleep(1) except: po/maq_answer_page.py
@@ -3,8 +3,8 @@ from base.base_page import BasePage from elements.maq_answer_elements import MAQAnswerElements from selenium.common.exceptions import * import time import re class MAQAnswerPage(BasePage): @@ -16,12 +16,98 @@ se = MAQAnswerElements def answer(self, hint=None, question: dict = None): tip_timing = 35 def exercise_answer(self): # 获取到题目 time.sleep(3) title = self.get_ele(self.se.q_title, 5) # 截取已答数量与总数量 match = re.search(r"(\d+)/(\d+)", title.text) current = int(match.group(1)) total = int(match.group(2)) while current <= total: # 获取到所有选项 options = self.get_eles(self.se.options, 5) number = random.randint(0, 5) if options[number].is_enabled(): options[number].click() current += 1 continue time.sleep(3) # 点击提交按钮 self.click(self.se.exercise_submit_btn, 10) def answer(self): # 获取到题目 time.sleep(3) title = self.get_ele(self.se.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}题") # 触发事中 if current == self.tip_timing: time.sleep(5) self.click(self.se.continue_testing_btn, 10) # 获取到所有选项 options = self.get_eles(self.se.options, 5) number = random.randint(0, 5) if options[number].is_enabled(): options[number].click() current += 1 continue time.sleep(3) # 点击提交按钮 self.click(self.se.submit_btn, 10) # while True: # # 获取到所有选项 # options = self.get_eles(self.se.options) # if len(options) < 6: # continue # number = random.randint(0, 5) # if options[number].is_enabled(): # # 获取到题目 # q_title = self.get_ele(self.se.q_title).text # # q_title与question_title不相同则写入question中 # # 遍历字典 # # if question: # # for key in question.keys(): # # q_title = self.get_ele(self.se.q_title).text # # if question[key]["title"] in q_title and "answer" not in question[key]: # # question[key]["answer"] = number + 1 # # question_title = q_title # # break # options[number].click() # # # 提交按钮存在则点击 # if self.submit_btn_is_display(): # self.click(self.se.submit_btn) # # 数据是否上传完成 # time.sleep(15) # if self.upload_is_success(): # if hint: # return flag # return True # # 是否网络异常 # try: # self.get_ele(self.se.network_exception_title) # return "网络异常" # except NoSuchElementException: # pass # return False def answer2(self, hint=None, question: dict = None): flag = False # 暂停3秒 time.sleep(3) # 点击开始答题 self.click(self.se.start_btn) question_title = None while True: # time.sleep(0.5) po/share_add_page.py
@@ -35,8 +35,8 @@ :return: """ self.fill(self.es.fill_email, email, timeout=10) self.fill(self.es.fill_position, position) self.fill(self.es.fill_dept, dept) # self.fill(self.es.fill_position, position) # self.fill(self.es.fill_dept, dept) self.click(self.es.submit_btn) def fill_info_CIAQ(self, info): po/test_package_list_page.py
@@ -244,7 +244,6 @@ return flag def delete_package(self, package_name): """ 删除测试包 report/report.html
@@ -253,10 +253,10 @@ } </script> <h1>report.html</h1> <p>Report generated on 28-Jul-2023 at 16:53:13 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p> <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> <h2>Summary</h2> <p>19 tests ran in 567.35 seconds. </p> <p class="filter" hidden="true">(Un)check the boxes to filter the results.</p><input checked="true" class="filter" data-test-result="passed" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">19 passed</span>, <input checked="true" class="filter" data-test-result="skipped" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="skipped">0 skipped</span>, <input checked="true" class="filter" data-test-result="failed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">0 failed</span>, <input checked="true" class="filter" data-test-result="error" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="error">0 errors</span>, <input checked="true" class="filter" data-test-result="xfailed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xfailed">0 expected failures</span>, <input checked="true" class="filter" data-test-result="xpassed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xpassed">0 unexpected passes</span> <p>1 tests ran in 22.66 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"> <thead id="results-table-head"> @@ -270,170 +270,8 @@ <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_create_package[testPackageList]</td> <td class="col-duration">9.81</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_edit_package[testPackageList]</td> <td class="col-duration">10.59</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_add_member[memberDetail]</td> <td class="col-duration">10.96</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_edit_member[memberDetail]</td> <td class="col-duration">6.59</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_member[memberDetail]</td> <td class="col-duration">2.31</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_url[memberDetail]</td> <td class="col-duration">1.13</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_import[memberDetail]</td> <td class="col-duration">4.23</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_send_email[memberDetail]</td> <td class="col-duration">8.24</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_send_sms[memberDetail]</td> <td class="col-duration">9.00</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_skip_report[memberDetail]</td> <td class="col-duration">5.16</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_remove_member[memberDetail]</td> <td class="col-duration">1.87</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_edit_prompt[testPackageList]</td> <td class="col-duration">368.04</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_verify_member_status[testPackageList]</td> <td class="col-duration">5.39</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_generate_export_report[testPackageList]</td> <td class="col-duration">26.83</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_download_report[testPackageList]</td> <td class="col-duration">2.08</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_report[testPackageList]</td> <td class="col-duration">20.38</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_export_data[testPackageList]</td> <td class="col-duration">2.18</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_hr_resend[testPackageList]</td> <td class="col-duration">30.40</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> <div class="empty log">No log output captured.</div></td></tr></tbody> <tbody class="passed results-table-row"> <tr> <td class="col-result">Passed</td> <td class="col-name">testcase/test_2package_list.py::TestPackageList::test_member_resend[testPackageList]</td> <td class="col-duration">37.73</td> <td class="col-name">testcase/test_main.py::TestMAQ::test_maq[MAQ]</td> <td class="col-duration">22.63</td> <td class="col-links"></td></tr> <tr> <td class="extra" colspan="4"> testcase/conftest.py
@@ -14,7 +14,12 @@ @pytest.fixture(scope="session") def driver(request): options = Options() options.debugger_address = "127.0.0.1:9222" # 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('window-size=1200x600') # 初始化webdriver driver = webdriver.Chrome(options=options) request.addfinalizer(driver.quit) @@ -30,11 +35,14 @@ """ # 获取当前项目根路径 root_path = os.getcwd() if "\\testcase" in root_path: root_path = root_path[0:root_path.rfind("\\testcase")] print(root_path) if "testcase" in root_path: root_path = root_path.replace('testcase', '') # 获取到要获取数据的键 key = request.param file_path = os.path.join(root_path, "data", "test_data.json") print("file_path:", file_path) # 读取数据 with open(root_path + r"\data\test_data.json", "r", encoding="utf-8") as f: with open(file_path, "r", encoding="utf-8") as f: values = json.load(f) return values[key] testcase/test_1login.py
testcase/test_ciaq.py
@@ -16,47 +16,6 @@ driver = None test_package_name = "CIAQ自动测试包-20230718171809" @pytest.mark.parametrize('data_read', ["login"], indirect=True) def test_login(self, data_read: dict): """ 打开页面并进行登录测试 :param data_read: 执行数据读取的函数并获取到返回值 :return: """ TestCIAQ.driver = webdriver.Chrome() driver = TestCIAQ.driver login_page = LoginPage(driver) try: # 打开链接 driver.get(data_read["url"]) except: # 链接打开出现异常说明链接无法访问,捕获异常但不做处理 pass # 浏览器窗口最大化 driver.maximize_window() # 获取到刷新按钮并每10秒点击一次,知道刷新按钮消失 while True: try: # 判断打开的页面是否存在刷新按钮 reload_btn = login_page.get_element((By.XPATH, "//div[@id='buttons']/div/button[@id='reload-button']")) # 点击刷新按钮 reload_btn.click() time.sleep(10) except: # 出现异常表示不存在刷新按钮 # 接着判断是否存在nginx error! try: nginx_error = login_page.get_element((By.XPATH, "//strong[text() = 'nginx error!']")) # 存在则睡眠10秒 time.sleep(10) except: break login_page.login(data_read["username"], data_read["password"], data_read["code"]) time.sleep(2) assert login_page.is_login_success() @pytest.mark.parametrize('data_read', ["CIAQ"], indirect=True) def test_create_package(self, data_read: dict): """ @@ -73,46 +32,48 @@ # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 点击创建按钮 test_package_list.create_btn() test_package_list.click(test_package_list.es.create_btn) # 获取当前时间 current_time = datetime.now() # 转换为字符串 time_str = current_time.strftime("%Y%m%d%H%M%S") # 创建测试包填写的参数 # 测试包名称 test_package_name = "CIAQ自动测试包-" + time_str # 设置测试包名称为类变量 TestCIAQ.test_package_name = test_package_name # 获取创建测试包的数据 create_data = data_read["add"] # 填写测试包名称 test_package_list.testPackageName_input(test_package_name) test_package_list.fill(test_package_list.es.add_testPackageName_input, test_package_name) # 填写报告企业名称 test_package_list.reportCompanyName_input(create_data["company"]) test_package_list.fill(test_package_list.es.add_reportCompanyName_input, create_data["company"]) # 选择测试包类型 test_package_list.testPackageType_select(create_data["type"]) test_package_list.select(test_package_list.es.add_testPackageType_select, test_package_list.es.add_testPackageType_option, create_data["type"]) # 选择产品包 test_package_list.prodTree_select(create_data["product"]) # 输入hr邮箱 test_package_list.hrReportEmail_input(create_data["hrEmail"]) test_package_list.fill(test_package_list.es.add_hrEmail_input, create_data["hrEmail"]) # 输入有效期 test_package_list.invalidTime_input(create_data["invalid"]) test_package_list.fill(test_package_list.es.add_invalidTime, create_data["invalid"]) # 选择邀请邮件语言类型 test_package_list.testTemplateLangType_select(create_data["memberLang"]) test_package_list.select(test_package_list.es.add_templateLangType_select, test_package_list.es.add_templateLangType_option, create_data["memberLang"]) # 选择HR邮件语言类型 test_package_list.hrTemplateLangType_select(create_data["hrReportLang"]) test_package_list.select(test_package_list.es.add_hrTemplateLangType_select, test_package_list.es.add_hrTemplateLangType_option, create_data["hrReportLang"]) # 选择报告模板 test_package_list.reportTemplate_select(create_data["reportTemplate"]) test_package_list.select(test_package_list.es.add_reportTemplateId_select, test_package_list.es.add_reportTemplateId_option, create_data["reportTemplate"]) # 点击测试者接收报告 test_package_list.autoSendReport_checkbox() test_package_list.click(test_package_list.es.add_autoSendReport_checkbox) # 选择测试者报告邮箱语言类型 test_package_list.memberReportLangType_select(create_data["memberReportLang"]) test_package_list.select(test_package_list.es.add_memberReportLangType_select, test_package_list.es.add_memberReportLangType_option, create_data["memberReportLang"]) # 选择人口学编码 test_package_list.select_code_checkbox(create_data["checkCode"], create_data["uncheckCode"]) # 点击确认按钮 test_package_list.add_confirm() test_package_list.click(test_package_list.es.add_confirm_btn) time.sleep(2) # 判断是否成功创建 assert test_package_list.is_create_success(test_package_name) @@ -128,24 +89,21 @@ driver = TestCIAQ.driver # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 勾选新创建的测试包 test_package_list.click_package_checkbox(TestCIAQ.test_package_name) # 点击生成分享链接按钮 test_package_list.click_share_1_btn() # 获取到url url = test_package_list.get_share_url() url = test_package_list.get_share_url(TestCIAQ.test_package_name) # 打开新标签页加载url test_package_list.open_new_table_to_url(url) test_package_list.goto_new_table(url) # 创建分享页面对象 share_add = ShareAddPage(driver) # 填写信息提交并获取测试链接 name = random_string(8) email = name + "@gmail.com" test_url = share_add.page_default_operation(name, email) # 填写信息 test_url = share_add.get_test_url(name, email) # 当前页面打开链接 driver.get(test_url) # 点击提交按钮 share_add.submit_btn() share_add.click(share_add.es.submit_btn) # 获取数据 info = data_read["info"] # 填写基本信息并提交 @@ -175,7 +133,7 @@ # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 删除测试包 test_package_list.delete_package() test_package_list.delete_package(TestCIAQ.test_package_name) time.sleep(5) # 关闭 driver.quit() testcase/test_jaq.py
@@ -17,46 +17,6 @@ driver = None test_package_name = None @pytest.mark.parametrize('data_read', ["login"], indirect=True) def test_login(self, data_read: dict): """ 打开页面并进行登录测试 :return: """ TestJAQ.driver = webdriver.Chrome() driver = TestJAQ.driver login_page = LoginPage(driver) try: # 打开链接 driver.get(data_read["url"]) except: # 链接打开出现异常说明链接无法访问,捕获异常但不做处理 pass # 浏览器窗口最大化 driver.maximize_window() # 获取到刷新按钮并每10秒点击一次,知道刷新按钮消失 while True: try: # 判断打开的页面是否存在刷新按钮 reload_btn = login_page.get_element((By.XPATH, "//div[@id='buttons']/div/button[@id='reload-button']")) # 点击刷新按钮 reload_btn.click() time.sleep(10) except: # 出现异常表示不存在刷新按钮 # 接着判断是否存在nginx error! try: nginx_error = login_page.get_element((By.XPATH, "//strong[text() = 'nginx error!']")) # 存在则睡眠10秒 time.sleep(10) except: break login_page.login(data_read["username"], data_read["password"], data_read["code"]) time.sleep(2) assert login_page.is_login_success() @pytest.mark.parametrize('data_read', ["JAQ"], indirect=True) def test_create_package(self, data_read: dict): """ @@ -87,34 +47,39 @@ create_data = data_read["add"] # 填写测试包名称 test_package_list.testPackageName_input(test_package_name) test_package_list.reportCompanyName_input(create_data["company"]) test_package_list.fill(test_package_list.es.add_testPackageName_input, test_package_name) # 填写报告企业名称 test_package_list.fill(test_package_list.es.add_reportCompanyName_input, create_data["company"]) # 选择测试包类型 test_package_list.testPackageType_select(create_data["type"]) test_package_list.select(test_package_list.es.add_testPackageType_select, test_package_list.es.add_testPackageType_option, create_data["type"]) # 选择产品包 test_package_list.prodTree_select(create_data["product"]) # 输入hr邮箱 test_package_list.hrReportEmail_input(create_data["hrEmail"]) test_package_list.fill(test_package_list.es.add_hrEmail_input, create_data["hrEmail"]) # 输入有效期 test_package_list.invalidTime_input(create_data["invalid"]) test_package_list.fill(test_package_list.es.add_invalidTime, create_data["invalid"]) # 选择邀请邮件语言类型 test_package_list.testTemplateLangType_select(create_data["memberLang"]) test_package_list.select(test_package_list.es.add_templateLangType_select, test_package_list.es.add_templateLangType_option, create_data["memberLang"]) # 选择HR邮件语言类型 test_package_list.hrTemplateLangType_select(create_data["hrReportLang"]) test_package_list.select(test_package_list.es.add_hrTemplateLangType_select, test_package_list.es.add_hrTemplateLangType_option, create_data["hrReportLang"]) # 选择报告模板 test_package_list.reportTemplate_select(create_data["reportTemplate"]) test_package_list.select(test_package_list.es.add_reportTemplateId_select, test_package_list.es.add_reportTemplateId_option, create_data["reportTemplate"]) # 输入要评价的岗位 test_package_list.position_input(create_data["position"]) test_package_list.fill(test_package_list.es.add_position_input, create_data["position"]) # 输入职业大类 test_package_list.professionalCategory_input(create_data["professionalCategory"]) test_package_list.fill(test_package_list.es.add_professionalCategory_input, create_data["professionalCategory"]) # 输入上级岗位 test_package_list.superiorPosition_input(create_data["superiorPosition"]) test_package_list.fill(test_package_list.es.add_superiorPosition_input, create_data["superiorPosition"]) # 点击测试者接收报告 test_package_list.autoSendReport_checkbox() test_package_list.click(test_package_list.es.add_autoSendReport_checkbox) # 选择测试者报告邮箱语言类型 test_package_list.memberReportLangType_select(create_data["memberReportLang"]) test_package_list.select(test_package_list.es.add_memberReportLangType_select, test_package_list.es.add_memberReportLangType_option, create_data["memberReportLang"]) # 点击确认按钮 test_package_list.add_confirm() test_package_list.click(test_package_list.es.add_confirm_btn) time.sleep(2) # 判断是否成功创建 assert test_package_list.is_create_success(test_package_name) @@ -130,24 +95,20 @@ driver = TestJAQ.driver # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 勾选新创建的测试包 test_package_list.click_package_checkbox(TestJAQ.test_package_name) # 点击生成分享链接按钮 test_package_list.click_share_1_btn() # 获取到url url = test_package_list.get_share_url() url = test_package_list.get_share_url(TestJAQ.test_package_name) # 打开新标签页加载url test_package_list.open_new_table_to_url(url) test_package_list.goto_new_table(url) # 创建分享页面对象 share_add = ShareAddPage(driver) # 填写信息提交并获取测试链接 name = random_string(8) email = name + "@gmail.com" test_url = share_add.page_default_operation(name, email) test_url = share_add.get_test_url(name, email) # 当前页面打开链接 driver.get(test_url) # 点击提交按钮 share_add.submit_btn() share_add.click(share_add.es.submit_btn) # 获取数据 info = data_read["info"] # 填写基本信息并提交 @@ -177,7 +138,7 @@ # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 删除测试包 test_package_list.delete_package() test_package_list.delete_package(TestJAQ.test_package_name) time.sleep(5) # 关闭 driver.quit() testcase/test_main.py
New file @@ -0,0 +1,101 @@ import time import pytest from po.share_add_page import ShareAddPage from po.maq_answer_page import MAQAnswerPage from comm.my_random import * class TestMAQ: driver = None test_package_name = "MAQ自动测试包-20230720170011" @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True) def test_maq(self, data_read: dict, driver): """ 打开分享链接 :return: """ print(f"\n开始进行MAQ测试......") # 获取driver TestMAQ.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 = MAQAnswerPage(driver) # 点击开始测试 answer_page.click(answer_page.se.start_btn, 10) # 跳过练习环节 answer_page.exercise_answer() print("\n开始答题") # 开始答题 answer_page.answer() # 最后检测关闭按钮是否存在 answer_page.get_ele(answer_page.se.close_btn, 30) # def test_answer(self): # # 获取driver # driver = TestMAQ.driver # # 创建answer对象 # answer_page = MAQAnswerPage(driver) # # 点击开始测试 # answer_page.oper_elem("start_btn") # # 开始答题 # flag = answer_page.answer() # # 答完题关闭当前标签页 # driver.close() # if flag is not None or not flag: # assert flag # return # # def test_delete_package(self): # # 获取driver # driver = TestMAQ.driver # # 创建测试包列表页面的对象 # test_package_list = TestPackageListPage(driver) # # 切换到第一个标签页 # test_package_list.switch_window(0) # test_package_list.oper_elem("this_iframe") # # 删除测试包 # test_package_list.oper_elem("delete_btn") # test_package_list.oper_elem("delete_confirm_btn") # time.sleep(3) # # 关闭 # driver.quit() if __name__ == '__main__': pytest.main(["-s", __file__])