yj
2024-07-24 bf3d9cb7cd6d9990ad1e24adeb047343ef215e0d
测评系统自动测试
1个文件已添加
15个文件已修改
1 文件已重命名
618 ■■■■ 已修改文件
.idea/misc.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/tal_autoTest.iml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
base/base_page.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/test_data.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
elements/maq_answer_elements.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/ciaq_answer_page.py 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/jaq_answer_page.py 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/maq_answer_page.py 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/share_add_page.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
po/test_package_list_page.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
report/report.html 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/conftest.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/test_1login.py 补丁 | 查看 | 原始文档 | blame | 历史
testcase/test_ciaq.py 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/test_jaq.py 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
testcase/test_main.py 101 ●●●●● 补丁 | 查看 | 原始文档 | 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__])