123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425 |
- {% extends "base.html" %}
- {% block title %}
- {{ type|name_by_type }}
- {% endblock %}
- {% block content %}
- <main>
- <!-- bread crumb -->
- <nav aria-label="breadcrumb">
- <ol class="breadcrumb">
- <li class="breadcrumb-item"><a href="/">Home</a></li>
- <li class="breadcrumb-item active" aria-current="page">{{ type|name_by_type }}</li>
- </ol>
- </nav>
- <!-- flash messages -->
- {% with messages = get_flashed_messages(with_categories=true) %}
- {% for category, msg in messages %}
- <div class="alert alert-{{ category }} alert-dismissible fade show" role="alert">
- {{ msg }}
- <button type="button" class="close" data-dismiss="alert" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- {% endfor %}
- {% endwith %}
- <!-- item list -->
- <div class="container mt-5">
- <!-- item title -->
- <div class="row">
- <div class="col-md-9">
- <h2>{{ type|name_by_type }}</h2>
- </div>
- <!-- create button -->
- <div class="col-md-3">
- <a class="btn btn-primary {% if type == 'testrun' %} btn-right {% endif %}" href="/{{ type }}/new" role="button">
- <strong>+ </strong>create {{ type|name_by_type(False) }}
- </a>
- </div>
- </div>
- <!-- filter box -->
- <div class="row mb-3">
- <div class="col-md-9">
- <input type="text" id="filter" placeholder="Search..." onkeyup="filter_items(this)">
- </div>
- <!-- Testrun Import button -->
- {% if type == 'testrun' %}
- <div class="col-md-3">
- <button type="button" class="btn btn-success btn-right" data-toggle="modal" data-target="#importModal">
- <strong>+ </strong>import {{ type|name_by_type(False) }}
- </button>
- </div>
- <!-- Import Modal -->
- <div class="modal fade" id="importModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="exampleModalLabel">Import {{ type|name_by_type(False) }}</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <form method="post" enctype="multipart/form-data" action="{{ url_for('import_testsun') }}">
- {{ form.hidden_tag() }}
- <div class="modal-body">
- <div class="custom-file">
- <!--input type="file" class="custom-file-input" id="customFile" onchange="get_file(this)"-->
- {{ form.file(class="custom-file-input", accept=".xlsx", onchange="get_file(this)") }}
- <label class="custom-file-label" for="{{ form.file.name }}">Choose a file</label>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="btn btn-primary">Import</button>
- </div>
- </form>
- </div>
- </div>
- </div>
- {% endif %}
- </div>
- <!-- header -->
- <div class="row border-top border-bottom py-3">
- <div class="col-md-4"><strong>Name</strong></div>
- <div class="col-md-5"><strong>Description</strong></div>
- <!-- Test Step fields -->
- {% if type == 'teststep' %}
- <div class="col"><strong>Activity Type</strong></div>
- {% else %}
- <div class="col"><strong>Created</strong></div>
- {% endif %}
- </div>
- <!-- item list -->
- {% for item in items %}
- <div class="row border-top py-3 testrun-item">
- <div class="col-md-4 text-break">
- <a class="filtered" data-toggle="collapse" href="#item{{ item.id }}" aria-expanded="false">
- {{ item.name }}
- </a>
- </div>
- <div class="filtered col-md-5 text-break text-break">{{ item.description }}</div>
- {% if type == 'teststep' %}
- <div class="filtered col">{{ item.activity_type }}</div>
- {% else %}
- <div class="col">{{ item.created|time }}</div>
- {% endif %}
- <div class="col-12 collapse mt-1" id="item{{ item.id }}">
- <!-- created data -->
- <p><small>
- Created {{ item.created|time }} by {{ item.creator }}
- </small></p>
- <!-- edited data -->
- {% if item.edited %}
- <p><small>
- Last edidted {{ item.edited|time }} by {{ item.editor }}
- </small></p>
- {% endif %}
- <ul class="list-group">
- <!-- description -->
- {% if not type == 'teststep' %}
- <li class="list-group-item h5 list-group-item-dark">Description</li>
- <li class="list-group-item">{{ item.description }}</li>
- {% endif %}
- <!-- Testrun fields -->
- {% if type == 'testrun' %}
- <li class="list-group-item h5 list-group-item-dark">{{ 'testcase_sequence'|name_by_type }}</li>
- {% if item.testcase_sequences %}
- {% for sequence in item.testcase_sequences %}
- <li class="list-group-item">{{ sequence }}</li>
- {% endfor %}
- {% else %}
- <li class="list-group-item">No Test Case Sequence Defined</li>
- {% endif %}
- {% endif %}
- <!-- Class Name -->
- {% if type == 'testcase_sequence' or type == 'testcase' or type == 'teststep_sequences' %}
- <li class="list-group-item h5 list-group-item-dark">Class Name</li>
- <li class="list-group-item">{{ item.classname }}</li>
-
- {% endif %}
- <!-- Testcase Sequence fields -->
- {% if type == 'testcase_sequence' %}
- <li class="list-group-item h5 list-group-item-dark">Data Files</li>
- {% if item.datafiles %}
- {% for datafile in item.datafiles %}
- <li class="list-group-item">{{ datafile }}</li>
- {% endfor %}
- {% else %}
- <li class="list-group-item">No Data File Defined</li>
- {% endif %}
- <li class="list-group-item h5 list-group-item-dark">{{ 'testcase'|name_by_type }}</li>
- {% if item.testcases %}
- {% for testcase in item.testcases %}
- <li class="list-group-item">{{ testcase }}</li>
- {% endfor %}
- {% else %}
- <li class="list-group-item">No Test Case Defined</li>
- {% endif %}
- {% endif %}
- <!-- Test Case fields -->
- {% if type == 'testcase' %}
- <li class="list-group-item h5 list-group-item-dark">Browser Type</li>
- <li class="list-group-item">{{ item.browser_type }}</li>
- <li class="list-group-item h5 list-group-item-dark">Test Case Type</li>
- <li class="list-group-item">{{ item.testcase_type }}</li>
- <li class="list-group-item h5 list-group-item-dark">{{ 'teststep_sequence'|name_by_type }}</li>
- {% if item.teststep_sequences %}
- {% for sequence in item.teststep_sequences %}
- <li class="list-group-item">{{ sequence }}</li>
- {% endfor %}
- {% else %}
- <li class="list-group-item">No Test Case Step Sequence Defined</li>
- {% endif %}
- {% endif %}
- <!-- Test Step Sequence fields -->
- {% if type == 'teststep_sequence' %}
- <li class="list-group-item h5 list-group-item-dark">{{ 'teststep'|name_by_type }}</li>
- {% if item.teststeps %}
- {% for step in item.teststeps %}
- <li class="list-group-item">{{ step }}</li>
- {% endfor %}
- {% else %}
- <li class="list-group-item">No Test Step Defined</li>
- {% endif %}
- {% endif %}
- <!-- Test Step fields -->
- {% if type == 'teststep' %}
- <li class="list-group-item h5 list-group-item-dark">Parameters</li>
- <li class="list-group-item">
- <!--
- <div class="row border-bottom py-2">
- <div class="col-md-3">
- <strong>Activity Type</strong>
- </div>
- <div class="col">
- {{ item.activity_type }}
- </div>
- </div>
- -->
- <!-- Valu/Comparision -->
- <div class="row py-2">
- <div class="col-md-2">
- <strong>Value</strong>
- </div>
- <div class="col-md-2">
- <strong>Comparision</strong>
- </div>
- <div class="col-md-2">
- <strong>Value 2</strong>
- </div>
- </div>
- <div class="row border-bottom py-2">
- <div class="col-md-2 text-break">
- {{ item.value }}
- </div>
- <div class="col-md-2">
- {{ item.comparision }}
- </div>
- <div class="col-md-2">
- {{ item.value2 }}
- </div>
- </div>
- <!-- others -->
- <div class="row border-bottom py-2">
- <div class="col-md-3">
- <strong>Locator Type</strong>
- </div>
- <div class="col-md-9">
- {{ item.locator_type }}
- </div>
- </div>
- <div class="row border-bottom py-2">
- <div class="col-md-3">
- <strong>Locator</strong>
- </div>
- <div class="col-md-9">
- {% if item.locator %}{{ item.locator }}{% endif %}
- </div>
- </div>
- <div class="row border-bottom py-2">
- <div class="col-md-3">
- <strong>Optional</strong>
- </div>
- <div class="col-md-9">
- {{ item.optional }}
- </div>
- </div>
- <div class="row border-bottom py-2">
- <div class="col-md-3">
- <strong>Timeout</strong>
- </div>
- <div class="col-md-9">
- {% if item.timeout %}{{ item.timeout }}{% endif %}
- </div>
- </div>
- <div class="row border-bottom py-2">
- <div class="col-md-3">
- <strong>Release</strong>
- </div>
- <div class="col-md-9">
- {% if item.release %}{{ item.release }}{% endif %}
- </div>
- </div>
- </li>
- {% endif %}
- </ul>
-
- <!-- buttons -->
- <p>
- <a class="btn btn-primary px-5 my-3 mr-3" href="/{{ type }}/{{ item.id }}/edit" role="button">Edit</a>
- <!-- Testrun buttons -->
- {% if type == 'testrun' %}
- <!-- Update button -->
- <button type="button" class="btn btn-primary px-5 my-3 mr-3" data-toggle="modal" data-target="#updateModal" onmousedown="set_update_item('{{ item.id }}')">
- Update
- </button>
- <!-- Export button -->
- <button type="button" class="btn btn-success px-5 my-3 mr-3" data-toggle="modal" data-target="#exportModal" onmousedown="set_export_id('{{ item.id }}')">
- Export
- </button>
- {% endif %}
- <button class="btn btn-danger px-5 my-3" data-toggle="modal" data-target="#deleteModal" onmousedown="set_delete_item('{{ type|name_by_type }}','{{ type }}','{{ item.id }}')">
- Delete
- </button>
- </p>
-
- </div>
- </div>
- {% endfor %}
- <!-- Update Modal -->
- {% if type == 'testrun' %}
- <div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel" aria-hidden="true">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="updateLabel"></h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <form method="post" enctype="multipart/form-data" id="updateForm">
- {{ form.hidden_tag() }}
- <div class="modal-body">
- <div class="custom-file">
- {{ form.file(class="custom-file-input", accept=".xlsx", onchange="get_file(this)") }}
- <label class="custom-file-label" for="{{ form.file.name }}">Choose a file</label>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="btn btn-primary">Update</button>
- </div>
- </form>
- </div>
- </div>
- </div>
- {% endif %}
- <!-- Export Modal -->
- <div class="modal fade" id="exportModal" data-backdrop="static" tabindex="-1" role="dialog" aria-labelledby="exportLabel" aria-hidden="true">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="exportLabel">Export Testrun</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body" id="exportModalBody">
- <div id="exportResponse">
- </div>
- <div id="exportRequest">
- <div class="custom-control custom-radio">
- <input type="radio" id="xlsxRadio" name="formatRadio" class="custom-control-input" checked>
- <label class="custom-control-label" for="xlsxRadio">XLSX</label>
- </div>
- <div class="custom-control custom-radio">
- <input type="radio" id="jsonRadio" name="formatRadio" class="custom-control-input" disabled>
- <label class="custom-control-label" for="jsonRadio">JSON</label>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary" id="exportButton" onclick="exportTestrun(this)">Export</button>
- </div>
- </div>
- </div>
- </div>
- <!-- Delete Modal -->
- <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteLabel" aria-hidden="true">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="deleteLabel"></h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body">
- Delete all child elements?
- </div>
- <div class="modal-footer dialog" id="deleteButtons">
- <button type="button" class="btn btn-secondary btn-right" onclick="delete_item(this.parentElement, true)">
- Yes
- </button>
- <button type="button" class="btn btn-primary btn-right" onclick="delete_item(this.parentElement, false)">
- No
- </button>
- </div>
- </div>
- </div>
- </div>
- </div>
- </main>
- {% endblock %}
|