123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>rapporDeTestEmma.html</title>
- <style>body {
- font-family: Helvetica, Arial, sans-serif;
- font-size: 12px;
- /* do not increase min-width as some may use split screens */
- min-width: 800px;
- color: #999;
- }
- h1 {
- font-size: 24px;
- color: black;
- }
- h2 {
- font-size: 16px;
- color: black;
- }
- p {
- color: black;
- }
- a {
- color: #999;
- }
- table {
- border-collapse: collapse;
- }
- /******************************
- * SUMMARY INFORMATION
- ******************************/
- #environment td {
- padding: 5px;
- border: 1px solid #E6E6E6;
- }
- #environment tr:nth-child(odd) {
- background-color: #f6f6f6;
- }
- /******************************
- * TEST RESULT COLORS
- ******************************/
- span.passed,
- .passed .col-result {
- color: green;
- }
- span.skipped,
- span.xfailed,
- span.rerun,
- .skipped .col-result,
- .xfailed .col-result,
- .rerun .col-result {
- color: orange;
- }
- span.error,
- span.failed,
- span.xpassed,
- .error .col-result,
- .failed .col-result,
- .xpassed .col-result {
- color: red;
- }
- /******************************
- * RESULTS TABLE
- *
- * 1. Table Layout
- * 2. Extra
- * 3. Sorting items
- *
- ******************************/
- /*------------------
- * 1. Table Layout
- *------------------*/
- #results-table {
- border: 1px solid #e6e6e6;
- color: #999;
- font-size: 12px;
- width: 100%;
- }
- #results-table th,
- #results-table td {
- padding: 5px;
- border: 1px solid #E6E6E6;
- text-align: left;
- }
- #results-table th {
- font-weight: bold;
- }
- /*------------------
- * 2. Extra
- *------------------*/
- .log {
- background-color: #e6e6e6;
- border: 1px solid #e6e6e6;
- color: black;
- display: block;
- font-family: "Courier New", Courier, monospace;
- height: 230px;
- overflow-y: scroll;
- padding: 5px;
- white-space: pre-wrap;
- }
- .log:only-child {
- height: inherit;
- }
- div.image {
- border: 1px solid #e6e6e6;
- float: right;
- height: 240px;
- margin-left: 5px;
- overflow: hidden;
- width: 320px;
- }
- div.image img {
- width: 320px;
- }
- div.video {
- border: 1px solid #e6e6e6;
- float: right;
- height: 240px;
- margin-left: 5px;
- overflow: hidden;
- width: 320px;
- }
- div.video video {
- overflow: hidden;
- width: 320px;
- height: 240px;
- }
- .collapsed {
- display: none;
- }
- .expander::after {
- content: " (show details)";
- color: #BBB;
- font-style: italic;
- cursor: pointer;
- }
- .collapser::after {
- content: " (hide details)";
- color: #BBB;
- font-style: italic;
- cursor: pointer;
- }
- /*------------------
- * 3. Sorting items
- *------------------*/
- .sortable {
- cursor: pointer;
- }
- .sort-icon {
- font-size: 0px;
- float: left;
- margin-right: 5px;
- margin-top: 5px;
- /*triangle*/
- width: 0;
- height: 0;
- border-left: 8px solid transparent;
- border-right: 8px solid transparent;
- }
- .inactive .sort-icon {
- /*finish triangle*/
- border-top: 8px solid #E6E6E6;
- }
- .asc.active .sort-icon {
- /*finish triangle*/
- border-bottom: 8px solid #999;
- }
- .desc.active .sort-icon {
- /*finish triangle*/
- border-top: 8px solid #999;
- }
- </style></head>
- <body onLoad="init()">
- <script>/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
- function toArray(iter) {
- if (iter === null) {
- return null;
- }
- return Array.prototype.slice.call(iter);
- }
- function find(selector, elem) { // eslint-disable-line no-redeclare
- if (!elem) {
- elem = document;
- }
- return elem.querySelector(selector);
- }
- function findAll(selector, elem) {
- if (!elem) {
- elem = document;
- }
- return toArray(elem.querySelectorAll(selector));
- }
- function sortColumn(elem) {
- toggleSortStates(elem);
- const colIndex = toArray(elem.parentNode.childNodes).indexOf(elem);
- let key;
- if (elem.classList.contains('result')) {
- key = keyResult;
- } else if (elem.classList.contains('links')) {
- key = keyLink;
- } else {
- key = keyAlpha;
- }
- sortTable(elem, key(colIndex));
- }
- function showAllExtras() { // eslint-disable-line no-unused-vars
- findAll('.col-result').forEach(showExtras);
- }
- function hideAllExtras() { // eslint-disable-line no-unused-vars
- findAll('.col-result').forEach(hideExtras);
- }
- function showExtras(colresultElem) {
- const extras = colresultElem.parentNode.nextElementSibling;
- const expandcollapse = colresultElem.firstElementChild;
- extras.classList.remove('collapsed');
- expandcollapse.classList.remove('expander');
- expandcollapse.classList.add('collapser');
- }
- function hideExtras(colresultElem) {
- const extras = colresultElem.parentNode.nextElementSibling;
- const expandcollapse = colresultElem.firstElementChild;
- extras.classList.add('collapsed');
- expandcollapse.classList.remove('collapser');
- expandcollapse.classList.add('expander');
- }
- function showFilters() {
- let visibleString = getQueryParameter('visible') || 'all';
- visibleString = visibleString.toLowerCase();
- const checkedItems = visibleString.split(',');
- const filterItems = document.getElementsByClassName('filter');
- for (let i = 0; i < filterItems.length; i++) {
- filterItems[i].hidden = false;
- if (visibleString != 'all') {
- filterItems[i].checked = checkedItems.includes(filterItems[i].getAttribute('data-test-result'));
- filterTable(filterItems[i]);
- }
- }
- }
- function addCollapse() {
- // Add links for show/hide all
- const resulttable = find('table#results-table');
- const showhideall = document.createElement('p');
- showhideall.innerHTML = '<a href="javascript:showAllExtras()">Show all details</a> / ' +
- '<a href="javascript:hideAllExtras()">Hide all details</a>';
- resulttable.parentElement.insertBefore(showhideall, resulttable);
- // Add show/hide link to each result
- findAll('.col-result').forEach(function(elem) {
- const collapsed = getQueryParameter('collapsed') || 'Passed';
- const extras = elem.parentNode.nextElementSibling;
- const expandcollapse = document.createElement('span');
- if (extras.classList.contains('collapsed')) {
- expandcollapse.classList.add('expander');
- } else if (collapsed.includes(elem.innerHTML)) {
- extras.classList.add('collapsed');
- expandcollapse.classList.add('expander');
- } else {
- expandcollapse.classList.add('collapser');
- }
- elem.appendChild(expandcollapse);
- elem.addEventListener('click', function(event) {
- if (event.currentTarget.parentNode.nextElementSibling.classList.contains('collapsed')) {
- showExtras(event.currentTarget);
- } else {
- hideExtras(event.currentTarget);
- }
- });
- });
- }
- function getQueryParameter(name) {
- const match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
- return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
- }
- function init () { // eslint-disable-line no-unused-vars
- resetSortHeaders();
- addCollapse();
- showFilters();
- sortColumn(find('.initial-sort'));
- findAll('.sortable').forEach(function(elem) {
- elem.addEventListener('click',
- function() {
- sortColumn(elem);
- }, false);
- });
- }
- function sortTable(clicked, keyFunc) {
- const rows = findAll('.results-table-row');
- const reversed = !clicked.classList.contains('asc');
- const sortedRows = sort(rows, keyFunc, reversed);
- /* Whole table is removed here because browsers acts much slower
- * when appending existing elements.
- */
- const thead = document.getElementById('results-table-head');
- document.getElementById('results-table').remove();
- const parent = document.createElement('table');
- parent.id = 'results-table';
- parent.appendChild(thead);
- sortedRows.forEach(function(elem) {
- parent.appendChild(elem);
- });
- document.getElementsByTagName('BODY')[0].appendChild(parent);
- }
- function sort(items, keyFunc, reversed) {
- const sortArray = items.map(function(item, i) {
- return [keyFunc(item), i];
- });
- sortArray.sort(function(a, b) {
- const keyA = a[0];
- const keyB = b[0];
- if (keyA == keyB) return 0;
- if (reversed) {
- return keyA < keyB ? 1 : -1;
- } else {
- return keyA > keyB ? 1 : -1;
- }
- });
- return sortArray.map(function(item) {
- const index = item[1];
- return items[index];
- });
- }
- function keyAlpha(colIndex) {
- return function(elem) {
- return elem.childNodes[1].childNodes[colIndex].firstChild.data.toLowerCase();
- };
- }
- function keyLink(colIndex) {
- return function(elem) {
- const dataCell = elem.childNodes[1].childNodes[colIndex].firstChild;
- return dataCell == null ? '' : dataCell.innerText.toLowerCase();
- };
- }
- function keyResult(colIndex) {
- return function(elem) {
- const strings = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed',
- 'Skipped', 'Passed'];
- return strings.indexOf(elem.childNodes[1].childNodes[colIndex].firstChild.data);
- };
- }
- function resetSortHeaders() {
- findAll('.sort-icon').forEach(function(elem) {
- elem.parentNode.removeChild(elem);
- });
- findAll('.sortable').forEach(function(elem) {
- const icon = document.createElement('div');
- icon.className = 'sort-icon';
- icon.textContent = 'vvv';
- elem.insertBefore(icon, elem.firstChild);
- elem.classList.remove('desc', 'active');
- elem.classList.add('asc', 'inactive');
- });
- }
- function toggleSortStates(elem) {
- //if active, toggle between asc and desc
- if (elem.classList.contains('active')) {
- elem.classList.toggle('asc');
- elem.classList.toggle('desc');
- }
- //if inactive, reset all other functions and add ascending active
- if (elem.classList.contains('inactive')) {
- resetSortHeaders();
- elem.classList.remove('inactive');
- elem.classList.add('active');
- }
- }
- function isAllRowsHidden(value) {
- return value.hidden == false;
- }
- function filterTable(elem) { // eslint-disable-line no-unused-vars
- const outcomeAtt = 'data-test-result';
- const outcome = elem.getAttribute(outcomeAtt);
- const classOutcome = outcome + ' results-table-row';
- const outcomeRows = document.getElementsByClassName(classOutcome);
- for(let i = 0; i < outcomeRows.length; i++){
- outcomeRows[i].hidden = !elem.checked;
- }
- const rows = findAll('.results-table-row').filter(isAllRowsHidden);
- const allRowsHidden = rows.length == 0 ? true : false;
- const notFoundMessage = document.getElementById('not-found-message');
- notFoundMessage.hidden = !allRowsHidden;
- }
- </script>
- <h1>rapporDeTestEmma.html</h1>
- <p>Report generated on 11-Jan-2024 at 14:26:16 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.2.0</p>
- <h2>Summary</h2>
- <p>2 tests ran in 10.51 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" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">1 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">
- <tr>
- <th class="sortable result initial-sort" col="result">Result</th>
- <th class="sortable" col="name">Test</th>
- <th class="sortable" col="duration">Duration</th>
- <th class="sortable links" col="links">Links</th></tr>
- <tr hidden="true" id="not-found-message">
- <th colspan="4">No results found. Try to check the filters</th></tr></thead>
- <tbody class="failed results-table-row">
- <tr>
- <td class="col-result">Failed</td>
- <td class="col-name">test_emma.py::test_loginOK</td>
- <td class="col-duration">4.24</td>
- <td class="col-links"></td></tr>
- <tr>
- <td class="extra" colspan="4">
- <div class="log">def test_loginOK():<br/> log.info("Test du Login avec succès")<br/> <br/> #options = webdriver.FirefoxOptions()<br/> #options.add_argument('--headless')<br/> #driver = webdriver.Firefox(options=options)<br/> <br/> driver = webdriver.Chrome()<br/> <br/> <br/> driver.get("https://www.saucedemo.com/")<br/> assert driver.current_url == "https://www.saucedemo.com/", "Nous ne somme pas sur la bonne page"<br/> <br/> username = driver.find_element(By.ID,"user-name")<br/> password = driver.find_element(By.ID,"password")<br/> login = driver.find_element(By.ID, "login-button")<br/> <br/> writeInInput(inputElement=username, text="standard_user")<br/> writeInInput(password, text="secret_sauce")<br/> login.click()<br/> <br/> assert driver.current_url == "https://www.saucedemo.com/inventory.html", "Nous ne somme pas sur la bonne page"<br/> <br/> button_burger = driver.find_element(By.ID, "react-burger-menu-btn")<br/> element_visible_actif(button_burger)<br/> button_burger.click()<br/> <br/> button_all_items = driver.find_element(By.ID, "inventory_sidebar_link")<br/>> element_visible_actif(button_all_items)<br/><br/>test_emma.py:60: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>elem = <selenium.webdriver.remote.webelement.WebElement (session="30669ef07c382a57ad8549d1b4a140e4", element="5BCAF5E204B1832F1809DF0891CE6BAF_element_24")><br/><br/> def element_visible_actif(elem):<br/>> assert elem.is_displayed()<br/><span class="error">E assert False</span><br/><span class="error">E + where False = <bound method WebElement.is_displayed of <selenium.webdriver.remote.webelement.WebElement (session="30669ef07c382a57ad8549d1b4a140e4", element="5BCAF5E204B1832F1809DF0891CE6BAF_element_24")>>()</span><br/><span class="error">E + where <bound method WebElement.is_displayed of <selenium.webdriver.remote.webelement.WebElement (session="30669ef07c382a57ad8549d1b4a140e4", element="5BCAF5E204B1832F1809DF0891CE6BAF_element_24")>> = <selenium.webdriver.remote.webelement.WebElement (session="30669ef07c382a57ad8549d1b4a140e4", element="5BCAF5E204B1832F1809DF0891CE6BAF_element_24")>.is_displayed</span><br/><br/>test_emma.py:29: AssertionError<br/> -------------------------------Captured log call-------------------------------- <br/>INFO root:test_emma.py:33 Test du Login avec succès<br/></div></td></tr></tbody>
- <tbody class="passed results-table-row">
- <tr>
- <td class="col-result">Passed</td>
- <td class="col-name">test_saucedemo.py::test_loginOK</td>
- <td class="col-duration">5.92</td>
- <td class="col-links"></td></tr>
- <tr>
- <td class="extra" colspan="4">
- <div class="log"> -------------------------------Captured log call-------------------------------- <br/>INFO root:test_saucedemo.py:33 Test du Login avec succès<br/></div></td></tr></tbody></table></body></html>
|