From bf3d9cb7cd6d9990ad1e24adeb047343ef215e0d Mon Sep 17 00:00:00 2001 From: yj <2077506045@qq.com> Date: 星期三, 24 七月 2024 09:12:42 +0800 Subject: [PATCH] 测评系统自动测试 --- elements/maq_answer_elements.py | 13 testcase/test_1login.py | 0 po/maq_answer_page.py | 92 ++++++++ base/base_page.py | 2 .idea/tal_autoTest.iml | 2 testcase/test_ciaq.py | 82 +----- testcase/test_main.py | 101 +++++++++ .idea/misc.xml | 2 report/report.html | 172 --------------- po/share_add_page.py | 4 testcase/test_jaq.py | 87 ++----- main.py | 7 po/test_package_list_page.py | 1 po/jaq_answer_page.py | 12 testcase/conftest.py | 16 + data/test_data.json | 1 po/ciaq_answer_page.py | 24 +- 17 files changed, 287 insertions(+), 331 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 9da9111..185a49d 100644 --- a/.idea/misc.xml +++ b/.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> \ No newline at end of file diff --git a/.idea/tal_autoTest.iml b/.idea/tal_autoTest.iml index b18914c..0dfc7e7 100644 --- a/.idea/tal_autoTest.iml +++ b/.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> \ No newline at end of file diff --git a/base/base_page.py b/base/base_page.py index aba837a..48f4473 100644 --- a/base/base_page.py +++ b/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 diff --git a/data/test_data.json b/data/test_data.json index 9370051..3d86b8a 100644 --- a/data/test_data.json +++ b/data/test_data.json @@ -605,6 +605,7 @@ }, "MAQ": { + "share_url": "http://tai-online.com/exam/testMember/shareAdd?packageId=VG5wbk1BPT0=", "menu": "娴嬭瘯鍖呯鐞�/娴嬭瘯鍖呭垪琛�", "add": { "company": "TAI娴嬭瘯", diff --git a/elements/maq_answer_elements.py b/elements/maq_answer_elements.py index 5f0a9ad..8490d10 100644 --- a/elements/maq_answer_elements.py +++ b/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]") diff --git a/main.py b/main.py index fa7772c..c469250 100644 --- a/main.py +++ b/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__': diff --git a/po/ciaq_answer_page.py b/po/ciaq_answer_page.py index 6a55341..e16ebc2 100644 --- a/po/ciaq_answer_page.py +++ b/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) # 鏍囬涓嶅瓨鍦ㄧ洿鎺ヨ繑鍥濬alse 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) diff --git a/po/jaq_answer_page.py b/po/jaq_answer_page.py index a4f99d8..930a3b9 100644 --- a/po/jaq_answer_page.py +++ b/po/jaq_answer_page.py @@ -23,14 +23,14 @@ try: # 鑾峰彇鍒版墍鏈塧閫夐」 - 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() # 鑾峰彇鍒版墍鏈塨閫夐」 - 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: diff --git a/po/maq_answer_page.py b/po/maq_answer_page.py index fbf2696..b084750 100644 --- a/po/maq_answer_page.py +++ b/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涓巕uestion_title涓嶇浉鍚屽垯鍐欏叆question涓� + # # 閬嶅巻瀛楀吀 + # # if question: + # # for key in question.keys(): + # # q_title = self.get_ele(self.se.q_title).text + # # if question[key]["title"] in q_title and "answer" not in question[key]: + # # question[key]["answer"] = number + 1 + # # question_title = q_title + # # break + # options[number].click() + # + # # 鎻愪氦鎸夐挳瀛樺湪鍒欑偣鍑� + # 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) diff --git a/po/share_add_page.py b/po/share_add_page.py index a20733a..893d697 100644 --- a/po/share_add_page.py +++ b/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): diff --git a/po/test_package_list_page.py b/po/test_package_list_page.py index d7f54cf..2b1bd57 100644 --- a/po/test_package_list_page.py +++ b/po/test_package_list_page.py @@ -244,7 +244,6 @@ return flag - def delete_package(self, package_name): """ 鍒犻櫎娴嬭瘯鍖� diff --git a/report/report.html b/report/report.html index ba2fafe..b20b07d 100644 --- a/report/report.html +++ b/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"> diff --git a/testcase/conftest.py b/testcase/conftest.py index d82f962..8ba0f3b 100644 --- a/testcase/conftest.py +++ b/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') # 鍒濆鍖杦ebdriver 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] diff --git a/testcase/test_login.py b/testcase/test_1login.py similarity index 100% rename from testcase/test_login.py rename to testcase/test_1login.py diff --git a/testcase/test_ciaq.py b/testcase/test_ciaq.py index 25566a6..fa2ae97 100644 --- a/testcase/test_ciaq.py +++ b/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 - - # 娴忚鍣ㄧ獥鍙f渶澶у寲 - driver.maximize_window() - # 鑾峰彇鍒板埛鏂版寜閽苟姣�10绉掔偣鍑讳竴娆�,鐭ラ亾鍒锋柊鎸夐挳娑堝け - while True: - try: - # 鍒ゆ柇鎵撳紑鐨勯〉闈㈡槸鍚﹀瓨鍦ㄥ埛鏂版寜閽� - reload_btn = login_page.get_element((By.XPATH, "//div[@id='buttons']/div/button[@id='reload-button']")) - # 鐐瑰嚮鍒锋柊鎸夐挳 - reload_btn.click() - time.sleep(10) - except: - # 鍑虹幇寮傚父琛ㄧず涓嶅瓨鍦ㄥ埛鏂版寜閽� - # 鎺ョ潃鍒ゆ柇鏄惁瀛樺湪nginx error! - try: - nginx_error = login_page.get_element((By.XPATH, "//strong[text() = 'nginx error!']")) - # 瀛樺湪鍒欑潯鐪�10绉� - time.sleep(10) - except: - break - - login_page.login(data_read["username"], data_read["password"], data_read["code"]) - time.sleep(2) - assert login_page.is_login_success() - @pytest.mark.parametrize('data_read', ["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() # 鑾峰彇鍒皍rl - 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() diff --git a/testcase/test_jaq.py b/testcase/test_jaq.py index 468f9b9..15b59e6 100644 --- a/testcase/test_jaq.py +++ b/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 - - # 娴忚鍣ㄧ獥鍙f渶澶у寲 - driver.maximize_window() - # 鑾峰彇鍒板埛鏂版寜閽苟姣�10绉掔偣鍑讳竴娆�,鐭ラ亾鍒锋柊鎸夐挳娑堝け - while True: - try: - # 鍒ゆ柇鎵撳紑鐨勯〉闈㈡槸鍚﹀瓨鍦ㄥ埛鏂版寜閽� - reload_btn = login_page.get_element((By.XPATH, "//div[@id='buttons']/div/button[@id='reload-button']")) - # 鐐瑰嚮鍒锋柊鎸夐挳 - reload_btn.click() - time.sleep(10) - except: - # 鍑虹幇寮傚父琛ㄧず涓嶅瓨鍦ㄥ埛鏂版寜閽� - # 鎺ョ潃鍒ゆ柇鏄惁瀛樺湪nginx error! - try: - nginx_error = login_page.get_element((By.XPATH, "//strong[text() = 'nginx error!']")) - # 瀛樺湪鍒欑潯鐪�10绉� - time.sleep(10) - except: - break - - login_page.login(data_read["username"], data_read["password"], data_read["code"]) - time.sleep(2) - assert login_page.is_login_success() - @pytest.mark.parametrize('data_read', ["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() # 鑾峰彇鍒皍rl - 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() diff --git a/testcase/test_main.py b/testcase/test_main.py new file mode 100644 index 0000000..78d003c --- /dev/null +++ b/testcase/test_main.py @@ -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寮�濮嬭繘琛孧AQ娴嬭瘯......") + # 鑾峰彇driver + TestMAQ.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 = 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__]) -- Gitblit v1.9.1